API Gateway REST APIの認証構成の確認

保護対象のREST APIメソッドに適切な認証を関連付け、実際の権限確認を検証してください。

説明

保護対象のREST APIメソッドに有効な認証と認可がないと、意図しない呼び出し元が機能を使うおそれがあります。AuthorizerリソースがなくてもIAM認証などが適用される場合があるため、実際のメソッド設定を確認してください。

LambdaやCognitoのAuthorizerを宣言するだけではメソッドは保護されません。対象のREST APIを参照し、メソッドのauthorizationとauthorizer_idを正しく設定する必要があります。

想定される影響

  • 呼び出し元の検証が一貫して適用されないおそれがあります。
  • 保護すべき機能が公開される可能性があります。
  • 認証方式が不統一だと運用管理が複雑になります。

対処方法

  • サービスに合う認証を選んでください。Authorizerを使う場合は、対象のREST APIを参照するaws_api_gateway_authorizerを構成してください。
  • メソッドにはLambda Authorizer用のCUSTOM、またはCognito用のCOGNITO_USER_POOLSと、対応するauthorizer_idを設定してください。必要な呼び出し権限も構成してください。
  • デプロイ前に、Authorizerとメソッドの認可が連携して動作することを確認してください。

例

APIとLambda Authorizerの関連付けだけを示す抜粋です。Lambda関数、呼び出し用ロール、メソッド設定は省略しています。最初の例が参照するdemo APIは、別途存在するものとします。

変更前

hcl
resource "aws_api_gateway_authorizer" "demo" {
  name                   = "demo"
  rest_api_id            = aws_api_gateway_rest_api.demo.id
  authorizer_uri         = aws_lambda_function.authorizer.invoke_arn
  authorizer_credentials = aws_iam_role.invocation_role.arn
}

resource "aws_api_gateway_rest_api" "demo2" {
  name = "auth-demo"
}

変更後

hcl
resource "aws_api_gateway_authorizer" "demo" {
  name                   = "demo"
  rest_api_id            = aws_api_gateway_rest_api.demo.id
  authorizer_uri         = aws_lambda_function.authorizer.invoke_arn
  authorizer_credentials = aws_iam_role.invocation_role.arn
}

resource "aws_api_gateway_rest_api" "demo" {
  name = "auth-demo"
}

説明:

  • 変更前: Authorizerは別のREST APIを参照し、表示したAPIを保護していません。
  • 変更後: 表示したAPIを参照します。メソッドにも認証方式とIDを関連付け、許可・拒否の両方を検証してください。

参考資料