You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

AWS CDK执行角色策略配置建议(非管理员权限场景)

解决方案:CI/CD流水线OIDC认证下的AWS CDK权限配置

核心逻辑说明

仅允许假设CDK自动创建的cdk-*角色是不够的——CDK执行过程中除了这些执行角色,还需要基础的资源操作权限(比如CloudFormation栈管理、S3资产存储访问、Bootstrap资源读取等)。

分步配置方案

1. 创建CI/CD专用的OIDC信任角色

这是流水线对接AWS的入口角色,信任策略需严格限定你的CI/CD提供商(如GitHub Actions、GitLab CI)的OIDC身份源。示例信任策略:

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Principal": {
        "Federated": "arn:aws:iam::ACCOUNT_ID:oidc-provider/OIDC_PROVIDER_URL"
      },
      "Action": "sts:AssumeRoleWithWebIdentity",
      "Condition": {
        "StringEquals": {
          "OIDC_PROVIDER_URL:sub": "YOUR_CI_PIPELINE_SUBJECT"
        }
      }
    }
  ]
}

2. 配置最小权限的自定义策略

拒绝使用AdministratorAccess,组合以下精准权限:

{
  "Version": "2012-10-17",
  "Statement": [
    // CloudFormation栈核心操作权限
    {
      "Effect": "Allow",
      "Action": [
        "cloudformation:CreateStack",
        "cloudformation:UpdateStack",
        "cloudformation:DeleteStack",
        "cloudformation:DescribeStacks",
        "cloudformation:CreateChangeSet",
        "cloudformation:ExecuteChangeSet",
        "cloudformation:DescribeChangeSet"
      ],
      "Resource": "arn:aws:cloudformation:*:ACCOUNT_ID:stack/*/*"
    },
    // CDK资产存储桶读写权限
    {
      "Effect": "Allow",
      "Action": [
        "s3:GetObject",
        "s3:PutObject",
        "s3:ListBucket"
      ],
      "Resource": [
        "arn:aws:s3:::cdktoolkit-stagingbucket-*",
        "arn:aws:s3:::cdktoolkit-stagingbucket-*/*"
      ]
    },
    // 允许假设所有cdk前缀角色(通过条件键绕过Principal通配符限制)
    {
      "Effect": "Allow",
      "Action": "sts:AssumeRole",
      "Resource": "arn:aws:iam::ACCOUNT_ID:role/*",
      "Condition": {
        "StringLike": {
          "aws:ResourceName": "cdk-*",
          "iam:ResourceTag/aws-cdk:bootstrap-role": "*"
        }
      }
    },
    // CDK Bootstrap资源读取权限
    {
      "Effect": "Allow",
      "Action": [
        "cloudformation:DescribeStacks",
        "cloudformation:GetTemplate"
      ],
      "Resource": "arn:aws:cloudformation:*:ACCOUNT_ID:stack/CDKToolkit/*"
    }
  ]
}

3. 解决cdk-*角色假设权限的通配符限制

AWS IAM的Principal确实不支持通配符,但可以通过条件键匹配实现需求:

  • 利用aws:ResourceName条件匹配角色名称前缀cdk-*
  • 配合CDK自动给执行角色添加的aws-cdk:bootstrap-role标签进一步精准筛选,避免误授权其他非CDK角色

4. 优化建议

  • 若明确CDK栈会创建的角色范围,可进一步缩小Resource字段的ARN范围,比如指定具体的角色前缀
  • 开启AWS CloudTrail监控权限使用记录,定期清理冗余权限
  • 在CI流水线中先执行cdk diff预览变更,再触发cdk deploy,减少不必要的权限调用

内容的提问来源于stack exchange,提问作者Wile E.

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.15 02:32:16