如何通过Terraform实现跨账号CodeCommit仓库访问配置
跨账号CodeCommit作为PROD侧CodeBuild/CodePipeline代码源配置方案
核心认知纠正
配置跨账号CodeCommit源不需要为Terraform配置INT账号的访问凭证,跨账号拉取代码的权限由PROD侧CodeBuild/CodePipeline的执行角色通过IAM跨账号信任机制获取,和Terraform运行时使用的凭证无关,完全适配SSO生成的12小时有效期临时凭证场景,不需要使用长期Access Key。
具体配置步骤
1. 核对跨账号IAM权限
你已提前创建好所需策略与角色,只需确认两项配置符合要求:
- INT账号侧的跨账号访问角色信任策略,必须允许PROD账号下的CodeBuild/CodePipeline服务主体、以及PROD侧对应资源的执行角色代入
- INT账号侧CodeCommit仓库的资源策略,必须给上述跨账号角色授予
codecommit:GetRepository、codecommit:GitPull等代码拉取必需的权限
2. 调整CodeBuild的source配置块
你当前的配置缺少跨账号认证配置,且仓库地址未指定INT账号ID,默认会读取当前PROD账号下的同名仓库,需调整为如下格式:
source { type = "CODECOMMIT" # 替换占位符为实际的区域、INT账号ID、仓库名 location = "https://git-codecommit.<region>.amazonaws.com/v1/repos/<INT_ACCOUNT_ID>:example-repo" buildspec = data.local_file.buildspec_local.content # 跨账号访问必须补充该认证块 source_auth { type = "CODECONNECTIONS" # 替换为INT账号侧创建的跨账号访问角色的完整ARN resource = "arn:aws:iam::<INT_ACCOUNT_ID>:role/<cross_account_codecommit_role_name>" } }
3. CodePipeline场景配置差异
如果是在CodePipeline中配置INT账号的CodeCommit作为源,不需要使用上述source_auth格式,只需要在Source阶段的动作配置中完成两项设置:
- 填写INT账号下CodeCommit仓库的完整ARN:
arn:aws:codecommit:<region>:<INT_ACCOUNT_ID>:example-repo - 在动作的角色配置项中,填入INT账号侧允许跨账号访问的角色ARN即可
注意事项
- 所有Terraform资源仍然部署在PROD账号下,运行Terraform时仅需要PROD账号的SSO临时凭证,不需要额外配置INT账号的provider块
- 该方案为AWS原生支持的跨账号CodeCommit访问方式,全程走IAM角色临时凭证鉴权,不需要存储任何长期访问密钥
- 配置完成后可以先在PROD账号中手动触发一次CodeBuild构建,验证代码拉取逻辑是否正常,无需调整其他CI/CD流程配置
内容的提问来源于stack exchange,提问作者armin_somogyi
相关产品推荐
相关产品推荐

