【问题标题】: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。