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/*"

在我指定哪些用户之前遇到了同样的错误。