Kubernetes 服务账户和 AWS IAM 角色的 Secrets

时间:2021-01-05 07:22:44

标签: amazon-web-services apache-spark kubernetes amazon-iam amazon-eks

我设置了 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::XXXXXXXXXXXX:assumed-role/eks-node-role/i-0XXXXXXXXXXXX 无权执行:secretsmanager:GetSecretValue 资源:arn:aws:secretsmanager:us-west-2 :XXXXXXXXXX:secret:dev/somesecret(服务:AWSSecretsManager;状态代码:400;错误代码:AccessDeniedException;

不确定为什么要承担 EKS 节点角色,当我将所需角色和权限附加到服务帐户时,我也已经创建了托管策略(附加到角色)来访问 AWS 秘密。

1 个答案:

答案 0 :(得分:0)

RBAC 本身只是用于 kubernetes 访问管理。 您已经定义了一个附加了 AWS 角色的 ServiceAccount,这很好。

您能否分享附加到角色 role/spark-secret-role 的 AWS 策略?并且请与我们分享 Pod 清单,您需要将 ServiceAccount 附加到 Pod 本身。否则,Pod 不会将 ServiceAccount 与附加的 AWS 角色一起使用。

您还需要在 AWS 中创建 OIDC ID 提供商 (IdP)。

整个过程称为 IRSA(服务帐户的 IAM 角色) 您可以在这篇 AWS 博客文章中找到所有必要的信息:https://aws.amazon.com/de/blogs/opensource/introducing-fine-grained-iam-roles-service-accounts/