本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
Amazon Managed Grafana 对 AWS 数据来源的权限和策略
Amazon Managed Grafana 提供三种权限模式:
-
当前账户的服务管理权限
-
组织的服务管理权限
-
客户管理的权限
创建工作区时,您可以选择要使用的权限模式。如果需要,您也可以稍后更改。
在任一服务管理的权限模式下,Amazon Managed Grafana 都会创建所需的角色和策略,以访问和发现账户或组织中的 AWS 数据来源。然后,您可以选择在 IAM 控制台中编辑这些策略。
单个账户的服务管理权限
在此模式下,Amazon Managed Grafana 会创建一个名为 AmazonGrafanaServiceRole-random-id
的角色。然后,Amazon Managed Grafana 会针对您选择从 Amazon Managed Grafana 工作区访问的每个 AWS 服务,将相应的策略附加到此角色。
- CloudWatch
-
Amazon Managed Grafana 会附加 AWS 管理的策略 AmazonGrafanaCloudWatchAccess。
注意
对于在创建 AmazonGrafanaCloudWatchAccess 管理的策略之前使用 CloudWatch 的工作区,Amazon Managed Grafana 会创建名称为 AmazonGrafanaCloudWatchPolicy-
random-id
的客户管理型策略。 - Amazon OpenSearch Service
-
Amazon Managed Grafana 会创建名称为 AmazonGrafanaOpenSearchPolicy-
random-id
的客户管理型策略。访问数据来源需要 Get/Post 权限。Amazon Managed Grafana 会使用 List/Describe 权限来发现数据来源,但数据来源插件的运行并不需要这些权限。策略的内容如下所示:{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "es:ESHttpGet", "es:DescribeElasticsearchDomains", "es:ListDomainNames" ], "Resource": "*" }, { "Effect": "Allow", "Action": "es:ESHttpPost", "Resource": [ "arn:aws:es:*:*:domain/*/_msearch*", "arn:aws:es:*:*:domain/*/_opendistro/_ppl" ] } ] }
- AWS IoT SiteWise
-
Amazon Managed Grafana 会附加 AWS 管理的策略 AWSIoTSiteWiseReadOnlyAccess。
- Amazon Redshift
-
Amazon Managed Grafana 会附加 AWS 管理的策略 AmazonGrafanaRedshiftAccess。
- Amazon Athena
-
Amazon Managed Grafana 会附加 AWS 管理的策略 AmazonGrafanaAthenaAccess。
- Amazon Managed Service for Prometheus
-
Amazon Managed Grafana 会创建名称为 AmazonGrafanaPrometheusPolicy-
random-id
的客户管理型策略。Amazon Managed Grafana 会使用 List/Describe 权限来发现数据来源,但插件的运行并不需要这些权限。策略的内容如下所示:{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "aps:ListWorkspaces", "aps:DescribeWorkspace", "aps:QueryMetrics", "aps:GetLabels", "aps:GetSeries", "aps:GetMetricMetadata" ], "Resource": "*" } ] }
- Amazon SNS
-
Amazon Managed Grafana 会创建名称为 AmazonGrafanaSNSPolicy-
random-id
的客户管理型策略。该策略限制您只能使用账户中以字符串grafana
开头的 SNS 主题。如果您创建了自己的策略,则无需受此限制。策略的内容如下所示:{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "sns:Publish" ], "Resource": [ "arn:aws:sns:*:
accountId
:grafana*" ] } ] } - Timestream
-
Amazon Managed Grafana 会附加 AWS 管理的策略 AmazonTimestreamReadOnlyAccess。
- X-Ray
-
Amazon Managed Grafana 会附加 AWS 管理的策略 AWSXrayReadOnlyAccess。
组织的服务管理权限
该模式仅支持在组织的管理账户或委托管理员账户中创建的工作区。委托管理员账户可以为组织创建和管理堆栈集。有关委托管理员账户的更多信息,请参阅注册委托管理员。
注意
在组织的管理账户中创建 Amazon Managed Grafana 工作区等资源违反 AWS 安全最佳实践。
在此模式下,Amazon Managed Grafana 会创建访问 AWS 组织中其他账户 AWS 资源所需的所有 IAM 角色。在您选择的组织单位中的每个账户中,Amazon Managed Grafana 都会创建一个名为 AmazonGrafanaOrgMemberRole-random-id
的角色。将通过与 AWS CloudFormation StackSets 的集成来执行此角色的创建。
对于您选择在工作区中使用的每个 AWS 数据来源,该角色都有一个附加的策略。有关这些数据策略的内容,请参阅 单个账户的服务管理权限 。
Amazon Managed Grafana 还会在组织的管理账户中创建一个名为 AmazonGrafanaOrgAdminRole-random-id
的角色。此角色使 Amazon Managed Grafana 工作区有权限访问组织中的其他账户。AWS 服务通知渠道策略也会附加到此角色。使用工作区中的 AWS 数据来源菜单,可为工作区可以访问的每个账户快速预置数据来源。
要使用此模式,您必须在您的 AWS CloudFormation 组织中将 AWS Stacksets 作为可信服务启用。有关更多信息,请参阅使用 AWS Organizations 启用可信访问权限。
以下是 AmazonGrafanaStackSet-random-id
堆栈集的内容:
Parameters: IncludePrometheusPolicy: Description: Whether to include Amazon Prometheus access in the role Type: String AllowedValues: - true - false Default: false IncludeAESPolicy: Description: Whether to include Amazon Elasticsearch access in the role Type: String AllowedValues: - true - false Default: false IncludeCloudWatchPolicy: Description: Whether to include CloudWatch access in the role Type: String AllowedValues: - true - false Default: false IncludeTimestreamPolicy: Description: Whether to include Amazon Timestream access in the role Type: String AllowedValues: - true - false Default: false IncludeXrayPolicy: Description: Whether to include AWS X-Ray access in the role Type: String AllowedValues: - true - false Default: false IncludeSitewisePolicy: Description: Whether to include AWS IoT SiteWise access in the role Type: String AllowedValues: - true - false Default: false IncludeRedshiftPolicy: Description: Whether to include Amazon Redshift access in the role Type: String AllowedValues: - true - false Default: false IncludeAthenaPolicy: Description: Whether to include Amazon Athena access in the role Type: String AllowedValues: - true - false Default: false RoleName: Description: Name of the role to create Type: String AdminAccountId: Description: Account ID of the Amazon Grafana org admin Type: String Conditions: addPrometheus: !Equals [!Ref IncludePrometheusPolicy, true] addAES: !Equals [!Ref IncludeAESPolicy, true] addCloudWatch: !Equals [!Ref IncludeCloudWatchPolicy, true] addTimestream: !Equals [!Ref IncludeTimestreamPolicy, true] addXray: !Equals [!Ref IncludeXrayPolicy, true] addSitewise: !Equals [!Ref IncludeSitewisePolicy, true] addRedshift: !Equals [!Ref IncludeRedshiftPolicy, true] addAthena: !Equals [!Ref IncludeAthenaPolicy, true] Resources: PrometheusPolicy: Type: AWS::IAM::Policy Condition: addPrometheus Properties: Roles: - !Ref GrafanaMemberServiceRole PolicyName: AmazonGrafanaPrometheusPolicy PolicyDocument: Version: '2012-10-17' Statement: - Effect: Allow Action: - aps:QueryMetrics - aps:GetLabels - aps:GetSeries - aps:GetMetricMetadata - aps:ListWorkspaces - aps:DescribeWorkspace Resource: '*' AESPolicy: Type: AWS::IAM::Policy Condition: addAES Properties: Roles: - !Ref GrafanaMemberServiceRole PolicyName: AmazonGrafanaElasticsearchPolicy PolicyDocument: Version: '2012-10-17' Statement: - Sid: AllowReadingESDomains Effect: Allow Action: - es:ESHttpGet - es:ESHttpPost - es:ListDomainNames - es:DescribeElasticsearchDomains Resource: '*' CloudWatchPolicy: Type: AWS::IAM::Policy Condition: addCloudWatch Properties: Roles: - !Ref GrafanaMemberServiceRole PolicyName: AmazonGrafanaCloudWatchPolicy PolicyDocument: Version: '2012-10-17' Statement: - Sid: AllowReadingMetricsFromCloudWatch Effect: Allow Action: - cloudwatch:DescribeAlarmsForMetric - cloudwatch:DescribeAlarmHistory - cloudwatch:DescribeAlarms - cloudwatch:ListMetrics - cloudwatch:GetMetricStatistics - cloudwatch:GetMetricData - cloudwatch:GetInsightRuleReport Resource: "*" - Sid: AllowReadingLogsFromCloudWatch Effect: Allow Action: - logs:DescribeLogGroups - logs:GetLogGroupFields - logs:StartQuery - logs:StopQuery - logs:GetQueryResults - logs:GetLogEvents Resource: "*" - Sid: AllowReadingTagsInstancesRegionsFromEC2 Effect: Allow Action: - ec2:DescribeTags - ec2:DescribeInstances - ec2:DescribeRegions Resource: "*" - Sid: AllowReadingResourcesForTags Effect: Allow Action: - tag:GetResources Resource: "*" GrafanaMemberServiceRole: Type: 'AWS::IAM::Role' Properties: RoleName: !Ref RoleName AssumeRolePolicyDocument: Version: '2012-10-17' Statement: - Effect: Allow Principal: AWS: !Sub arn:aws:iam::${AdminAccountId}:root Action: - 'sts:AssumeRole' Path: /service-role/ ManagedPolicyArns: - !If [addTimestream, arn:aws:iam::aws:policy/AmazonTimestreamReadOnlyAccess, !Ref AWS::NoValue] - !If [addXray, arn:aws:iam::aws:policy/AWSXrayReadOnlyAccess, !Ref AWS::NoValue] - !If [addSitewise, arn:aws:iam::aws:policy/AWSIoTSiteWiseReadOnlyAccess, !Ref AWS::NoValue] - !If [addRedshift, arn:aws:iam::aws:policy/service-role/AmazonGrafanaRedshiftAccess, !Ref AWS::NoValue] - !If [addAthena, arn:aws:iam::aws:policy/service-role/AmazonGrafanaAthenaAccess, !Ref AWS::NoValue]
以下是 AmazonGrafanaOrgAdminPolicy-random-id
的内容。
{ "Version": "2012-10-17", "Statement": [{ "Effect": "Allow", "Action": [ "organizations:ListAccountsForParent", "organizations:ListOrganizationalUnitsForParent" ], "Resource": "*", "Condition": { "StringEquals": { "aws:PrincipalOrgID": "o-
organizationId
" } } }, { "Effect": "Allow", "Action": [ "sts:AssumeRole" ], "Resource": "arn:aws:iam::*:role/service-role/AmazonGrafanaOrgMemberRole-random-Id
" }] }
客户管理的权限
如果您选择使用客户管理的权限,在创建 Amazon Managed Grafana 工作区时,应指定账户中现有的 IAM 角色。该角色必须具有信任 grafana.amazonaws.com
的信任策略。
以下是此类策略的一个示例:
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": "grafana.amazonaws.com" }, "Action": "sts:AssumeRole" } ] }
要让该角色访问该账户中的 AWS 数据来源或通知渠道,其必须拥有本节前面列出的策略中的权限。例如,要使用 CloudWatch 数据来源,它必须拥有 单个账户的服务管理权限 中列出的 CloudWatch 策略中的权限。
在 单个账户的服务管理权限 中,针对 Amazon OpenSearch Service 和 Amazon Managed Service for Prometheus 的策略列出的 List
和 Describe
权限,仅在正常发现和预置数据来源时才需要。如果您只想手动设置这些数据来源,则不需要这些权限。
跨账户访问
在账户 11111111111111 中创建工作区时,必须提供账户 111111111111111 中的角色。在本例中,将此角色称为 WorkspaceRole。要访问账户 999999999999 中的数据,必须在账户 999999999999 中创建一个角色。将其称为 DataSourceRole。然后,必须在 WorkspaceRole 和 DataSourceRole 之间建立信任关系。有关在两个角色之间建立信任关系的更多信息,请参阅 IAM 教程:使用 IAM 角色委托跨 AWS 账户的访问权限。
DataSourceRole 需要包含本节前面为要使用的每个数据来源列出的策略声明。建立信任关系后,您可以在工作区中任何 AWS 数据来源的数据来源配置页面上的承担角色 ARN 字段中,指定 DataSourceRole 的 ARN(arn:aws:iam::999999999999:role:DataSourceRole)。然后,数据来源将使用 DataSourceRole 中定义的权限访问账户 9999999999。