繁体   English   中英

Terraform 和 AWS:修改现有策略

[英]Terraform and AWS: modify an existing policy

我有一个附加到角色的现有 IAM 策略。 每次在 Secrets Manager 中创建新机密时,我都需要将新 ARN append 发送到策略。 这可以用 Terraform 完成吗? 我已经设法将该策略导入到 terraform.state 文件中,但我不知道如何:1) Append “资源”列表中的新 ARN 2) 将更改推送到 AWS

这是政策现在的样子:

{
"Version": "2012-10-17",
"Statement": [
    {
        "Effect": "Allow",
        "Action": "secretsmanager:GetSecretValue",
        "Resource": [
            "SECRET_ARN_1",
            "SECRET_ARN_2",
            "SECRET_ARN_3"
        ]
    },
    {
        "Effect": "Allow",
        "Action": "kms:Decrypt",
        "Resource": "KMS_ARN"
    }
]

}

这就是我需要它的样子:

{
"Version": "2012-10-17",
"Statement": [
    {
        "Effect": "Allow",
        "Action": "secretsmanager:GetSecretValue",
        "Resource": [
            "SECRET_ARN_1",
            "SECRET_ARN_2",
            "SECRET_ARN_3",
            "MY_BRAND_NEW_SECRET_ARN"
        ]
    },
    {
        "Effect": "Allow",
        "Action": "kms:Decrypt",
        "Resource": "KMS_ARN"
    }
]

}

以下导入通过将现有策略导入 object aws_iam_policy.mysimplepolicy 来工作,但我不知道如何从这里开始。

terraform import aws_iam_policy.mysimplepolicy <MY_POLICY_ARN>

听起来您已经知道如何将策略导入到您的 state 中。现在您需要在 Terraform 代码中定义资源,使其与策略匹配。

首先,为 ARN 定义变量:

variable "secret_arns" {
    description = "A list of secret manager ARNs that the IAM policy should permit access to."
    type        = list(string)
}

variable "kms_key_arns" {
    description = "A list of KMS Key ARNs that the IAM policy should permit access to."
    type        = list(string)
}

接下来,使用变量将策略文档定义为数据源:

data "aws_iam_policy_document" "secret_access" {
    statement {
        sid       = "SecretsAccess"
        actions   = ["secretsmanager:GetSecretValue"]
        resources = var.secret_arns
        effect    = "Allow"
    }
    statement {
        sid       = "KMSAccess"
        actions   = "kms:Decrypt"
        resources = var.kms_key_arns
        effect    = "Allow"
    }
}

现在使用数据源创建一个策略:

resource "aws_iam_policy" "mysimplepolicy" {
  name   = "MySimplePolicy"  # Make sure this has the name you want
  policy = data.aws_iam_policy_document.secret_access.json
}

最后,当您调用代码时,使用您喜欢的任何方法在您的变量中传递 ARN。 它可以来自terraform.tfvars文件或在使用-var语法的命令行上,或者来自另一个创建秘密的 Terraform 模块的 output。 例如:

terraform apply -var='secret_arns=["arn1", "arn2", <etc>]' -var='kms_key_arns=["key-arn1", "key-arn2"]'

每次您 append 将一个新项目添加到变量之一并运行terraform apply时,Terraform 将相应地更新策略。

另一个可能更简单的选项是使用基于标签的授权。 也就是说,修改策略以仅授予对具有特定标签的秘密的访问权限,然后在创建秘密时添加该标签。 还有用于执行此操作的示例文档

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM