前提条件
Cognito認証: ユーザーはCognito User Poolを介して認証され、Cognito Identity Poolを使用してAWSリソースにアクセスします。
AssumeRole: Cognito Identity Poolを通じて取得した一時的な認証情報を使って、指定されたIAMロールにAssumeRoleします。
API Gateway: Lambda関数に連携されたAPI Gatewayエンドポイントが設定されています。
手順
- CognitoでIDトークンを取得
まず、Cognito User Poolでユーザーが認証されると、IDトークン(JWT)を取得します。
bash
Copy code
aws cognito-idp initiate-auth
--client-id
--auth-flow USER_PASSWORD_AUTH
--auth-parameters USERNAME=,PASSWORD=
: Cognito User Poolで設定されたアプリクライアントID
: Cognitoユーザー名
: Cognitoユーザーパスワード
レスポンスにはIdTokenが含まれています。
- Cognito Identity Poolから一時的な認証情報を取得
次に、取得したIDトークンを使って、Cognito Identity Poolから一時的な認証情報を取得します。
bash
Copy code
aws cognito-identity get-id
--identity-pool-id
--logins cognito-idp..amazonaws.com/=
: Cognito Identity PoolのID
: Cognito Identity Poolが存在するリージョン
: Cognito User PoolのID
: 先ほど取得したIDトークン
次に、一時的なAWS認証情報を取得します。
bash
Copy code
aws cognito-identity get-credentials-for-identity
--identity-id
--logins cognito-idp..amazonaws.com/=
レスポンスにはAccessKeyId、SecretKey、SessionTokenが含まれています。
- AssumeRoleを実行
取得した一時的な認証情報を使ってAssumeRoleします。
bash
Copy code
aws sts assume-role
--role-arn
--role-session-name
--duration-seconds 900
--credentials
--access-key
--secret-key
--session-token
: AssumeRoleするIAMロールのARN
: 任意のセッション名
, , : 取得した一時的な認証情報
レスポンスには新しい一時的なAccessKeyId、SecretKey、SessionTokenが含まれています。
- 署名付きリクエストを作成してAPI Gatewayを呼び出す
新しい一時的な認証情報を使って、API Gatewayに署名付きリクエストを送信します。
bash
Copy code
curl -X POST https://your-api-id.execute-api.your-region.amazonaws.com/your-stage/your-resource
-H "Authorization: Bearer "
-H "Content-Type: application/json"
-d '{"key1":"value1", "key2":"value2"}'
--aws-sigv4 "aws:amz:us-west-2:apigateway"
--aws-access-key
--aws-secret-key
--aws-session-token
, , , : API Gatewayの設定
: Cognitoで取得したIDトークン
, , : AssumeRole後に取得した一時的な認証情報
これにより、AssumeRoleとCognito認証を経由して、API Gatewayを介してLambdaを呼び出すことができます。