Amazon Managed Grafana 对 AWS 数据来源的权限和策略 - Amazon Managed Grafana

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

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 的策略列出的 ListDescribe 权限,仅在正常发现和预置数据来源时才需要。如果您只想手动设置这些数据来源,则不需要这些权限。

跨账户访问

在账户 11111111111111 中创建工作区时,必须提供账户 111111111111111 中的角色。在本例中,将此角色称为 WorkspaceRole。要访问账户 999999999999 中的数据,必须在账户 999999999999 中创建一个角色。将其称为 DataSourceRole。然后,必须在 WorkspaceRoleDataSourceRole 之间建立信任关系。有关在两个角色之间建立信任关系的更多信息,请参阅 IAM 教程:使用 IAM 角色委托跨 AWS 账户的访问权限

DataSourceRole 需要包含本节前面为要使用的每个数据来源列出的策略声明。建立信任关系后,您可以在工作区中任何 AWS 数据来源的数据来源配置页面上的承担角色 ARN 字段中,指定 DataSourceRole 的 ARN(arn:aws:iam::999999999999:role:DataSourceRole)。然后,数据来源将使用 DataSourceRole 中定义的权限访问账户 9999999999。