AWS ECR CF 模板失败并显示 'Invalid repository policy provided'
AWS ECR CF template fails with 'Invalid repository policy provided'
此 CF 模板失败:
MyECSrepo:
Type: "AWS::ECR::Repository"
Properties:
RepositoryName: !Ref RepoName
RepositoryPolicyText:
Version: "2012-10-17"
Statement:
- Sid: AllowAll
Effect: Allow
Principal:
AWS:
- arn:aws:iam::00000000000:group/admin
Action:
- "ecr:*"
堆栈创建产生此错误:
'PolicyText' 处的无效参数无法满足约束:'Invalid repository policy provided'
可能是什么问题?
阅读了有关 ECR Repository Policy 的文档后发现它仅限于 Principal 列表的用户和根帐户。因此,您可能需要换出列出您想要授予访问权限的所有用户。
Amazon documentation has some samples 有一些您可以使用它做什么的示例。
以防木偶公爵link 崩溃,这里有一个例子。我今天遇到了自动创建的 json 的问题。这似乎解决了它。
{
"Version": "2008-10-17",
"Statement": [
{
"Sid": "AllowPushPull",
"Effect": "Allow",
"Principal": {
"AWS": "arn:aws:iam::<<id number of root user here>>:user/<<some iam user>>"
},
"Action": [
"ecr:BatchCheckLayerAvailability",
"ecr:BatchGetImage",
"ecr:CompleteLayerUpload",
"ecr:GetDownloadUrlForLayer",
"ecr:InitiateLayerUpload",
"ecr:PutImage",
"ecr:UploadLayerPart"
]
}
]
}
一个合适的解决方案可能是使用 RoleArn
而不是组(什么不起作用)...and/or IAM 用户
ECR:
Type: AWS::ECR::Repository
Properties:
RepositoryPolicyText:
Version: "2012-10-17"
Statement:
-
Sid: AllowPushPull
Effect: Allow
Principal:
AWS:
- !Sub arn:aws:iam::${AWS::AccountId}:role/${MyPreparedRole}
Action:
- "ecr:GetDownloadUrlForLayer"
- "ecr:..."
可以在组内提供角色"MyPreparedRole"。
我们今天遇到了同样的问题,结果是政策文本中给出的 IAM 用户名是错误的。因此,堆栈进入了不可恢复的 deleted_failed 模式,我们不得不删除堆栈并重新创建它。
请注意,在 Principal:
widecard *
中似乎不起作用。我试过了:
Principal:
AWS:
- !Sub "arn:aws:iam::${AnotherAccountId}:user/*"
在我指定哪些用户之前遇到了同样的错误。
此 CF 模板失败:
MyECSrepo:
Type: "AWS::ECR::Repository"
Properties:
RepositoryName: !Ref RepoName
RepositoryPolicyText:
Version: "2012-10-17"
Statement:
- Sid: AllowAll
Effect: Allow
Principal:
AWS:
- arn:aws:iam::00000000000:group/admin
Action:
- "ecr:*"
堆栈创建产生此错误:
'PolicyText' 处的无效参数无法满足约束:'Invalid repository policy provided'
可能是什么问题?
阅读了有关 ECR Repository Policy 的文档后发现它仅限于 Principal 列表的用户和根帐户。因此,您可能需要换出列出您想要授予访问权限的所有用户。
Amazon documentation has some samples 有一些您可以使用它做什么的示例。
以防木偶公爵link 崩溃,这里有一个例子。我今天遇到了自动创建的 json 的问题。这似乎解决了它。
{
"Version": "2008-10-17",
"Statement": [
{
"Sid": "AllowPushPull",
"Effect": "Allow",
"Principal": {
"AWS": "arn:aws:iam::<<id number of root user here>>:user/<<some iam user>>"
},
"Action": [
"ecr:BatchCheckLayerAvailability",
"ecr:BatchGetImage",
"ecr:CompleteLayerUpload",
"ecr:GetDownloadUrlForLayer",
"ecr:InitiateLayerUpload",
"ecr:PutImage",
"ecr:UploadLayerPart"
]
}
]
}
一个合适的解决方案可能是使用 RoleArn
而不是组(什么不起作用)...and/or IAM 用户
ECR:
Type: AWS::ECR::Repository
Properties:
RepositoryPolicyText:
Version: "2012-10-17"
Statement:
-
Sid: AllowPushPull
Effect: Allow
Principal:
AWS:
- !Sub arn:aws:iam::${AWS::AccountId}:role/${MyPreparedRole}
Action:
- "ecr:GetDownloadUrlForLayer"
- "ecr:..."
可以在组内提供角色"MyPreparedRole"。
我们今天遇到了同样的问题,结果是政策文本中给出的 IAM 用户名是错误的。因此,堆栈进入了不可恢复的 deleted_failed 模式,我们不得不删除堆栈并重新创建它。
请注意,在 Principal:
widecard *
中似乎不起作用。我试过了:
Principal:
AWS:
- !Sub "arn:aws:iam::${AnotherAccountId}:user/*"
在我指定哪些用户之前遇到了同样的错误。