ECR访问控制政策问题:需限制仅特定VPC终端节点可访问
ECR访问控制政策问题:拒绝非指定VPC终端节点的访问
需求
需要编写ECR访问控制政策,拒绝所有非特定VPC终端节点发起的ECR访问请求。
现有ECR政策(用户编写)
{ "Version": "2008-10-17", "Statement": [ { "Sid": "Statement1", "Effect": "Deny", "Principal": "*", "Action": [ "ecr:BatchCheckLayerAvailability", "ecr:BatchGetImage", "ecr:CompleteLayerUpload", "ecr:GetDownloadUrlForLayer", "ecr:InitiateLayerUpload", "ecr:ListImage", "ecr:PutImage", "ecr:UploadLayerPart" ], "Condition": { "StringNotEquals": { "aws:SourceVpce": "vpce-XXXXXXX" } } } ] }
问题现象
本地电脑和连接指定VPC终端节点的EC2实例都能列出ECR镜像,政策未达到预期效果。
对比:正常生效的S3存储桶政策
{ "Version": "2012-10-17", "Id": "VPCe", "Statement": [ { "Sid": "VPCe", "Effect": "Deny", "Principal": "*", "Action": "s3:ListBucket", "Resource": [ "arn:aws:s3:::XXXXXX", "arn:aws:s3:::XXXXXXX/*" ], "Condition": { "StringNotEquals": { "aws:SourceVpce": "vpce-XXXXXXXXXXX" } } } ] }
问题分析与修正方案
现有ECR政策的问题点
- 缺少Resource字段:ECR仓库政策必须明确指定目标仓库的ARN,否则政策无法绑定到具体仓库,不会生效。
- Action名称错误:
ecr:ListImage是无效操作,正确的镜像列表操作是ecr:ListImages。 - 使用旧版本政策语法:
2008-10-17版本的政策语法功能有限,建议使用2012-10-17版本。 - 缺失关键列表操作:仅限制
ecr:ListImages不足以完全阻止镜像列表访问,还需包含ecr:DescribeImages、ecr:DescribeRepositories等操作。
修正后的ECR政策
{ "Version": "2012-10-17", "Statement": [ { "Sid": "DenyAccessExceptFromSpecificVPCE", "Effect": "Deny", "Principal": "*", "Action": [ "ecr:BatchCheckLayerAvailability", "ecr:BatchGetImage", "ecr:CompleteLayerUpload", "ecr:GetDownloadUrlForLayer", "ecr:InitiateLayerUpload", "ecr:ListImages", "ecr:PutImage", "ecr:UploadLayerPart", "ecr:DescribeImages", "ecr:DescribeRepositories" ], "Resource": "arn:aws:ecr:你的区域:你的账号ID:repository/你的仓库名", "Condition": { "StringNotEquals": { "aws:SourceVpce": "vpce-XXXXXXX" } } } ] }
额外说明
- 若要限制账号下所有ECR仓库,可将Resource设为
arn:aws:ecr:你的区域:你的账号ID:repository/*。 - 确保已创建ECR类型的VPC终端节点(包含
com.amazonaws.<区域>.ecr.api和com.amazonaws.<区域>.ecr.dkr),且终端节点的路由表、安全组配置正确。 - 政策中的Deny规则会覆盖所有Allow权限,需确认合法访问路径(如指定VPC终端节点内的实例)不受影响。
内容的提问来源于stack exchange,提问作者bone2
相关产品推荐
相关产品推荐

