説明
不要な主体に広いキュー操作を許可すると、メッセージの送信・取得・削除権限が業務に必要な範囲を超える可能性があります。実際の送信元と受信者に必要な操作だけを許可してください。
実際のアクセスには、ポリシー条件や他の権限制御も関係します。サーバー側の暗号化が有効なキューは匿名の SendMessage と ReceiveMessage を拒否するため、公開主体があるだけで全匿名要求が許可されるとは限りません。
想定される影響
- 不要なメッセージ送信を許可すると、後続サービスが意図しない処理を実行するおそれがあります。
- メッセージ取得・削除権限の悪用は、情報漏えいや処理漏れにつながる可能性があります。
対処方法
- 全操作の許可を、送信元と受信者に必要な SQS 操作に限定してください。
- Principal を承認済みのアカウント・ロール・サービスに制限してください。SNS 連携では sns.amazonaws.com サービス主体と、対象トピック ARN の aws:SourceArn 条件を使用してください。
- 暗号化と必要なキー権限を維持し、正規のメッセージ処理と未承認の操作の拒否を確認してください。
例
同じキューポリシーで許可操作を減らす比較です。変更後も主体は全体のままなので、実際のデプロイでは送信元も制限してください。
変更前
hcl
resource "aws_sqs_queue" "app_queue" {
name = "examplequeue"
}
resource "aws_sqs_queue_policy" "app_queue_policy" {
queue_url = aws_sqs_queue.app_queue.id
policy = <<POLICY
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": "*",
"Action": "*",
"Resource": "${aws_sqs_queue.app_queue.arn}"
}
]
}
POLICY
}
すべての主体に全操作を許可する設定です。実際に許可されるメッセージ操作と、他の権限制御を合わせて確認してください。
変更後
hcl
resource "aws_sqs_queue" "app_queue" {
name = "examplequeue"
}
resource "aws_sqs_queue_policy" "app_queue_policy" {
queue_url = aws_sqs_queue.app_queue.id
policy = <<POLICY
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": "*",
"Action": "sqs:SendMessage",
"Resource": "${aws_sqs_queue.app_queue.arn}"
}
]
}
POLICY
}
操作を SendMessage に絞っていますが、Principal は * のままです。承認済みの送信元と必要な条件でさらに制限してください。