从AWS EKS中的服务帐户承担AWS角色

时间:2020-07-08 05:13:52

标签: python amazon-web-services boto3 amazon-eks

当前设置:python应用程序在AWS EKS集群中作为Docker容器运行。 AWS密钥作为kubernetes集群中的秘密提供,因此python代码可以读取,初始化boto3会话并与S3存储桶一起使用。

我要如何更改它:承担服务帐户的角色,在该帐户下Docker容器在AWS EKS集群中运行,然后使用此凭证初始化boto3会话并使用S3存储桶。我不想在每个服务中都提供AWS密钥,因为我有很多。

有什么方法可以实现所需的配置?

谢谢。

1 个答案:

答案 0 :(得分:0)

简化的Kubernetes版本1.12 OIDC JSON Web令牌,Amazon EKS现在每个集群托管一个公共OIDC发现终端节点,其中包含JSON Web令牌的签名密钥,因此外部系统(例如IAM)可以验证和接受Kubernetes发行的OIDC令牌。


有关此问题的AWS指南位于:https://kubernetes.io/docs/tasks/configure-pod-container/configure-service-account/

github上的AWS指南:https://github.com/aws/amazon-eks-pod-identity-webhook/


步骤在下面提到

  1. 获取OIDC提供程序URL:aws eks describe-cluster --name cluster_name --query "cluster.identity.oidc.issuer" --output text

  2. 使用联合身份创建角色并获取角色的ARN

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Principal": {
        "Federated": "arn:aws:iam::AWS_ACCOUNT_ID:oidc-provider/OIDC_PROVIDER"
      },
      "Action": "sts:AssumeRoleWithWebIdentity",
      "Condition": {
        "StringEquals": {
          "OIDC_PROVIDER:sub": "system:serviceaccount:SERVICE_ACCOUNT_NAMESPACE:SERVICE_ACCOUNT_NAME"
        }
      }
    }
  ]
}

请记住,您需要在此处提及NAMESPACE,确保您具有名称为SERVICE_ACCOUNT_NAMESPACE的命名空间。

  1. 在kubernetes中创建服务帐户
apiVersion: v1
kind: ServiceAccount
metadata:
  name: SERVICE_ACCOUNT_NAME
  annotations:
    eks.amazonaws.com/role-arn: ARN_OF_ABOVE_IAM_ROLE



  1. 使用serviceaccount运行pod
apiVersion: v1
kind: Pod
metadata:
  name: my-pod
spec:
  serviceAccountName: SERVICE_ACCOUNT_NAME
  ...

如果一切正确完成,您将可以在k8s吊舱中扮演角色

参考: