【Security Hub修復手順】[APIGateway.8] API Gateway ルートには認可タイプを指定する必要があります
こんにちは!フニです。
皆さん、お使いのAWS環境のセキュリティチェックはしていますか?
当エントリでは、AWS Security HubによるAWS環境のセキュリティ状況スコアリングに該当する項目についての修復手順をご紹介します。
本記事の対象コントロール
[APIGateway.8] API Gateway ルートには認可タイプを指定する必要があります
[APIGateway.8] API Gateway routes should specify an authorization type
前提条件
本記事はAWS Security Hubで「AWS基礎セキュリティのベストプラクティススタンダード」を利用されている方向けの内容となります。
AWS Security Hubの詳細についてはこちらのブログをご覧ください。
対象コントロールの説明
このコントロールは、Amazon API Gateway V2(HTTP APIおよびWebSocket API)のルートに認証タイプが設定されているかどうかをチェックします。ルートに認証タイプが一切設定されていない場合、つまり認証なし(NONE)の状態になっている場合にコントロールが失敗します。なお、カスタムパラメータとして authorizationType を指定している場合は、そのパラメータで指定した認証タイプ(AWS_IAM、CUSTOM、JWT)がルートに設定されている場合のみコントロールが成功します。
API Gateway V2でAPIを作成した場合、デフォルトではルートに認証タイプが設定されていません。この状態では、APIのエンドポイントURLを知っている人であれば誰でもAPIにアクセスできてしまいます。
認証タイプを設定しないままAPIを公開すると、意図しない第三者からのアクセスを許してしまい、不正なデータの取得や改ざん、APIの悪用によるコスト増加、バックエンドシステムへの不正アクセスといったセキュリティリスクにつながる可能性があります。
対応する場合は、APIの用途や利用者に応じて適切な認証タイプを選択する必要があります。HTTP APIでは AWS_IAM(IAM認証)、JWT(JSON Web Tokenによる認証)、CUSTOM(Lambdaオーソライザー)の3種類が利用でき、WebSocket APIでは AWS_IAM と CUSTOM(Lambda REQUESTオーソライザー)の2種類が利用できます。認証タイプを変更すると、既存のAPIクライアントが認証情報を付与せずにリクエストした場合にアクセスが拒否されるようになるため、クライアント側の対応も合わせて必要です。
なお、内部テスト用のAPIや、認証が不要な公開APIなど、意図的に認証なしで運用しているルートがある場合は、このコントロールへの対応は不要です。その場合は、Security Hubで当該コントロールを「抑制済み」に設定してください。また、WebSocket APIの場合、AWSは少なくとも $connect ルートにオーソライザーを設定することを推奨しています。
詳細は以下の公式ドキュメントをご参照ください。
修復手順
1 ステークホルダーに確認
ステークホルダー(リソースの作成者や管理している部署などの関係者)に以下の点を確認します。
- 対象のAPI Gatewayルートに認証タイプを設定して良いか
- 認証タイプを設定すると、認証情報を付与していないリクエストはアクセスが拒否されるようになります。既存のAPIクライアントへの影響を事前に確認してください。
- 対応しない場合は、その理由を確認し、Security Hubで当該コントロールを「抑制済み」に設定します。
2 HTTP APIのルートに認証タイプを設定する
- AWSマネジメントコンソールにサインインし、API Gatewayコンソールを開きます。

- 左側のナビゲーションペインから「API」を選択し、対象のHTTP APIをクリックします。

- 左側のナビゲーションペインから「Authorization」を選択し、認証を設定するルートに「オーソライザーをアタッチ」をクリックします。

- 既存のオーソライザーを選択するか、新しいオーソライザーを作成し、「アタッチ」をクリックして設定を保存します。
- JWT オーソライザー: Amazon Cognito や OIDC プロバイダーを利用する場合に選択します。発行者URL(Issuer URL)と対象者(Audience)を設定します。
- Lambda オーソライザー: カスタムの認証ロジックを使用する場合に選択します。認証用のLambda関数を指定します。
- IAM 認証: AWSのIAMロールやポリシーでアクセスを制御する場合に選択します。
※ IAM認証を設定するには、「ルートにオーソライザーをアタッチ」に戻り、既存のオーソライザー一覧から「IAM(組み込み)」を選択してください。コンソールの組み込みオーソライザーを通じてIAM認証が提供されます。

※ HTTP APIで「自動デプロイ」が無効になっている場合は、変更を反映するためにAPIを再デプロイしてください。「デプロイ」メニューから対象のステージを選択し、デプロイを実行します。

3 WebSocket APIのルートに認証タイプを設定する
- AWSマネジメントコンソールにサインインし、API Gatewayコンソールを開きます。

- 左側のナビゲーションペインから「API」を選択し、対象のWebSocket APIをクリックします。

- 左側のナビゲーションペインから「ルート」を選択し、認証を設定するルートの「ルートリクエスト」タブを選択し、「編集」をクリックします。

- 「認可」ドロップダウンから認証タイプを選択し、「変更を保存」をクリックして設定を保存します。
- IAM: AWSのIAMロールやポリシーでアクセスを制御する場合に選択します。
- Lambda: Lambda REQUESTオーソライザーを使用する場合に選択します。認証用のLambda関数を指定します。

最後に
今回は、AWS Security HubによるAWS環境のセキュリティ状況スコアリングに該当する項目についての修正手順をご紹介しました。
コントロールを修正して、お使いのAWS環境のセキュリティをパワーアップさせましょう!
最後までお読みいただきありがとうございました!どなたかのお役に立てれば幸いです。
以上、フニでした!







