我有一个EKS集群的设置,我正在尝试访问我的AWS机密管理器中可用的一些机密,目前我已授予一个角色(AWS-IAM(访问所有所需机密的权限,我正在使用下面的k8s清单,我收到下面的错误。
---
apiVersion: v1
kind: ServiceAccount
metadata:
name: spark-pi
namespace: spark-pi
annotations:
eks.amazonaws.com/role-arn: arn:aws:iam::XXXXXXXXXXX:role/spark-secret-role
automountServiceAccountToken: true
---
apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:
name: spark-pi-role
namespace: spark-pi
rules:
- apiGroups: [""]
resources: ["pods", "services", "configmaps"]
verbs: ["get", "list", "watch", "create", "delete", "update", "patch"]
---
apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:
name: spark-pi-role-binding
namespace: spark-pi
subjects:
- kind: ServiceAccount
name: spark-pi
namespace: spark-pi
roleRef:
kind: Role
name: spark-pi-role
apiGroup: rbac.authorization.k8s.io
我能够成功提交Spark作业,但在检查POD日志时,我得到了以下错误。用户:arn:aws:sts::XXXXXXXXXXXXXXXX:假定角色/eks节点角色/i-0XXXXXXXXXXX未被授权执行:secretsmanager:GetSecretValue on resource:arn:aws:secretsmanger:us-west-2:XXXXXXXXXX:secret:dev/somesecret(服务:AWSSecretsManager;状态代码:400;错误代码:AccessDeniedException;
不确定为什么它假设EKS节点角色,当我将所需角色和权限附加到服务帐户时,我也已经创建了访问AWS机密的托管策略(附加到角色(。
RBAC本身只是用于kubernetes访问管理。你已经定义了一个附加了AWS角色的ServiceAccount,这很好。
你能分享角色role/spark-secret-role
附带的AWS政策吗?请与我们共享Pod清单,您需要将ServiceAccount附加到Pod本身。否则,Pod不会使用带有附加AWS角色的ServiceAccount。
您还需要在AWS中创建一个OIDC ID提供程序(IdP(。
整个过程称为IRSA(IAM服务帐户角色(您可以在这篇AWS博客文章中找到所有必要的信息:https://aws.amazon.com/de/blogs/opensource/introducing-fine-grained-iam-roles-service-accounts/