Terraform AWS IAM Policy数据源如何通过名称前缀查询匹配策略ARN
解决方案
原生aws_iam_policy数据源确实不支持模糊匹配,你可以通过以下两种方式实现前缀匹配获取目标策略ARN:
方案一:使用官方原生aws_iam_policies数据源(推荐)
AWS Provider提供的aws_iam_policies数据源天然支持name_prefix参数,可以直接按名称前缀过滤策略,适配所有Terraform 0.13+版本,无额外依赖:
# 按前缀过滤所有匹配的IAM策略 data "aws_iam_policies" "datadog_integration_policy" { name_prefix = "DataDogIntegration-DatadogAWSIntegrationPolicy-" # 可选:添加路径前缀、标签过滤进一步缩小匹配范围,避免误匹配 # path_prefix = "/" # tags_filter = { # Vendor = "Datadog" # } } # 如需获取策略完整属性,可结合aws_iam_policy数据源使用 data "aws_iam_policy" "datadog_integration_policy" { arn = one(data.aws_iam_policies.datadog_integration_policy.arns) }
- 说明:
one()是Terraform 0.15+内置函数,用于从仅含单个元素的列表中返回该元素,低版本Terraform可替换为data.aws_iam_policies.datadog_integration_policy.arns[0],前提是你确认每个环境仅存在一个符合该前缀的策略。
方案二:使用external数据源调用AWS CLI查询(兼容性差,仅作备选)
如果你的AWS Provider版本过低不支持aws_iam_policies数据源,可通过调用AWS CLI实现查询,该方案需要执行环境预安装AWS CLI、jq、bash:
data "external" "datadog_policy_arn" { program = ["bash", "-c", <<EOT aws iam list-policies --query 'Policies[?starts_with(PolicyName, `DataDogIntegration-DatadogAWSIntegrationPolicy-`)].Arn' | jq -r '{arn: .[0]}' EOT ] } # 调用方式:data.external.datadog_policy_arn.result.arn
内容的提问来源于stack exchange,提问作者Cyber Axe
相关产品推荐
相关产品推荐

