配置源 KMS 密钥以复制加密对象

Tho*_*sen 6 amazon-s3 terraform terraform-provider-aws

我正在尝试将加密对象复制到不同区域的 S3 存储桶。执行此操作时,我需要指定一个或多个用于解密对象的 KMS 密钥。

我正在使用以下 Terraform 脚本:

replication_configuration {
  role = "${aws_iam_role.replication.arn}"

  rules {
    id     = "${var.service}"
    prefix = "${var.replication_bucket_prefix}"
    status = "Enabled"

    destination {
      bucket        = "${aws_s3_bucket.replication_bucket.arn}"
      storage_class = "STANDARD"
      replica_kms_key_id = "xxxxx"
    }

    source_selection_criteria {
      sse_kms_encrypted_objects {
        enabled = true
      }
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

该脚本有效(它适用),但在 AWS 控制台中检查时,没有为源对象选择 KMS 密钥。

查看配置,我看不到任何地方可以指定这些键。用于replica_kms_key_id指定用于加密目标存储桶中的对象的 KMS 密钥。

小智 5

当我尝试使用 terraform 实现 KMS 加密的跨区域、跨帐户复制时,我遇到了同样的问题。

\n\n

在某些时候,我注意到配置中缺少源 KMS 密钥(就像您所做的那样),并通过 S3 Web 界面添加了它。这样做之后,AWS 创建了另一个名为“类似”的策略(没有在任何地方提及;一天后我在做其他事情时发现了它)crr-$SOURCE_BUCKET_NAME-to-$TARGET_BUCKET_NAME并将其附加到复制角色。在检查了该规则后,我意识到这是拼图中缺失的一块。

\n\n

这是该政策的重要部分:

\n\n
{\n        "Action": [\n            "kms:Decrypt"\n        ],\n        "Effect": "Allow",\n        "Condition": {\n            "StringLike": {\n                "kms:ViaService": "s3.${var.source_bucket_region}.amazonaws.com",\n                "kms:EncryptionContext:aws:s3:arn": [\n                    "arn:aws:s3:::${var.source_bucket_name}/*"\n                ]\n            }\n        },\n        "Resource": [\n            "${var.source_kms_key_arn}"\n        ]\n    },\n
Run Code Online (Sandbox Code Playgroud)\n\n

${var.source_kms_key_arn}是您的源 KMS 密钥 arn。

\n\n

PS:这个问题让我抓狂!(\xe2\x95\xaf\xc2\xb0\xe2\x96\xa1\xc2\xb0\xef\xbc\x89\xe2\x95\xaf\xef\xb8\xb5\xe2\x94\xbb\xe2\x94\ x81\xe2\x94\xbb

\n