【问题标题】:How to create secrets manager secret resource policy that references the secret itself using Terraform?如何使用 Terraform 创建引用秘密本身的秘密管理器秘密资源策略?
【发布时间】:2022-11-02 21:01:31
【问题描述】:

我正在尝试创建一个 terraform 脚本,该脚本使用基于资源的策略创建 AWS 密钥管理器密钥,该策略将 IAM 角色权限授予secretsmanager:GetSecretValue 对该特定密钥。

我目前在秘密管理器秘密和 IAM 策略文档之间遇到Terraform cycle issue。这是我的代码的样子:

resource "aws_secretsmanager_secret" "this" {
  name = "mySecret"    
  policy = data.aws_iam_policy_document.this.json
}

data "aws_iam_policy_document" "this" {
  statement {
    sid = "ReadPermissions"
    principals {
      type = "aws"
      identifiers = [data.aws_iam_role.this.arn]
    }
    actions = ["secretsmanager:GetSecretValue"]
    resources = [aws_secretsmanager_secret.this.arn]
  }
}

data "aws_iam_role" "this" {
  name = "myRole"
}

解决此问题的最佳方法是什么?

【问题讨论】:

    标签: terraform terraform-provider-aws


    【解决方案1】:

    您可以尝试使用 aws_secretsmanager_secret_policy,它可以创建资源策略而不是 IAM 策略。

    例子:

    resource "aws_secretsmanager_secret" "example" {
      name = "example"
    }
    
    resource "aws_secretsmanager_secret_policy" "example" {
      secret_arn = aws_secretsmanager_secret.example.arn
    
      policy = <<POLICY
    {
      "Version": "2012-10-17",
      "Statement": [
        {
          "Sid": "EnableAnotherAWSAccountToReadTheSecret",
          "Effect": "Allow",
          "Principal": {
            "AWS": "arn:aws:iam::123456789012:root"
          },
          "Action": "secretsmanager:GetSecretValue",
          "Resource": "*"
        }
      ]
    }
    POLICY
    }
    

    【讨论】:

    • 谢谢 Gary,创建 aws_secretsmanager_secret_policy 资源将 aws_iam_policy_document 和机密管理器机密解耦。这正是我一直在寻找的。作为旁注,资源策略中秘密管理器秘密的确切 ARN 不是必需的。由于它是一项资源策略,因此使用“*”将引用秘密本身 as shown in AWS' documentation
    猜你喜欢
    • 2020-12-04
    • 2021-10-26
    • 2021-10-07
    • 2020-10-01
    • 2022-11-22
    • 2022-08-16
    • 2020-10-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多