配置 AWS 身份验证
Grafana 数据源插件对 AWS 的请求是代表 AWS Identity and Access Management (IAM) 角色或 IAM 用户发出的。IAM 用户或 IAM 角色必须拥有相关的策略,才能执行特定的 API 操作来查询数据源中的数据。由于这些策略特定于每个数据源,因此请参阅每个数据源插件的文档以获取详细信息。
所有对 AWS API 的请求都由 Grafana 后端使用官方 AWS SDK 在服务器端执行。
本主题包含以下部分
选择身份验证方法
根据您的配置和 Grafana 实例运行的环境,您将有不同的身份验证方法可供选择。
开源 Grafana 默认启用 AWS SDK Default
、Credentials file
和 Access and secret key
方法。Grafana Cloud 默认启用 Access and secret key
。如果需要,如果您有服务器配置访问权限,可以启用或禁用特定的身份验证提供商。更多信息,请参阅 allowed_auth_providers
文档。
AWS SDK Default
不执行自定义配置,而是使用 AWS SDK for Go 指定的默认提供商。它要求您在 Grafana 之外配置 AWS 凭证,例如通过CLI,或通过直接将凭证附加到 EC2 实例、ECS 任务,或 Kubernetes 集群中的服务账户。使用AWS SDK Default
,您可以直接将权限附加到数据源,也可以将其与可选的Assume Role ARN
字段结合使用。Credentials file
直接对应于 AWS SDK for Go 中的 SharedCredentialsProvider 提供商。它读取 AWS 共享凭证文件以查找给定的 profile。虽然AWS SDK Default
也会找到共享凭证文件,但此选项允许您在不使用环境变量的情况下指定要使用的 profile。此选项没有任何隐式回退到其他凭证提供商,如果文件中提供的凭证不正确,则会失败。Access and secret key
对应于 StaticProvider,并使用给定的访问密钥 ID 和 secret key 进行身份验证。此方法没有任何回退,如果提供的密钥对无效,则会失败。这是 Grafana Cloud 的主要身份验证方法。Grafana Assume Role
- 使用此身份验证提供商选项,Grafana Cloud 用户创建与 Grafana 的 AWS 账户具有信任关系的 AWS IAM 角色。Grafana 然后使用 STS 代表自己生成临时凭证。启用此选项的用户不再需要为用户生成 secret key 和 access key。更多详细信息,请参阅使用 Grafana Assume Role。Workspace IAM role
对应于 EC2RoleProvider。EC2RoleProvider 拉取附加到 Grafana 运行所在的 EC2 实例的角色凭证。您也可以使用 AWS SDK Default 身份验证方法实现此目的,但此选项不同之处在于它没有任何回退。此选项仅在 Amazon Managed Grafana 中默认启用。
代入角色
注意
Grafana Assume Role 需要代入角色。
您可以在 Assume Role ARN 字段中指定要代入的 IAM 角色。
填充此字段后,Grafana 会使用提供的凭证执行 sts:AssumeRole 调用。在此场景下,主要身份验证方法不需要直接访问 CloudWatch 的权限;它只需要能够代入角色,而代入的角色应该具有访问 CloudWatch 的权限。
例如,您可能有一组用于所有 AWS 数据源的长期凭证。但是,您希望限制每个数据源对 AWS 的访问权限(例如,一个访问 staging 数据,另一个访问 production 数据)。您可以为每个数据源创建单独的凭证,每个凭证维护自己的一组对各种资源的权限。然而,根据您拥有多少数据源实例以及您如何设置它们,这可能意味着需要轮换和管理许多不同的 secret key 和 access key。
相反,使用代入角色功能,您可以为所有 AWS 数据源设置一组 AWS 凭证,该凭证只有一个权限——使用 STS 代入角色的权限。然后,您可以为每个数据源创建单独的 IAM 角色,该角色指定该数据源可以临时代入哪些权限。由于 IAM 角色不是凭证,因此无需轮换,并且可能更容易管理。
Grafana Assume Role 也促进了这一点。使用此角色,Grafana 的 AWS 账户充当主要凭证,仅拥有代入其他账户中角色的权限。然后,您可以创建 IAM 角色供 Grafana 的账户代入。更多信息,请参阅使用 Grafana Assume Role。
如果 Assume Role ARN 字段留空,Grafana 将直接使用所选身份验证方法提供的凭证,并且访问 AWS 数据的权限必须直接附加到这些凭证。除 Grafana Assume Role 外,Assume Role ARN 字段对所有身份验证方法都是可选的。
要在开源 Grafana 或 Grafana Enterprise 中禁用此功能,请参阅 assume_role_enabled
文档。
使用外部 ID
注意
您不能将外部 ID 用于 Grafana Assume Role 身份验证提供商。
要代入在另一个账户中使用外部 ID 创建的角色,请在 External ID 字段中指定外部 ID。
更多信息,请参阅 AWS 关于外部 ID 的文档。
当选择 Grafana Assume Role 作为身份验证提供商时,Grafana 负责提供和调用外部 ID。外部 ID 显示在数据源配置页面上,对您的账户是唯一的。在为 Grafana Assume Role
创建 IAM 角色时,设置一个条件,使 Grafana 的 AWS 账户仅在指定特定外部 ID 时才能代入您的 IAM 角色,这一点非常重要。
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": {
"AWS": {Grafana's AWS Account}
},
"Action": "sts:AssumeRole",
"Condition": {
"StringEquals": {
"sts:ExternalId": {External ID unique to your account}
}
}
}
]
}
使用自定义终端节点
您可以在 Endpoint 字段中指定自定义终端节点 URL,这将覆盖 AWS 服务 API 的默认生成终端节点。将此字段留空以使用默认生成终端节点。
有关为何以及如何使用服务终端节点的更多信息,请参阅 AWS 服务终端节点文档。
使用 AWS 凭证文件
在运行 grafana-server
服务用户的 HOME
路径下创建文件 ~/.aws/credentials
。
注意
如果您认为凭证文件在正确的位置但不起作用,请尝试将您的
.aws
文件移动到/usr/share/grafana/
并将凭证文件的权限设置为最高 0644。
凭证文件示例
[default]
aws_access_key_id = asdsadasdasdasd
aws_secret_access_key = dasdasdsadasdasdasdsa
region = us-west-2
为服务账户使用 EKS IAM 角色
容器中的 Grafana 进程以用户 472(称为“grafana”)身份运行。当 Kubernetes 挂载您投射的凭证时,它们默认仅对 root 用户可用。
要授予用户 472 访问凭证的权限,并避免回退到附加到 EC2 实例的 IAM 角色,您必须为您的 Pod 提供一个安全上下文。
安全上下文示例
securityContext:
fsGroup: 472
runAsUser: 472
runAsGroup: 472
使用 Grafana Assume Role
注意
Grafana Assume Role 目前在 Grafana Cloud 中处于私有预览阶段。
目前仅适用于 Amazon CloudWatch。
要抢先体验此功能,请联系客户支持并要求为您的账户启用
awsDatasourcesTempCredentials
功能开关。
Grafana Assume Role 身份验证提供商允许您无需创建和维护长期 AWS 用户或轮换其 access key 和 secret key 即可使用 AWS 进行身份验证。相反,您可以创建一个具有访问 CloudWatch 权限并与 Grafana 的 AWS 账户具有信任关系的 IAM 角色。然后,Grafana 的 AWS 账户会向 AWS 发出 STS 请求,以创建临时凭证来访问您的 AWS 数据。它通过传递每个 Cloud 账户唯一的 externalID
来发出此 STS 请求,以确保 Grafana Cloud 用户只能访问自己的 AWS 数据。更多信息,请参阅 AWS 关于外部 ID 的文档。
使用 Grafana Assume Role
- Grafana Cloud 客户需要提交支持工单以启用
awsDatasourcesTempCredentials
功能。此功能在开源 Grafana 和 Grafana Enterprise 中默认启用。 - 功能启用后,创建新的 CloudWatch 数据源(或更新现有数据源),并选择 Grafana Assume Role 作为身份验证提供商。
- 在 AWS 控制台中,创建新的 IAM 角色,并在 Trusted entity type 下,选择 Another AWS account 作为受信任的实体。
- 输入 Grafana 的账户 ID(显示在 CloudWatch 数据源配置的设置选项卡上的说明框中),并勾选要求外部 ID 框。
- 输入 Grafana 中 CloudWatch 数据源配置的设置选项卡上的说明框中指定的外部 ID。此外部 ID 对您的 Grafana 实例是唯一的。
- 附加您希望 Grafana 代表您访问所需的任何权限(例如,CloudWatch Logs 和 CloudWatch Metrics 策略)。
- 为角色命名并添加描述,然后单击创建角色。
- 复制您刚刚创建的角色 ARN,并将其粘贴到 Grafana 中 CloudWatch 数据源配置的设置选项卡上的 Assume Role ARN 字段中。
IAM 角色的信任关系示例
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": {
"AWS": {Grafana's AWS Account}
},
"Action": "sts:AssumeRole",
"Condition": {
"StringEquals": {
"sts:ExternalId": {External ID unique to your account}
}
}
}
]
}