API Gateway メソッドの認証設定の確認

保護が必要なメソッドに呼び出し元の認証と操作別のアクセス権限を適用してください。

説明

API Gateway メソッドの AuthorizationType が NONE の場合、そのメソッドでは API Gateway による呼び出し元の認証を行いません。保護が必要な機能に他のアクセス制御もないと、意図しない呼び出し元がデータを読んだり操作を実行したりするおそれがあります。

公開コンテンツや CORS プリフライト要求のための未認証メソッドは正当な用途です。リソースポリシーやバックエンドの認証・認可もアクセスに影響し、OPTIONS 応答自体が他のメソッドを保護するわけではありません。

想定される影響

  • 機密データの読み取りや変更が、必要な権限なしで呼び出されるおそれがあります。
  • 公開呼び出しの悪用により、バックエンドの負荷や費用が増える場合があります。

対処方法

各メソッドを公開する必要性を確認し、保護対象には AWS_IAM、Cognito、Lambda オーソライザーなど適切な認証を構成してください。認証された呼び出し元の操作とリソース権限も制限してください。変更を実際のステージにデプロイし、許可された呼び出しは成功し、許可されていない呼び出しは拒否されることを試験してください。

例

異なるメソッドを示す抜粋です。API と統合設定は省略しています。後の OPTIONS 例は、先の GET メソッドに認証を追加する変更ではありません。

変更前

yaml
Resources:
  MockMethod:
    Type: AWS::ApiGateway::Method
    Properties:
      RestApiId: !Ref MyApi
      ResourceId: !GetAtt MyApi.RootResourceId
      HttpMethod: GET
      AuthorizationType: NONE

GET メソッドは API Gateway の認証を使用しません。提供する機能と他のアクセス制御を確認してください。

変更後

yaml
Resources:
  CorsOptionsMethod:
    Type: AWS::ApiGateway::Method
    Properties:
      RestApiId: !Ref MyApi
      ResourceId: !GetAtt MyApi.RootResourceId
      HttpMethod: OPTIONS
      AuthorizationType: NONE

OPTIONS メソッドも認証なしで呼び出せる設定です。CORS プリフライト処理に利用できますが、GET メソッドを削除したり保護したりするものではありません。

参考資料