如何使用 Terraform 将资源动态附加到内联策略?

Posted

技术标签:

【中文标题】如何使用 Terraform 将资源动态附加到内联策略?【英文标题】:How to dynamically attach a resource to an inline policy using Terraform? 【发布时间】:2021-02-17 17:11:56 【问题描述】:

我正在创建一个内联策略并且我想动态附加一个资源。

这是我的政策:

resource "aws_iam_policy" "lambda_secret_policy" 
  name = "$var.name-lambda-role"
  description = "grants lambda access to secret manager"
  
  assume_role_policy = <<EOF

    "Version": "2012-10-17",
    "Statement": [
        
            "Effect": "Allow",
            "Action": [
                "secretsmanager:GetSecretValue",
            ],
            "Resource": [
                <where I would like to dynamically assign the exampleSecretResource resource>
            ]
        
    ]

EOF

这是我想动态附加的资源:

data "aws_secretsmanager_secret" "exampleSecretResource" 
  arn = var.secretArn

因此,我使用data 块获得了exampleSecretResource,并希望将其附加到上述策略中的资源列表中。这可能是内联的还是我需要使用资源块显式构建策略?

如果我可以动态附加,内联,我会怎么做? (我在这里使用正确的术语吗?)

【问题讨论】:

什么是exampleSecretResource?一个角色,一个托管策略?你能举出它的例子吗? 添加了 data 块来解释。 【参考方案1】:

如果我理解正确,以下应该可以满足您的要求:

data "aws_secretsmanager_secret" "exampleSecretResource" 
  arn = var.secretArn


resource "aws_iam_policy" "lambda_secret_policy" 
  name = "$var.name-lambda-role"
  description = "grants lambda access to secret manager"
  
  assume_role_policy = <<EOF

    "Version": "2012-10-17",
    "Statement": [
        
            "Effect": "Allow",
            "Action": [
                "secretsmanager:GetSecretValue",
            ],
            "Resource": [ 
              "$data.aws_secretsmanager_secret.exampleSecretResource.arn"
            ]
        
    ]

EOF

显然,aws_iam_policy.lambda_secret_policy 必须附加到实际的 lambda 执行角色。我假设您在代码的未显示部分执行此操作。

【讨论】:

以上是关于如何使用 Terraform 将资源动态附加到内联策略?的主要内容,如果未能解决你的问题,请参考以下文章

动态/静态资源映射(Terraform)

Terraform 和 AWS:修改现有策略

Terraform GCP 启动脚本本地文件而不是内联文件

如何使用 terraform 将多个 IP 动态添加到 azure servicebus 防火墙

如何将整数附加到 url 脚本内联百里香?

Terraform 资源组 ID 作为变量