如何在Terraform中将资源引用与字符串进行插值拼接?
解决Terraform中S3桶IAM策略资源路径的正确拼接问题
你的写法错误在于未正确引用S3桶的ARN属性——Terraform将aws_s3_bucket.test_bucket.arn当作纯文本字符串输出,而非解析为资源的实际ARN值。
要生成正确的拼接字符串,需要使用Terraform的插值语法引用S3桶的arn属性,修改后的IAM策略资源声明如下:
resources = ["${aws_s3_bucket.test_bucket.arn}/AWSLogs/${var.account_id}/*"]
原理说明
${aws_s3_bucket.test_bucket.arn}会被Terraform解析为该S3桶的实际ARN(例如arn:aws:s3:::my-test-bucket)- 插值后的字符串会自动拼接后续路径,最终生成你需要的格式:
arn:aws:s3:::my-test-bucket/AWSLogs/123456789101/*
这种方式比手动构造ARN更可靠,因为资源的arn属性会自动遵循AWS的ARN规范,避免手动拼接出错。
内容的提问来源于stack exchange,提问作者David
相关产品推荐
相关产品推荐

