有谁知道如何让Terraform更新现有的KMS密钥策略?
我已经创建了KMS密钥,但我有一个需要使用现有KMS密钥的临时IAM角色。我希望能够将这个“新的”IAM角色添加到现有的KMS密钥策略中。我可以看到使用AWS控制台可以实现这一点,但我看不到如何在Terraform中执行此操作。
我认为这也可以使用AWS CLI工具,但我没有调查过,因为我在Terraform中构建一个环境,并希望将它们全部放在一个地方。
我应该指出,当前的KMS密钥用于加密S3上传和下载,并且各种IAM用户和角色已经可以访问当前密钥,因此创建新密钥只会为已经访问存储桶的人解决问题。
答案 0 :(得分:1)
如果kms密钥存在且不受terraform控制,则需要先导入此资源。
首先,确保准备好这些代码
resource "aws_iam_role" "example" {
name = "example"
assume_role_policy = "<redacted>"
}
resource "aws_kms_key" "example" {
description = "example"
deletion_window_in_days = 10
policy = "${file("kms-policy.json")}"
}
然后运行terraform import
以导入此资源。
$ terraform import aws_kms_key.example arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab
之后,kms密钥可以通过terraform进行管理,您现在可以使用terraform plan/apply
更新其iam角色
答案 1 :(得分:1)
如果密钥策略禁用了IAM角色,那么BMW的答案是正确的,但是,如果已将KMS密钥策略设置为启用IAM策略,则您可能不需要更新它。
using key policies的文档说明您必须具有密钥策略,但是您也可以选择使用IAM策略来控制访问。
如果KMS密钥策略包含此语句,则将启用IAM策略,您可以继续创建IAM策略来解决此问题;您不必担心更新密钥策略。
{
"Sid": "Enable IAM User Permissions",
"Effect": "Allow",
"Principal": {"AWS": "arn:aws:iam::111122223333:root"},
"Action": "kms:*",
"Resource": "*"
}
在Terraform中,您可以创建一个IAM策略,并将其附加到该临时角色。
以下内容假设您已经在Terraform中获得了有关临时IAM角色的代码,在这里我将其称为temp_role_made_earlier
创建一个IAM策略文档(推荐方法,比导入json更好,并且比使用模板少混乱)
data "aws_iam_policy_document" "kms_use" {
statement {
sid = "Allow KMS Use"
effect = "Allow"
actions = [
"kms:Encrypt",
"kms:Decrypt",
"kms:ReEncrypt*",
"kms:GenerateDataKey*",
"kms:DescribeKey",
]
resources = [
"<arn of the key goes here>"
]
}
}
从该文档创建IAM策略
resource "aws_iam_policy" "kms_use" {
name = "kmsuse"
description = "Policy to allow use of KMS Key"
policy = "${data.aws_iam_policy_document.kms_usage.json}"
}
将其附加到角色
resource "aws_iam_role_policy_attachment" "temp" {
role = "${aws_iam_role.temp_role_made_earlier.name}"
policy_arn = "${aws_iam_policy.kms_use.arn}"
}
name
属性作为角色,而不是arn。