You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

跨账号SNS/SQS订阅故障:双方使用独立客户管理KMS密钥

跨账号SNS到SQS(不同KMS密钥)消息接收失败解决方案

跨账号场景下,SNS主题(账号A,用key_A加密)向SQS队列(账号B,用key_b加密)发送消息时,需完成两次加解密转换,权限配置缺失会导致消息无法投递,即使订阅状态显示已确认。

一、权限流向梳理

  1. 账号A的SNS需读取自身加密的主题内容:使用key_A解密消息
  2. SNS需将消息重新加密为SQS支持的格式:使用账号B的key_b加密
  3. 账号B的SQS接收消息后,使用key_b解密内容

二、具体权限配置

1. 账号A的KMS密钥key_A策略

需要允许账号A的SNS服务对该密钥执行解密和重加密源操作,确保SNS能读取主题中的加密消息:

{
  "Version": "2012-10-17",
  "Statement": [
    // 保留已有的其他权限,新增以下语句
    {
      "Sid": "AllowSNSDecryptForCrossAccountDelivery",
      "Effect": "Allow",
      "Principal": {
        "Service": "sns.amazonaws.com"
      },
      "Action": [
        "kms:Decrypt",
        "kms:ReEncryptFrom"
      ],
      "Resource": "*",
      "Condition": {
        "StringEquals": {
          "aws:SourceAccount": "{账号A的ID}",
          "aws:SourceArn": "arn:aws:sns:{区域}:{账号A的ID}:{你的SNS主题名称}"
        }
      }
    }
  ]
}

2. 账号B的KMS密钥key_b策略

需要允许账号A的SNS服务对该密钥执行加密、重加密目标和生成数据密钥操作,确保SNS能将消息转换为SQS可解密的格式:

{
  "Version": "2012-10-17",
  "Statement": [
    // 保留已有的其他权限,新增以下语句
    {
      "Sid": "AllowAccountASNSEncryptForSQS",
      "Effect": "Allow",
      "Principal": {
        "AWS": "arn:aws:iam::{账号A的ID}:root"
      },
      "Action": [
        "kms:Encrypt",
        "kms:ReEncryptTo",
        "kms:GenerateDataKey*",
        "kms:DescribeKey"
      ],
      "Resource": "*",
      "Condition": {
        "StringEquals": {
          "aws:SourceAccount": "{账号A的ID}",
          "aws:SourceArn": "arn:aws:sns:{区域}:{账号A的ID}:{你的SNS主题名称}"
        }
      }
    }
  ]
}

3. 账号B的SQS队列权限策略

确认已允许账号A的SNS主题向该队列发送消息(若未配置需添加):

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "AllowAccountASNSSendMessage",
      "Effect": "Allow",
      "Principal": {
        "AWS": "arn:aws:iam::{账号A的ID}:root"
      },
      "Action": "sqs:SendMessage",
      "Resource": "arn:aws:sqs:{区域}:{账号B的ID}:{你的SQS队列名称}",
      "Condition": {
        "ArnEquals": {
          "aws:SourceArn": "arn:aws:sns:{区域}:{账号A的ID}:{你的SNS主题名称}"
        }
      }
    }
  ]
}

三、验证步骤

  1. 重新发送测试消息到账号A的SNS主题
  2. 检查SQS队列的消息接收情况
  3. 若仍失败,查看AWS CloudTrail中的KMS和SNS/SQS相关日志,定位具体的权限拒绝事件

内容的提问来源于stack exchange,提问作者BaronVonChai

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.28 19:53:15