【问题标题】:Terraform - Add arn of resource only if it exists to IAM policyTerraform - 仅在 IAM 策略中存在资源时才添加资源
【发布时间】:2021-08-28 14:10:51
【问题描述】:

我的管道将跨多个不同的 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 导入来确认这些资源

标签: amazon-web-services amazon-s3 terraform amazon-iam


【解决方案1】:

你不能用普通的 TF 来做到这一点,因为 TF 没有功能来检查某些东西是否存在。对于这样的功能,您可能必须在 TF 中为此开发一个external resource。你也可以对aws_lambda_invocation 做同样的事情。

无论您选择什么,最终都取决于您实现逻辑以检查某物是否存在。

【讨论】:

    猜你喜欢
    • 2020-09-04
    • 2020-06-30
    • 2021-10-23
    • 1970-01-01
    • 2021-12-08
    • 1970-01-01
    • 2021-04-06
    • 2018-11-02
    • 2023-01-12
    相关资源
    最近更新 更多