Terraform - 仅当 IAM 策略存在时才添加资源 arn
Terraform - Add arn of resource only if it exists to IAM policy
我的管道将 运行 跨多个不同的 AWS 账户。有些账户拥有所需的所有 S3 存储桶,而有些账户缺少一些存储桶。
我需要我的 IAM 策略包含所有 S3 存储桶的 ARN(如果存在)。如果帐户有一些不存在的 s3 存储桶,则应从策略中省略这些 ARN。大致如下:
#Check if S3 bucket 1 exists
data "aws_s3_bucket" "1" {
count = "${var.bucket1_exist == "true" ? 1 : 0 }"
bucket = "bucket1"
}
.
.
.
.
#Check if S3 bucket N exists
data "aws_s3_bucket" "N" {
count = "${var.bucketN_exist == "true" ? 1 : 0 }"
bucket = "bucketN"
}
#Dynamic IAM policy
data "aws_iam_policy_document" "conditional" {
statement {
sid = "1"
actions = [
"s3:ListAllMyBuckets",
"s3:GetBucketLocation",
]
resources = [
"data.aws_s3_bucket.1.arn",
.
.
"data.aws_s3_bucket.N.arn",
}
}
有什么方法可以动态设置这个 IAM 策略吗?我知道 Terraform 需要显式声明现有资源,但是有没有办法用类似的代码解决动态环境问题?
您不能使用纯 TF 执行此操作,因为 TF 没有功能 来检查是否存在某些内容。对于这样的功能,您可能必须开发一个 external resource in TF for that. You could also do same with aws_lambda_invocation.
无论您选择什么,最终都取决于您实施逻辑 以检查是否存在某物。
我的管道将 运行 跨多个不同的 AWS 账户。有些账户拥有所需的所有 S3 存储桶,而有些账户缺少一些存储桶。
我需要我的 IAM 策略包含所有 S3 存储桶的 ARN(如果存在)。如果帐户有一些不存在的 s3 存储桶,则应从策略中省略这些 ARN。大致如下:
#Check if S3 bucket 1 exists
data "aws_s3_bucket" "1" {
count = "${var.bucket1_exist == "true" ? 1 : 0 }"
bucket = "bucket1"
}
.
.
.
.
#Check if S3 bucket N exists
data "aws_s3_bucket" "N" {
count = "${var.bucketN_exist == "true" ? 1 : 0 }"
bucket = "bucketN"
}
#Dynamic IAM policy
data "aws_iam_policy_document" "conditional" {
statement {
sid = "1"
actions = [
"s3:ListAllMyBuckets",
"s3:GetBucketLocation",
]
resources = [
"data.aws_s3_bucket.1.arn",
.
.
"data.aws_s3_bucket.N.arn",
}
}
有什么方法可以动态设置这个 IAM 策略吗?我知道 Terraform 需要显式声明现有资源,但是有没有办法用类似的代码解决动态环境问题?
您不能使用纯 TF 执行此操作,因为 TF 没有功能 来检查是否存在某些内容。对于这样的功能,您可能必须开发一个 external resource in TF for that. You could also do same with aws_lambda_invocation.
无论您选择什么,最终都取决于您实施逻辑 以检查是否存在某物。