当前设置:python应用程序在AWS EKS集群中作为Docker容器运行。 AWS密钥作为kubernetes集群中的秘密提供,因此python代码可以读取,初始化boto3会话并与S3存储桶一起使用。
我要如何更改它:承担服务帐户的角色,在该帐户下Docker容器在AWS EKS集群中运行,然后使用此凭证初始化boto3会话并使用S3存储桶。我不想在每个服务中都提供AWS密钥,因为我有很多。
有什么方法可以实现所需的配置?
谢谢。
答案 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/
步骤在下面提到
获取OIDC提供程序URL:aws eks describe-cluster --name cluster_name --query "cluster.identity.oidc.issuer" --output text
使用联合身份创建角色并获取角色的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的命名空间。
apiVersion: v1
kind: ServiceAccount
metadata:
name: SERVICE_ACCOUNT_NAME
annotations:
eks.amazonaws.com/role-arn: ARN_OF_ABOVE_IAM_ROLE
apiVersion: v1
kind: Pod
metadata:
name: my-pod
spec:
serviceAccountName: SERVICE_ACCOUNT_NAME
...
如果一切正确完成,您将可以在k8s吊舱中扮演角色
参考: