如何为AWS CDK Pipeline跨账号执行角色添加共享资源访问权限
方案整体思路
你需要在Shared账号中创建独立的CDK权限栈,统一配置Dev、Production账号的cfn-exec-role对Shared账号下资源的访问策略,全流程通过代码实现,完全符合基础设施即代码规范。
具体操作步骤
- 步骤1:定义账号基础常量
提前在代码中定义三个账号的ID、区域、CDK引导前缀等固定参数,示例(CDK TypeScript版本,其他语言逻辑一致):
// 替换为实际的账号ID const SHARED_ACCOUNT_ID = '123456789012'; const DEV_ACCOUNT_ID = '123456789013'; const PROD_ACCOUNT_ID = '123456789014'; const DEFAULT_REGION = 'us-east-1'; // CDK默认引导前缀,自定义过前缀请替换为实际值 const CDK_BOOTSTRAP_PREFIX = 'hnb659fds';
- 步骤2:导入Dev/Prod账号的执行角色作为授权主体
CDK跨账号引导生成的cfn-exec-roleARN格式固定,可直接构造ARN并导入为IAM主体:
// 构造两个环境cfn-exec-role的ARN const devCfnExecRoleArn = `arn:aws:iam::${DEV_ACCOUNT_ID}:role/cdk-${CDK_BOOTSTRAP_PREFIX}-cfn-exec-role-${DEV_ACCOUNT_ID}-${DEFAULT_REGION}`; const prodCfnExecRoleArn = `arn:aws:iam::${PROD_ACCOUNT_ID}:role/cdk-${CDK_BOOTSTRAP_PREFIX}-cfn-exec-role-${PROD_ACCOUNT_ID}-${DEFAULT_REGION}`; // 转换为IAM可识别的授权主体 const devExecPrincipal = new iam.ArnPrincipal(devCfnExecRoleArn); const prodExecPrincipal = new iam.ArnPrincipal(prodCfnExecRoleArn);
- 步骤3:为主体绑定对应资源的访问权限
按照业务需要给两个账号的执行角色配置共享资源权限,以下为不同资源的配置示例:
- Route53托管区权限配置
// 导入Shared账号下已有的域名托管区 const domainHostedZone = route53.HostedZone.fromHostedZoneAttributes(this, 'MainDomainZone', { hostedZoneId: '实际托管区ID', zoneName: 'domainname.com' }); // 授予修改DNS记录的权限 domainHostedZone.grant(devExecPrincipal, 'route53:ChangeResourceRecordSets'); domainHostedZone.grant(prodExecPrincipal, 'route53:ChangeResourceRecordSets');
- S3存储桶权限配置
// 导入Shared账号下的共享存储桶 const sharedBucket = s3.Bucket.fromBucketName(this, 'SharedDataBucket', '实际桶名称'); // 授予读权限,需要写权限可替换为grantReadWrite sharedBucket.grantRead(devExecPrincipal); sharedBucket.grantRead(prodExecPrincipal);
- ACM证书权限配置
// 导入Shared账号下的证书,注意跨区域证书要对应实际所在区域的ARN const sharedCert = acm.Certificate.fromCertificateArn(this, 'SharedWildcardCert', '实际证书ARN'); // 授予证书查询、关联权限 sharedCert.grant(devExecPrincipal, 'acm:DescribeCertificate', 'acm:ListCertificates', 'acm:AssociateCertificate'); sharedCert.grant(prodExecPrincipal, 'acm:DescribeCertificate', 'acm:ListCertificates', 'acm:AssociateCertificate');
- 步骤4:调整部署顺序
优先部署Shared账号下的权限栈,确保权限配置生效后再部署Dev、Production环境的业务栈,避免权限不生效导致部署报错。
注意事项
- 权限配置遵循最小权限原则,仅授予业务必需的操作权限,避免过度授权带来的安全风险
- 如果使用自定义CDK引导前缀,需要将代码中的默认前缀
hnb659fds替换为实际的自定义前缀 - 跨区域访问资源时(比如CloudFront关联的ACM证书必须存放在us-east-1区域),注意构造ARN时的区域参数要和资源实际所在区域保持一致
内容的提问来源于stack exchange,提问作者pfried
相关产品推荐
相关产品推荐

