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.
相关产品推荐
相关产品推荐

