Amazon Simple Queue Service (Amazon SQS) API コールを実行すると、次のいずれかのような AccessDenied エラーが発生します。
「An error occurred (AccessDenied) when calling the SendMessage operation: Access to the resource https://sqs.us-east-1.amazonaws.com/ is denied.」(SendMessage オペレーションを呼び出すときにエラーが発生しました (AccessDenied): リソース https://sqs.us-east-1.amazonaws.com/ へのアクセスが拒否されました。)
「An error occurred (KMS.AccessDeniedException) when calling the SendMessage operation: User: arn:aws:iam::xxxxx:user/xxxx is not authorized to perform: kms:GenerateDataKey on resource: arn:aws:kms:us-east-1:xxxx:key/xxxx with an explicit deny」(SendMessageオペレーションを呼び出すときにエラーが発生しました (kms.AccessDeniedException): ユーザー:arn:aws iam።xxxxx:user/xxxx の実行が許可されていません: リソースでの kms:GenerateDataKey: arn:aws:kms:us-east-1:xxxx:key/xxxx を明示的に拒否します。)
この問題を解決する方法を教えてください。
解決方法
Amazon SQS アクセスポリシーと IAM ポリシー
注: AWS コマンドラインインターフェイス (AWS CLI) のコマンド実行時にエラーが発生した場合は、AWS CLI の最新バージョンを使用するようにしてください。
- アクションへのアクセスを明示的に許可するアクセス権限を SQS アクセスポリシーまたは AWS Identity and Access Management (IAM) ポリシーのいずれかに含める必要があります。
- SQS キューが別のアカウントにある場合、SQS アクセスポリシーと IAM ポリシーの両方が明示的にアクセスを許可する必要があります。 重要: いずれかのポリシーで明示的な拒否は、明示的な許可を上書きします。
- ポリシーで条件要素を使用する場合は、条件によってアクセスが制限されるかどうかを確認します。
- ユーザーまたはロールがサービスコントロールポリシー (SCP) を使用する AWS Organizations 組織内にある場合は、SCP がユーザーまたはロールをブロックしていないことを確認します。
API コールに使用する IAM アイデンティティを確認するには、次の get-caller-identity AWS CLI コマンドを実行します。
aws sts get-caller-identity
Amazon SQS アクセス許可の詳細については、「Amazon SQS キューにアクセスするために必要なアクセス許可は何ですか?」を参照してください。
KMS のアクセス許可
Amazon SQS キューでサーバー側暗号化 (SSE) が有効な場合は、プロデューサーとコンシューマーの両方にアクセス許可を付与する必要があります。必要なアクセス許可は、AWS マネージド AWS KMS キーまたはカスタマーマネージドキーによって提供できます。カスタマーマネージドキーポリシーには、キュープロデューサとコンシューマごとのアクセス許可を含める必要があります。IAM ポリシーを更新して、KMS キーに必要な KMS アクセス許可を含めることもできます。
- 必要なプロデューサーアクセス許可:kms:GenerateDataKey と kms:Decrypt
- 必要なコンシューマーアクセス許可: kms:Decrypt
別のアカウントから SSE Amazon SQS キューにアクセスするには、キューでカスタマーマネージドキーを使用する必要があります。変更できるのはカスタマーマネージドキーポリシーのみなので、AWS マネージドキーは使用できません。KMS キーポリシーで、KMS キーのクロスアカウントアクセスを許可する必要があります。IAM ポリシーには KMS キーにアクセスするためのアクセス許可が含まれている必要があります。
詳細については、「キーの管理」を参照してください。
VPC エンドポイントポリシー
Amazon Virtual Private Cloud (Amazon VPC) エンドポイントを介して SQS にアクセスする場合、SQS VPC エンドポイントポリシーでアクセスを許可する必要があります。
次の VPC エンドポイントポリシーの例では、IAM ユーザー MyUser が SQS キュー MyQueue にメッセージを送信できることが指定されています。その他のアクション、IAM ユーザー、および SQS リソースでは、VPC エンドポイントを介したアクセスが拒否されます。
{
"Statement": [{
"Action": ["sqs:SendMessage"],
"Effect": "Allow",
"Resource": "arn:aws:sqs:us-east-2:123456789012:MyQueue",
"Principal": {
"AWS": "arn:aws:iam:123456789012:user/MyUser"
}
}]
}