如何解决 Amazon SNS 中的发布操作错误?

2 分钟阅读
0

我在 Amazon Simple Notification Service (Amazon SNS) 中得到一个错误。错误发生在我使用子网时,期间我尝试从跨账户 Amazon Elastic Compute Cloud (Amazon EC2) 实例发布我的 SNS 主题。

简短描述

如果在调用发布操作时收到授权错误,请完成验证 EC2 实例 IAM 角色和 SNS 主题访问策略权限部分中的步骤。

如果您对使用服务器端加密的 SNS 主题存在问题,并且收到 "KMSAccessDenied" 错误,请完成验证 KMS 密钥设置和 EC2 IAM 角色权限部分中的步骤。

**注意:**如果您的 EC2 实例无法使用互联网网关连接到互联网,请参阅为何我的 Amazon EC2 实例无法使用互联网网关连接到互联网?

解决方法

验证 EC2 实例 IAM 角色和 SNS 主题访问策略权限

针对 EC2 实例和 Amazon SNS 主题访问策略配置错误的 AWS Identity and Access Management (IAM) 角色权限可能会导致以下错误:

"An error occurred (AuthorizationError) when calling the Publish operation: User: arn:aws:iam::111122223333:role/cross-acc-ec2-sns-publish-role/i-0123456789f804d is not authorized to perform: SNS:Publish on resource: arn:aws:sns:us-east-2:123456789012:cross-account-ec2-sns."

要解决此错误,请参阅如何使用 IAM EC2 角色从跨账户 Amazon EC2 实例发布到 Amazon SNS 主题?

验证 KMS 密钥设置和 EC2 IAM 角色权限

如果您的 EC2 实例的 IAM 角色和 AWS KMS 密钥(KMS 密钥)的 AWS Key Management Service (AWS KMS) 密钥策略的权限不正确,则可能会收到以下错误:

An error occurred (KMSAccessDenied) when calling the Publish operation: null (Service: AWSKMS; Status Code: 400; Error Code: AccessDeniedException; Re
quest ID: IDNumber; Proxy: null)

**注意:**仅当您的 SNS 主题使用服务器端加密时,才会出现上述错误。

要解决此错误,请检查您的 KMS 密钥设置和 AWS KMS 密钥策略权限:

1.    确认您的 KMS 密钥已启用

2.    确认允许您的 EC2 实例 IAM 角色在 AWS KMS 密钥策略中执行 kms:GenerateDataKey*kms:Decrypt。这是用于 SNS 主题的服务器端加密的 KMS 密钥的密钥策略。例如:

{
  "Effect": "Allow",
  "Principal": {
    "AWS": "arn:aws:iam::111122223333:role/cross-acc-ec2-sns-publish-role"
  },
  "Action": [
    "kms:GenerateDataKey*",
    "kms:Decrypt"
  ],
  "Resource": "*"
}

3.    确认 kms:GenerateDataKey*kms:Decrypt 权限已附加到 EC2 实例的 IAM 角色

**注意:**提供所需的最低权限是一种最佳实践。因此,请务必在以下 IAM 角色策略中将 Resource(资源)值替换为您的 KMS 密钥 ARN:

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "VisualEditor0",
      "Effect": "Allow",
      "Action": [
        "kms:Decrypt",
        "kms:GenerateDataKey*"
      ],
      "Resource": "*"
    }
  ]
}

AWS 官方
AWS 官方已更新 2 年前