如何让VPC内的AWS Glue作业跨账户访问AWS CodeArtifact?
解决方案:跨账户VPC端点访问CodeArtifact(Glue VPC内作业场景)
前提条件
- 已通过AWS Organizations配置跨账户CodeArtifact访问权限(A账户的IAM实体可访问共享服务账户的CodeArtifact仓库)
- A账户的Glue作业已配置VPC运行基础权限(具备EC2网络接口相关IAM权限)
步骤1:在共享服务账户中配置CodeArtifact VPC端点服务
创建CodeArtifact接口VPC端点
- 进入共享服务账户的VPC控制台,创建接口VPC端点,选择服务名称为
com.amazonaws.<region>.codeartifact.api和com.amazonaws.<region>.codeartifact.repositories(替换<region>为实际AWS区域) - 选择适配的VPC和子网,配置安全组允许443端口入站(后续通过VPC端点服务控制访问范围)
- 启用私有DNS名称,确保可使用默认CodeArtifact域名访问
- 进入共享服务账户的VPC控制台,创建接口VPC端点,选择服务名称为
创建VPC端点服务(基于Network Load Balancer)
- 创建Network Load Balancer(NLB),选择与上述CodeArtifact VPC端点同VPC的子网
- 为NLB创建目标组,目标类型选
网络接口,添加CodeArtifact VPC端点的弹性网络接口(ENI)作为目标,端口设为443 - 创建VPC端点服务并关联该NLB
- 在VPC端点服务的允许的主体中添加A账户ARN(格式:
arn:aws:iam::<a-account-id>:root)或A账户所在OU/组织的ARN,授权A账户发起连接
步骤2:在A账户中配置VPC端点连接共享服务
创建接口VPC端点
- 进入A账户的VPC控制台,创建接口VPC端点,选择
其他终端节点服务,输入共享服务账户VPC端点服务的完整名称(格式:com.amazonaws.vpce.<region>.vpce-svc-<service-id>) - 选择Glue作业运行的VPC和子网,配置安全组:允许Glue作业使用的安全组访问443端口
- 启用私有DNS名称,确保Glue作业可通过默认CodeArtifact域名访问
- 进入A账户的VPC控制台,创建接口VPC端点,选择
配置VPC端点策略(可选)
- 为A账户的VPC端点添加策略,限制仅Glue作业的IAM角色可访问,示例策略:
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::<a-account-id>:role/<glue-job-role-name>" }, "Action": "*", "Resource": "*" } ] }
- 为A账户的VPC端点添加策略,限制仅Glue作业的IAM角色可访问,示例策略:
步骤3:配置Glue作业和验证
调整Glue作业VPC设置
- 编辑Glue作业,选择运行的VPC、子网(需包含上述VPC端点的子网)和安全组(需允许访问VPC端点的443端口)
- 确保Glue作业的IAM角色已具备访问共享服务账户CodeArtifact的权限(如
codeartifact:GetAuthorizationToken、codeartifact:ReadFromRepository等,资源指定共享服务账户的CodeArtifact仓库ARN)
验证配置
- 在A账户VPC内启动同子网/安全组的EC2实例,测试通过
pip install拉取共享服务账户的CodeArtifact包,确认VPC端点生效 - 运行Glue作业,验证是否可正常访问CodeArtifact拉取私有包
- 在A账户VPC内启动同子网/安全组的EC2实例,测试通过
关键注意事项
- 确保共享服务账户和A账户的VPC都启用DNS支持(
enableDnsHostnames和enableDnsSupport设为true),否则私有DNS无法正常解析 - VPC端点服务的NLB必须与CodeArtifact VPC端点在同一VPC,确保流量内部转发
- 跨账户权限需同时满足:共享服务账户的CodeArtifact资源策略允许A账户访问,A账户的VPC端点策略允许Glue角色访问,VPC端点服务的允许主体包含A账户
内容的提问来源于stack exchange,提问作者teejay
相关产品推荐
相关产品推荐

