当前设置: python应用程序正在AWS集群中作为Docker容器运行。AWS密钥在kubernetes集群中作为机密提供,这样python代码就可以读取、初始化boto3会话并使用S3桶工作。
如何更改它:承担一个在AWS集群中运行Docker容器的服务帐户的角色,然后使用此凭据初始化boto3会话,并使用S3桶进行工作。我不想向每个服务提供AWS密钥,因为我有很多AWS密钥。
是否有任何方法实现所需的配置?
谢谢。
发布于 2020-07-16 03:37:49
简化的Kubernetes版本1.12 OIDC JSON web令牌,Amazon现在在每个集群中托管一个公共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/
步骤如下所述
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"
}
}
}
]
}请记住,您需要在这里提到名称空间,确保您有名称为SERVICE_ACCOUNT_NAMESPACE的名称空间。
中创建服务帐户
apiVersion: v1
kind: ServiceAccount
metadata:
name: SERVICE_ACCOUNT_NAME
annotations:
eks.amazonaws.com/role-arn: ARN_OF_ABOVE_IAM_ROLE使用serviceaccount运行
apiVersion: v1
kind: Pod
metadata:
name: my-pod
spec:
serviceAccountName: SERVICE_ACCOUNT_NAME
...如果一切都做好了,您将能够在您的k8s吊舱中承担这个角色。尝试在docker容器中运行任何python脚本,
import boto3
client = boto3.client('iam')
response = client.list_users()
for x in response['Users']:
print (x['UserName']) 如果允许IAM,这将列出AWS帐户中的用户。
参考资料:
https://stackoverflow.com/questions/62787974
复制相似问题