我为Grafana创建了一个IAM(IRSA)角色,用于在EKS中运行以访问CloudWatch指标:
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "",
"Effect": "Allow",
"Principal": {
"Federated": "arn:aws:iam::xxxx:oidc-provider/oidc.eks.eu-west-1.amazonaws.com/id/xxxx"
},
"Action": "sts:AssumeRoleWithWebIdentity",
"Condition": {
"StringLike": {
"oidc.eks.eu-west-1.amazonaws.com/id/xxxx:sub": "system:serviceaccount:somenamespace:cloudwatch",
"oidc.eks.eu-west-1.amazonaws.com/id/xxxx:aud": "sts.amazonaws.com"
}
}
}
]
}
附带如下所述的策略(IAM策略部分):https://docs.aws.amazon.com/grafana/latest/userguide/adding--CloudWatch-manual.html
我也试过StringEquals与子只,但没有运气。
然后我在EKS中创建了一个serviceAccount
:
serviceAccount:
name: cloudwatch
annotations:
eks.amazonaws.com/role-arn: arn:aws:iam::xxxx:role/cloudwatch
Grafana部署使用设置为472的securityContext:
securityContext:
fsGroup: 472
runAsGroup: 472
runAsUser: 472
不幸的是,在Datasheet配置中,我得到了访问拒绝错误:
1. CloudWatch metrics query failed: AccessDenied: User: arn:aws:sts::xxxx:assumed-role/cloudwatch/1678127715473319080 is not authorized to perform: sts:AssumeRole on resource: arn:aws:iam::xxxx:role/cloudwatch status code: 403, request id: dc2af0f1-0fb8-4c50-9997-da6cebef02fd 2. CloudWatch logs query failed: AccessDenied: User: arn:aws:sts::xxxx:assumed-role/cloudwatch/1678127715473319080 is not authorized to perform: sts:AssumeRole on resource: arn:aws:iam::xxxx:role/cloudwatch status code: 403, request id: 2391d405-024d-43ab-a2f9-1db72835a472
1条答案
按热度按时间iugsix8n1#
我不确定您是如何在Grafana中配置Cloudwatch插件的,所以我将从我的用例中分享。
后台
查看以下Grafana文档:
1.配置AWS身份验证
我像你一样创建了角色(参考#1),然后将此设置(使用AWS SDK默认值和IAM角色的ARN)从参考#2添加到Grafana图表中:
然后我得到了
is not authorized to perform: sts:AssumeRole
错误。怎么解决?
删除
assumeRoleArn
行,让Grafana代码在默认的AWS凭据链上计数。更深入
从这里:
AWS SDK for Go需要凭据(访问密钥和秘密访问密钥)来签署对AWS的请求。您可以在多个不同的位置指定凭据,具体取决于您的特定用例。有关获取凭据的信息,请参阅设置。
当您初始化新的服务客户端而不提供任何凭据参数时,SDK使用默认凭据提供程序链来查找AWS凭据。
SDK使用链中第一个返回凭据且没有错误的提供程序。默认提供程序链按以下顺序查找凭据:
1.环境变量。
1.共享凭据文件。
1.如果应用程序使用ECS任务定义或RunTask API操作,则任务的IAM角色。
1.如果您的应用程序正在Amazon EC2示例上运行,则Amazon EC2的IAM角色。
在我们的例子中,我们使用EKS和IRSA设置,它相当于(3)。
更多参考: