如何使用AWS CLI为ECR镜像仓库权限添加账户ID且无需重写完整JSON
ECR仓库权限跨账户追加便捷方案
完全不需要重写全量权限配置,可通过以下两种方式实现增量更新:
方式1:直接追加账户到原有权限组(推荐)
仅需一行命令组合,自动拉取现有策略、追加新账户、提交更新,全程无需手动编辑全量JSON:
- 先定义需要用到的参数变量,替换为实际值即可
# 新增的账户ID NEW_ACCOUNT_ID="555" # ECR仓库名称 ECR_REPO_NAME="your-repo-name" # 仓库所在区域 AWS_REGION="cn-north-1"
- 执行增量更新命令
aws ecr get-repository-policy --repository-name $ECR_REPO_NAME --region $AWS_REGION --query 'policyText' --output text | \ jq --arg new_arn "arn:aws:iam::${NEW_ACCOUNT_ID}:root" '.Statement[] |= if .Sid == "AllowCrossAccountPull" then .Principal.AWS += [$new_arn] else . end' | \ xargs -0 aws ecr set-repository-policy --repository-name $ECR_REPO_NAME --region $AWS_REGION --policy-text
该命令会自动定位Sid为AllowCrossAccountPull的权限语句,往授权账户列表中追加新账户,不会修改其他权限配置。
方式2:新增独立权限语句
如果不想修改原有权限组,也可以单独新增一条权限语句,实现相同授权效果:
- 新建单条权限配置文件
new_statement.json,内容如下:
{ "Sid": "AllowCrossAccountPull_New", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::555:root" }, "Action": [ "ecr:BatchCheckLayerAvailability", "ecr:BatchGetImage", "ecr:DescribeImageScanFindings", "ecr:DescribeImages", "ecr:DescribeRepositories", "ecr:GetAuthorizationToken", "ecr:GetDownloadUrlForLayer", "ecr:GetLifecyclePolicy", "ecr:GetLifecyclePolicyPreview", "ecr:GetRepositoryPolicy", "ecr:ListImages", "ecr:ListTagsForResource" ] }
- 执行追加命令
aws ecr set-repository-policy --repository-name $ECR_REPO_NAME --region $AWS_REGION \ --add-statements file://new_statement.json
校验验证
操作前可在set-repository-policy命令末尾添加--dry-run参数,验证配置正确性不会实际生效;操作完成后可执行aws ecr get-repository-policy --repository-name $ECR_REPO_NAME --region $AWS_REGION确认最终配置。
内容的提问来源于stack exchange,提问作者sebastian
相关产品推荐
相关产品推荐

