あるチームがAPI GatewayとLambdaで社内ツール向けのREST APIを構築している。このAPIをインターネット公開する前に「AWSの標準機能だけを使って認証・認可を実装したい」と考えている。最小の追加実装でAPIへのアクセスを認証済みユーザーに限定する方法として有効なものを2つ選択してください。
- A. Amazon Cognito User Poolを作成し、API GatewayのオーソライザーにCognito User Poolを設定する
- B. API GatewayリソースポリシーにCIDRブロック制限を設定して特定のオフィスIPからのみアクセスを許可する
- C. AWS IAM認証(Sigv4署名)をAPI Gatewayに設定し、IAMユーザー/ロールを使って認証する
- D. API GatewayのAPIキーのみを使い、X-Api-Keyヘッダーを知っているクライアントだけアクセスできるようにする
- E. Lambda関数内にBASIC認証(ユーザー名/パスワード)の検証ロジックを直接実装する
解答と解説を見る
正解: A, C
選択肢A(Cognito User Pool Authorizer)はユーザー登録・ログイン・JWTトークン発行を管理するCognitoの機能をAPI Gatewayのオーソライザーとして設定するものであり、ユーザー認証のすべてをAWSマネージドサービスで賄える。社内ツールのアクセス制御に適している。選択肢C(IAM認証)はAWSのIAMユーザーやロールを持つクライアントがSigv4署名を付与してAPIを呼び出す方式であり、AWSのID管理基盤をそのまま活用できる。サービス間通信や社内ツールのような環境では追加実装が少ない。選択肢BのIPアドレス制限はネットワークレベルのアクセス制御であり「認証」ではない(IPが同じなら誰でもアクセスできる)。リモートワーク環境ではIPが固定されないため、社内ツールの認証として不十分である。選択肢EのBASIC認証はLambdaコードへのカスタム実装が必要であり「AWSの標準機能だけを使う」という要件に反する。また、パスワード管理・ハッシュ化・ブルートフォース対策など多くのセキュリティ考慮が必要になる。選択肢DのAPIキーはAPI GatewayではスロットリングとクォータのためのUsage Plan管理に使うものであり、AWSのドキュメントで明示的に「APIキーは認証の代替にならない」と記載されている。
📚 関連サービスの解説: Amazon Cognito ・ Amazon API Gateway