Terraform能否跨AWS账户获取其他账号内的资源数据?
Terraform 跨AWS账号查询data资源实现方案
完全可以实现该需求,核心思路是为目标账号单独配置专属的AWS Provider实例,绑定到需要跨账号查询的data资源上即可,具体操作步骤如下:
1. 声明目标账号的AWS Provider
你可以通过跨账号Assume Role的方式完成目标账号的身份认证(同组织下账号不需要单独配置访问密钥),声明带别名的Provider和当前环境的默认Provider做区分:
provider "aws" { alias = "target_sns_account" region = "cn-north-1" # 替换为SNS Topic实际所在的区域 # 配置跨账号角色 Assume 逻辑 assume_role { # 替换为目标账号下提前创建的、允许当前部署账号访问的角色ARN role_arn = "arn:aws-cn:iam::目标账号ID:role/terraform-cross-account-read-role" } }
注意:目标账号的上述角色需要提前完成两个配置:1. 信任策略中允许你当前运行Terraform的身份(用户/角色)执行AssumeRole操作;2. 角色权限策略中包含SNS Topic的查询权限,例如
sns:GetTopicAttributes。
2. 修改data资源绑定目标账号Provider
在你原有的data资源配置中新增provider参数,绑定上一步声明的带别名的目标账号Provider即可:
data "aws_sns_topic" "topic_alarms_data" { provider = aws.target_sns_account name = "topic_alarms" }
后续使用说明
配置完成后,该data资源的查询请求会直接发往目标AWS账号,你可以正常通过data.aws_sns_topic.topic_alarms_data.arn等属性引用查询到的资源信息,和同账号下的data资源使用逻辑完全一致。
内容的提问来源于stack exchange,提问作者Thanatos-Delta
相关产品推荐
相关产品推荐

