如何配置策略允许跨账号EKS集群从ECR仓库拉取镜像
问题根因
当前配置失效的核心原因是AWS跨账号访问的双向权限要求没有满足,加上临时会话身份的匹配规则问题:
- 仅配置了ECR侧的仓库访问权限,未给EKS节点实例角色配置访问跨账号ECR的权限
- EKS节点实际使用STS临时身份(
assumed-role格式)发起请求,原有策略未覆盖所有该角色的临时会话场景
正确配置步骤
1. 给EKS所属账号的节点实例角色添加访问权限
AWS跨账号访问要求访问方和资源方同时授权,首先在EKS所在账号(账号ID:02182452XXXX)找到节点使用的实例角色,添加如下权限策略:
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "ecr:BatchCheckLayerAvailability", "ecr:BatchGetImage", "ecr:DescribeImages", "ecr:DescribeRepositories", "ecr:GetDownloadUrlForLayer" ], "Resource": "arn:aws:ecr:us-east-2:226427918358:repository/external-pull-test" } ] }
你场景中的节点实例角色ARN为:arn:aws:iam::02182452XXXX:role/aws-dev-eks-cluster-crpiXXXX091410594876160000000c
2. 调整目标ECR账号的仓库权限策略
修改ECR侧的仓库策略,增加条件匹配所有该角色的STS临时会话,覆盖集群所有节点的访问场景:
{ "Version": "2008-10-17", "Statement": [ { "Sid": "AllowPull", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::02182452XXXX:role/aws-dev-eks-cluster-crpiXXXX091410594876160000000c" }, "Action": [ "ecr:BatchCheckLayerAvailability", "ecr:BatchGetImage", "ecr:DescribeImages", "ecr:DescribeRepositories", "ecr:GetDownloadUrlForLayer" ], "Condition": { "ArnLike": { "aws:PrincipalArn": "arn:aws:sts::02182452XXXX:assumed-role/aws-dev-eks-cluster-crpiXXXX091410594876160000000c/*" } } } ] }
验证
配置完成后等待2分钟左右权限全局生效,删除报错的Pod重建即可正常拉取镜像。
内容的提问来源于stack exchange,提问作者Ash
相关产品推荐
相关产品推荐

