amazon-web-services - 我可以从不同的 AWS 区域的不同账户解密 KMS key 吗?

标签 amazon-web-services amazon-sns aws-cdk amazon-kms

这是我的场景:

  • 有两个 aws 账户 - AB
  • 我有一个 KMS key K,用于保护账户 A 和区域 us-east-1 中的 SQS 队列。
  • 我在账户 B 和区域 us-west-2 中有一个 SNS 主题。
  • 帐户 A 中的我的 SQS 队列已订阅帐户 B 中的主题。
  • 我的 KMS key 的资源策略当前允许 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 key K 在队列上启用 SSE 加密,SNS 主题将失败并显示 KMS.AccessDeniedException

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

最佳答案

除了 AWS 账户主体之外,您还需要有一个策略来授予 Amazon SNS 服务主体使用 KMS key 的权限。

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

您还可以找到有关 setup here 的更详细的帖子.

关于amazon-web-services - 我可以从不同的 AWS 区域的不同账户解密 KMS key 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69890535/

相关文章:

android - 向移动设备推送通知 : SNS vs OneSignal vs GCM

php - 如何将 AWS SQS/SNS 用作通过 PHP 处理繁重任务的推送通知队列?

aws-cloudformation - CDK 小写字符串标记跨堆栈引用

amazon-web-services - 将 AWS ECS 服务与 CDK 连接

amazon-web-services - 如何使用 BashOprator 在 Airflow 中使用 Airflow AWS 连接凭证将文件从 AWS s3 存储桶传输到 GCS

node.js - S3访问私有(private)存储桶文件

python - 使用 Python 进行 zappa 调度

typescript - 如何通过CDK设置注册目标的端口

amazon-web-services - Nginx 400,使用 nginx-ingress Controller 将普通的 http 响应发送到 HTTPS 端口

amazon-web-services - 我是否需要在 AWS 个性化中更新项目 csv?