Sna*_*Man 5 amazon-web-services amazon-iam terraform aws-kms
有谁知道我如何让 Terraform 更新现有的 KMS 密钥策略?
我已经创建了 KMS 密钥,但我有一个需要使用现有 KMS 密钥的临时 IAM 角色。我希望能够将这个“新”IAM 角色添加到现有的 KMS 密钥策略中。我可以看到使用 AWS 控制台可以做到这一点,但我看不到如何在 Terraform 中执行此操作。
我想这也可以使用 AWS CLI 工具实现,但我没有对此进行调查,因为我正在 Terraform 中构建环境并希望将其全部放在一个地方。
我应该指出,当前的 KMS 密钥用于加密 S3 上传和下载,并且各种 IAM 用户和角色已经可以访问当前密钥,因此创建新密钥只会为已经访问存储桶的人解决问题。
Dav*_*vos 11
如果密钥策略禁用 IAM 角色的使用,BMW 的答案是正确的,但是,如果 KMS 密钥策略已设置为启用 IAM 策略,则您可能不需要更新它。
使用密钥策略的文档说明您必须拥有密钥策略,但您也可以选择使用 IAM 策略来控制访问。
如果 KMS 密钥策略包含此语句,则 IAM 策略已启用,您可以继续创建 IAM 策略以解决问题;您无需担心更新密钥策略。
{
"Sid": "Enable IAM User Permissions",
"Effect": "Allow",
"Principal": {"AWS": "arn:aws:iam::111122223333:root"},
"Action": "kms:*",
"Resource": "*"
}
Run Code Online (Sandbox Code Playgroud)
在 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>"
]
}
}
Run Code Online (Sandbox Code Playgroud)
从该文档创建 IAM 策略
resource "aws_iam_policy" "kms_use" {
name = "kmsuse"
description = "Policy to allow use of KMS Key"
policy = "${data.aws_iam_policy_document.kms_use.json}"
}
Run Code Online (Sandbox Code Playgroud)
将其附加到角色
resource "aws_iam_role_policy_attachment" "temp" {
role = "${aws_iam_role.temp_role_made_earlier.name}"
policy_arn = "${aws_iam_policy.kms_use.arn}"
}
Run Code Online (Sandbox Code Playgroud)
aws_iam_role_policy_attachment使用name角色的属性,而不是 arn。| 归档时间: |
|
| 查看次数: |
12200 次 |
| 最近记录: |