【问题标题】:AWS CDK How to include principals in IAM policy?AWS CDK 如何在 IAM 策略中包含委托人?
【发布时间】:2020-03-29 01:44:55
【问题描述】:

您好,我正在研究 AWS CDK。我正在尝试创建基于资源的策略。下面是我的云形成模板。

MWSECRRepository:
    Type: AWS::ECR::Repository
    Properties:
      RepositoryName: "location/location-service"
      RepositoryPolicyText:
        Version: "2012-10-17"
        Statement:
          - Sid: CurrentAccountPush
            Effect: Allow
            Principal:
              AWS:
                - 'arn:aws:iam::1234:root'  # dev
                - 'arn:aws:iam::1234:root'  # nonprod
                - 'arn:aws:iam::1234:root'  # prod
            Action:
              - 'ecr:GetDownloadUrlForLayer'
              - 'ecr:PutImage'
              - 'ecr:InitiateLayerUpload'
              - 'ecr:UploadLayerPart'
              - 'ecr:CompleteLayerUpload'

下面我正在尝试使用 CDK 创建相同的内容。

 ECRRepository = ecr.Repository(self, id = "ECR", repository_name = "location/location-service");
        ECRRepository.add_to_resource_policy(iam.PolicyStatement(
            effect=iam.Effect.ALLOW,
            actions=["ecr:GetDownloadUrlForLayer","ecr:PutImage","ecr:InitiateLayerUpload","ecr:UploadLayerPart","ecr:CompleteLayerUpload"],
            principals=["arn:aws:iam::123:root","arn:aws:iam::123:root","arn:aws:iam::123:root"]
        ));


        ECRRepository.add_to_resource_policy(iam.PolicyStatement(
            effect=iam.Effect.ALLOW,
            #principals=["arn:aws:iam::123:root","arn:aws:iam::123:root","arn:aws:iam::123:root"]
            actions=["ecr:GetDownloadUrlForLayer","ecr:BatchGetImage","ecr:BatchCheckLayerAvailability"]
        ));

        ECRRepository.add_lifecycle_rule(description="Image retention",  max_image_count=100, rule_priority=1);

这会导致以下错误

错误:预期的对象引用,得到“arn:aws:iam::123:root”

有人可以帮助我使用 python 编写正确的语法吗?任何帮助,将不胜感激。谢谢

【问题讨论】:

    标签: python amazon-web-services amazon-iam aws-cdk


    【解决方案1】:

    principals 需要是IPrincipal 的列表,而不是strings

    ECRRepository.add_to_resource_policy(iam.PolicyStatement(
                effect=iam.Effect.ALLOW,
                actions=["ecr:GetDownloadUrlForLayer","ecr:PutImage","ecr:InitiateLayerUpload","ecr:UploadLayerPart","ecr:CompleteLayerUpload"],
                principals=[iam.ArnPrincipal("aws:iam::1234:root")]
            ));
    

    【讨论】:

      猜你喜欢
      • 2021-11-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-06-22
      • 1970-01-01
      • 2020-12-16
      • 2021-10-16
      相关资源
      最近更新 更多