繁体   English   中英

我可以从不同的 aws 区域解密来自不同帐户的 KMS 密钥吗?

[英]Can I decrypt a KMS key from a different account, from a different aws region?

这是我的场景:

  • 有两个 aws 帐户 - AB
  • 我有一个 KMS 密钥K保护账户A和区域us-east-1中的 SQS 队列。
  • 我在账户B和区域us-west-2中有一个 SNS 主题。
  • 我来自账户A的 SQS 队列订阅了来自账户B的主题。
  • 我的 KMS 密钥的资源策略当前允许 SNS 主题执行加密/解密。 我正在为我的应用程序使用 AWS CDK。 以下是设置这些权限的代码行:
encryptionMasterKey.addToResourcePolicy(new iam.PolicyStatement({
            effect: iam.Effect.ALLOW,
            actions: ["kms:Create*",
                "kms:Describe*",
                "kms:Enable*",
                "kms:List*",
                "kms:Put*",
                "kms:Update*",
                "kms:Revoke*",
                "kms:Disable*",
                "kms:Get*",
                "kms:Delete*",
                "kms:ScheduleKeyDeletion",
                "kms:CancelKeyDeletion",
                "kms:GenerateDataKey",
                "kms:TagResource",
                "kms:UntagResource"],
            resources: ["*"],
            principals: [new iam.AccountPrincipal("<account B id>")]
        }));

现在,这是我的观察:

  • 如果我不加密 SQS 队列,我的 SNS 主题能够将消息传递到我的队列。
  • 但是,如果我使用 KMS 密钥K在队列上启用 SSE 加密,则 SNS 主题将失败并KMS.AccessDeniedException

出于业务原因,我需要能够加密我的队列。 如何允许我的 SNS 主题访问 KMS 密钥?

除了 AWS 账户委托人之外,您还需要有一个策略来授予 Amazon SNS 服务委托人使用 KMS 密钥的权限。

{
    "Sid": "Allow access for SNS Service Principal",
    "Effect": "Allow",
    "Principal": {
        "Service": "sns.amazonaws.com"
    },
    "Action": [
        "kms:GenerateDataKey*",
        "kms:Decrypt"
    ],
    "Resource": "*"
}

您还可以在此处找到有关设置的更详细的帖子。

我遇到了类似的问题,在这里查看问题和答案: SNS not able to send messages to SQS queue in another account

TL;DR:除了@user3099576 的回答之外,您还需要使用在两个区域之一中创建的多区域 KMS 密钥,以及在另一个区域中的副本。 KMS 密钥目前不跨区域。

暂无
暂无

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

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