如何在无NAT网关的情况下跨账户访问CodeCommit
跨AWS账户通过VPC终端节点访问CodeCommit的解决方案
核心配置检查与修复步骤
1. 确认VPC终端节点配置正确性
- 确保创建的是CodeCommit专属Interface类型VPC终端节点,服务名称格式为
com.amazonaws.<你的区域>.codecommit - 终端节点安全组规则:允许EC2实例所在安全组的出站HTTPS(443)流量,同时终端节点安全组允许入站443流量来自EC2的安全组
- 子网路由表需添加路由:目标为CodeCommit的服务前缀(可在AWS控制台终端节点详情中查看),下一跳指向该VPC终端节点
2. 配置跨账户权限
在prod账户(CodeCommit所属账户)的仓库权限中添加dev账户角色授权
将以下策略附加到prod账户的CodeCommit仓库权限(替换占位符为实际信息):
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::<dev账户ID>:role/<EC2实例使用的IAM角色名>" }, "Action": ["codecommit:GitPull", "codecommit:GitPush"], "Resource": "arn:aws:codecommit::<prod账户ID>:<仓库名称>", "Condition": { "StringEquals": { "codecommit:References": ["refs/heads/dev"] } } } ] }
在dev账户的EC2 IAM角色中添加访问权限
给EC2使用的IAM角色附加以下权限策略:
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": ["codecommit:GitPull", "codecommit:GitPush"], "Resource": "arn:aws:codecommit::<prod账户ID>:<仓库名称>" } ] }
3. 配置EC2实例的CodeCommit访问
- 在EC2实例上配置AWS CLI使用实例元数据获取凭证:
aws configure set region <你的AWS区域> aws configure set credential_source Ec2InstanceMetadata - 测试克隆dev分支(替换区域和仓库名):
git clone -b dev https://git-codecommit.<区域>.amazonaws.com/v1/repos/<仓库名称>
4. 排查DNS解析问题
- 确认VPC的
enableDnsSupport和enableDnsHostnames参数均设为true - 在EC2实例上执行解析测试,应返回VPC终端节点的私有IP:
nslookup git-codecommit.<区域>.amazonaws.com
5. 验证VPC终端节点的访问策略
确保终端节点的访问策略允许dev账户的EC2角色访问:
{ "Version": "2008-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::<dev账户ID>:role/<EC2实例使用的IAM角色名>" }, "Action": "*", "Resource": "*" } ] }
内容的提问来源于stack exchange,提问作者Nitin G
相关产品推荐
相关产品推荐

