認可:IAM、Lambda Authorizers、Cognito
IAM SigV4 署名、カスタム Lambda オーソライザー、Amazon Cognito User Pool オーソライザーを使って API エンドポイントを保護します。
「認可:IAM、Lambda Authorizers、Cognito」はCoddyKit上の無料Cloud & IT Cert Prepレッスンです。 これはレッスン3/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはCloud & IT Cert Prep学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 Cloud & IT Cert Prepコースには全4レッスンが含まれています。
API の認可が重要な理由
認可制御がなければ、インターネット上のあらゆるクライアントが API Gateway のエンドポイントを呼び出し、データにアクセスしたり変更したりできてしまいます。API Gateway には、ネイティブの認可メカニズムが 3 つあります。IAM (SigV4)、Lambda オーソライザー、Amazon Cognito ユーザープールオーソライザーです。それぞれ用途が異なります。IAM は AWS サービス間の呼び出し、Lambda オーソライザーはカスタムトークンやリクエストに基づく認証、Cognito は Web やモバイルユーザーの認証に使用します。
SigV4 による IAM 認可
IAM 認可では、呼び出し元に AWS Signature Version 4 (SigV4) を使用してリクエストに署名することを要求します。呼び出し元には AWS 認証情報(アクセスキーとシークレットキー、または STS から取得した一時認証情報)が必要であり、IAM ポリシーで API の ARN に対する execute-api:Invoke が許可されていなければなりません。これは AWS 内でのマシン間(サーバー間)呼び出しに適しています。たとえば、Lambda から別の API を呼び出す場合、EC2 から内部 API を呼び出す場合、クロスアカウントでサービスにアクセスする場合などです。ブラウザクライアントで SigV4 を使用するのは容易ではありません。
# IAM policy to allow invoking a specific API endpoint
{
'Version': '2012-10-17',
'Statement': [{
'Effect': 'Allow',
'Action': 'execute-api:Invoke',
'Resource': 'arn:aws:execute-api:us-east-1:123456789012:abc123/prod/GET/orders'
}]
}Lambda オーソライザー:トークンベース
Lambda オーソライザー(以前の Custom Authoriser)は、バックエンド統合を呼び出す前に API Gateway が実行する、ユーザー作成の Lambda 関数です。トークンベースのオーソライザーでは、API Gateway が Authorization ヘッダーからトークン(JWT、OAuth、API キー)を抽出し、Lambda に渡します。Lambda はトークンを検証します(たとえば、公開鍵に対する JWT 署名の検証や、サードパーティの ID プロバイダーの呼び出しを行います)。その後、リクエストを許可または拒否する IAM ポリシードキュメントを返します。
def lambda_handler(event, context):
token = event['authorizationToken']
# Validate token (JWT verification, introspect OAuth, etc.)
if is_valid_token(token):
return {
'principalId': 'user123',
'policyDocument': {
'Version': '2012-10-17',
'Statement': [{'Effect': 'Allow', 'Action': 'execute-api:Invoke',
'Resource': event['methodArn']}]
},
'context': {'userId': 'user123', 'role': 'admin'}
}
raise Exception('Unauthorized')Lambda オーソライザー:リクエストベース
リクエストベースの Lambda オーソライザーでは、API Gateway はトークンだけでなく、リクエストコンテキスト全体(ヘッダー、クエリ文字列、ステージ変数、パスパラメータ)を Lambda に渡します。これは、複数のリクエスト属性に基づいて認可する場合に便利です。たとえば、IP の許可リスト、ヘッダーの組み合わせ、多要素認証のチェックなどに使用できます。リクエストベースのオーソライザーは、REST API と HTTP API の両方でサポートされています。
Lambda オーソライザーのキャッシュ
API リクエストごとに Lambda オーソライザーを呼び出すと、遅延とコストが増加します。オーソライザー結果のキャッシュを有効にすると、オーソライザーが返した IAM ポリシーを、設定可能な TTL(0~3600 秒)の間、トークン値をキーとしてキャッシュできます。同じトークンを使用する後続のリクエストでは Lambda の呼び出しが省略され、キャッシュされたポリシーが使用されます。TTL はトークンの有効期限に合わせて設定します。トークンの有効期間が 1 時間なら、オーソライザーの結果も同じ期間キャッシュします。キャッシュは REST API で利用でき、HTTP API の JWT オーソライザーにはキャッシュ機能が組み込まれています。
Amazon Cognito ユーザープールオーソライザー
Cognito ユーザープールオーソライザーは、Lambda 関数を使わずに、Cognito が発行した JWTを API Gateway 内で直接検証します。ユーザーが Cognito(Hosted UI、SDK、またはフェデレーション ID プロバイダー経由)で認証されると、Cognito は ID トークンまたはアクセストークンを発行します。クライアントはこのトークンを Authorization ヘッダーに含めます。API Gateway は、Cognito ユーザープールに基づいてトークンの署名と有効期限を検証します。トークンが有効ならリクエストは処理され、無効なら API Gateway は 401 を返します。
aws apigateway create-authorizer \
--rest-api-id 'abc123' \
--name 'CognitoAuthorizer' \
--type COGNITO_USER_POOLS \
--provider-arns 'arn:aws:cognito-idp:us-east-1:123456789012:userpool/us-east-1_XXXXXXX' \
--identity-source 'method.request.header.Authorization'HTTP API の JWT オーソライザー
HTTP API では、Lambda を使わないネイティブの JWT オーソライザーを利用できます。JWT の発行者 URL(Cognito、Auth0、Okta など)とオーディエンスを指定すると、API Gateway が JWT を自動的に検証します。これは基本的に Cognito ユーザープールオーソライザーと同じですが、標準に準拠した OIDC プロバイダーであればどれでも利用できます。トークンの検証(署名、有効期限、オーディエンス)は API Gateway 内部で行われるため、Lambda オーソライザーより低遅延で、Lambda のコストもかかりません。
aws apigatewayv2 create-authorizer \
--api-id 'abc123' \
--authorizer-type JWT \
--name 'JWTAuthorizer' \
--identity-source '$request.header.Authorization' \
--jwt-configuration '{
"Issuer": "https://cognito-idp.us-east-1.amazonaws.com/us-east-1_XXXXXXX",
"Audience": ["your-client-id"]
}'Cognito Identity Pools と User Pools の違い
API の認可には Cognito User Pools を使用します。User Pools はユーザー認証を管理し、JWT を発行します。一方、Cognito Identity Pools(フェデレーティッドアイデンティティ)は別の機能で、サードパーティのトークン(User Pools、ソーシャルログイン、SAML から取得したもの)を一時的な AWS 認証情報(STS の AssumeRoleWithWebIdentity 経由)に交換します。Identity Pools は、アプリがクライアントから AWS サービス(S3、DynamoDB)に直接アクセスする必要がある場合に使用します。API Gateway の認証には User Pool の JWT が適しており、Identity Pool の認証情報はブラウザやモバイルから AWS SDK を直接呼び出すためのものです。
API Gateway のリソースポリシー
REST API はリソースポリシーをサポートしています。これは API にアタッチする JSON ポリシーで、IP アドレス、VPC エンドポイント、送信元アカウント、ARN に基づいてアクセスを制御します。リソースポリシーを使用すると、特定の IP 範囲からの API 呼び出しだけを許可したり、特定の VPC エンドポイント(プライベート API)経由のリクエストにアクセスを制限したり、クロスアカウントの呼び出しを許可したりできます。リソースポリシーはメソッドレベルのオーソライザーと併用されます。リクエストを成功させるには、両方で許可されている必要があります。
# Allow only specific IP range to call the API
{
'Version': '2012-10-17',
'Statement': [{
'Effect': 'Allow',
'Principal': '*',
'Action': 'execute-api:Invoke',
'Resource': 'arn:aws:execute-api:us-east-1:123456789012:abc123/*',
'Condition': {'IpAddress': {'aws:SourceIp': '203.0.113.0/24'}}
}]
}相互 TLS 認証
相互 TLS (mTLS) では、TLS ハンドシェイク中にクライアントとサーバーの両方が証明書を提示する必要があります。API Gateway は、カスタムドメイン名が設定されている場合、REST API と HTTP API の mTLS をサポートします。クライアントは、S3 のトラストストアにアップロードした認証局(CA)が署名した有効な証明書を提示する必要があります。mTLS は、トークンベースの認証だけでは不十分で、強力なクライアント ID 検証が必要な金融サービス、IoT デバイス認証、B2B 統合などで使用されます。
適切なオーソライザータイプの選択
SAA-C03 試験におけるオーソライザーの選択:IAM (SigV4) → 同一アカウントまたはクロスアカウントでの AWS サービス間の呼び出し。Cognito User Pool → Cognito で認証された Web やモバイルアプリのユーザー。Lambda オーソライザー → カスタム認証ロジック(サードパーティの ID プロバイダー、レガシーなトークン形式、OAuth のイントロスペクション、IP とトークンの組み合わせなど)。JWT オーソライザー (HTTP API) → 標準に準拠した任意のプロバイダーが発行する OIDC/OAuth2 トークンを、Lambda オーソライザーより低コストで検証する場合。オーソライザーなし → パブリック API。
理解度チェック
このレッスンで学んだ AWS Solutions Architect (SAA-C03) の概念について理解度を確認します。
レッスンのまとめ
このレッスンでは、次のことを学びました。IAM (SigV4) 認可は、AWS 認証情報を使用したサービス間の呼び出しに適しています。Cognito User Pool オーソライザーは、Cognito が発行した JWT をネイティブに検証し、Web やモバイルアプリを保護します。Lambda オーソライザーは、サードパーティの ID プロバイダー向けのカスタムトークン検証や、複雑な認可ロジックを実装でき、結果のキャッシュも任意で利用できます。次は、API Gateway のスロットリング、キャッシュ、使用量プランについて学びます。
よくある質問
「認可:IAM、Lambda Authorizers、Cognito」レッスンは無料ですか?
はい。「認可:IAM、Lambda Authorizers、Cognito」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、Cloud & IT Cert Prepコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 Cloud & IT Cert Prepコースには全4レッスンが含まれています。
「認可:IAM、Lambda Authorizers、Cognito」で何を学びますか?
IAM SigV4 署名、カスタム Lambda オーソライザー、Amazon Cognito User Pool オーソライザーを使って API エンドポイントを保護します。 ブラウザで直接実行するハンズオンコードでCloud & IT Cert Prepを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。
Cloud & IT Cert Prepを始めるのに経験は必要ですか?
事前経験は必要ありません。CoddyKitのCloud & IT Cert Prepは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン3/4です。
「認可:IAM、Lambda Authorizers、Cognito」レッスンにはどのくらい時間がかかりますか?
ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。
このCloud & IT Cert Prepレッスンでコードを書いて実行できますか?
はい。すべてのCloud & IT Cert Prepレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。
このコースのすべてのレッスン
- REST API、HTTP API、WebSocket API
- 統合:Lambda、HTTP、Mock
- 認可:IAM、Lambda Authorizers、Cognito
- スロットリング、キャッシュ、使用量プラン