説明
保護対象の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を関連付け、許可・拒否の両方を検証してください。