AWS CDK 一直要求我更新 IAM 角色,即使我已经设置了权限

AWS CDK is keeping ask me to update the IAM role even if I have already setup the permissions

我正在使用 CDK 部署我的 Web 服务,Docker 映像已推送到 ECR 然后我使用 CDK 通过 Fargate 任务将应用程序部署到 ECS

但是当我部署 CDK 脚本时,它一直要求我允许它更新我的 IAM 角色

IAM 声明更改

我认为允许 CI runner 有更新 IAM 资源的权限不是个好主意 所以我手动更新它。但是CDK还是要我允许。

这是否意味着我无法避免 CDK 更新我的 IAM 角色?

我尝试追溯源码,但对TS不熟悉
https://github.com/aws/aws-cdk/blob/0f0e2055cab08551bc6e5dfb8a1b6219368263c5/packages/%40aws-cdk/aws-ecr/lib/repository.ts#L361

2019/12/31更新

咨询AWS社区后,我得到了另一种解决方案。
如果您不想让 CI 服务器请求更新您的 IAM 政策,
你应该使用 aws_ecs.ContainerImage.from_registry()
而不是 aws_ecs.ContainerImage.from_ecr_repository()

CDK 仍然要求您更新 IAM 角色,因为 CDK 在幕后创建了一个 cloudformation 模板。此 cloudformation 模板需要权限才能创建您的 CDK 堆栈,在您的案例中为 ECR。 CDK 标记涉及 IAM 的更改,并在继续之前要求您确认。因此,这是 CDK 创建堆栈所需的最小权限。

所以,不,这意味着您无法避免 CDK 更新您的 IAM 角色。

要向此 IAM 角色添加策略,请使用 .addToPolicy

These policies will be created with the role, whereas those added by addToPolicy are added using a separate CloudFormation resource (allowing a way around circular dependencies that could otherwise be introduced).

Example usage:

role.addToPolicy(new iam.PolicyStatement({
  effect: iam.Effect.DENY,
  resources: [bucket.bucketArn, otherRole.roleArn],
  actions: ['ec2:SomeAction', 's3:AnotherAction'],
  conditions: {StringEquals: {
    'ec2:AuthorizedService': 'codebuild.amazonaws.com',
}}}));