説明
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 メソッドを削除したり保護したりするものではありません。