使用AWS CLI设置ECR仓库策略时触发InvalidParameterException错误
解决AWS ECR SetRepositoryPolicy的InvalidParameterException错误
执行aws ecr set-repository-policy --repository-name "${algorithm_name}" --policy-text policy.json时碰到InvalidParameterException,提示“PolicyText参数不符合约束:提供的仓库策略无效”,可以按以下步骤排查修复:
先检查JSON文件格式
JSON语法容不得半点差错:必须用双引号、括号配对、逗号不能多也不能少。直接用jq . policy.json命令在本地校验,有语法错误的话立刻修正——这是最容易踩的坑。确认策略内容符合ECR规则
ECR仓库策略有固定的结构要求:- 必须包含
Version字段,值固定为"2008-10-17"(沿用S3的策略版本) Statement数组里的每个条目,必须明确Effect(只能是Allow或Deny)、Principal(授权对象,比如AWS账号ID、IAM角色ARN)、Action(ECR支持的操作,比如ecr:GetDownloadUrlForLayer、ecr:BatchGetImage)、Resource(当前仓库的完整ARN,格式是arn:aws:ecr:区域:账号ID:repository/${algorithm_name})
给个合法的示例参考:
{ "Version": "2008-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::123456789012:user/your-user" }, "Action": [ "ecr:GetDownloadUrlForLayer", "ecr:BatchGetImage" ], "Resource": "arn:aws:ecr:us-east-1:123456789012:repository/${algorithm_name}" } ] }- 必须包含
修正命令的参数写法
很多人会忽略--policy-text的用法:如果要读取本地文件,必须加file://前缀。原来的命令里直接写policy.json,CLI会把这个字符串当成策略内容,自然是无效的JSON。正确的命令应该是:aws ecr set-repository-policy --repository-name "${algorithm_name}" --policy-text file://policy.json核对Principal和Resource的准确性
Principal里的账号或角色ARN不能写错,多一个少一个字符都会报错Resource必须精确匹配仓库的ARN,区域、账号ID、仓库名一个都不能错,别乱用通配符
内容的提问来源于stack exchange,提问作者Dnb Dinusha
相关产品推荐
相关产品推荐

