使用 AWS re:Post 即表示您同意 AWS re:Post 使用條款

如何解決 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 身分和存取管理 (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 key (KMS key) 的 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 key 金鑰政策。例如:

{
  "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 角色政策中將資源值取代為您的 KMS 金鑰 ARN:

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

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