AWS Lambda プロキシ統合の Amazon API Gateway REST API に Amazon Cognito ユーザープール認証があります。ユーザーが自分のユーザープールグループの AWS Identity and Access Management (IAM) ロールを使用して Lambda 関数を実行できるようにするにはどうすればよいですか?
解決方法
注意:Amazon Cognito ユーザープールに加えて、API へのアクセスを承認するように ID プールを設定することもできます。詳細については、ロールベースのアクセス制御を参照してください。
Amazon Cognito ロールを使用して Lambda を実行するようにユーザーを設定する前に、次の設定を必ず行ってください。
ユーザーが自身の Amazon Cognito アクセス許可で Lambda を実行できるようにするには、次の手順に従います。
1. API Gateway コンソールを使用して、Amazon Cognito ユーザープールをオーソライザーとして確立します。次に、Amazon Cognito ユーザープールを API のメソッドの承認者として割り当てます。手順については、「REST API と Amazon Cognito ユーザープールを統合する」を参照してください。
2. AWS Lambda コンソールを開きます。
3. API のプロキシリソースとして設定された Lambda 関数を選択します。
4. Lambda 関数を設定し、次のコードスニペットを追加します。このコードスニペットは、イベントの詳細から Amazon Cognito ロールを取得し、ロールを引き受けます。
注: このコードスニペットを実行するには、Lambda IAM ロールに Amazon CloudWatch Logs へのアクセス許可が必要です。また、assume_role コマンドを実行するには、ロールに AssumeRole API 呼び出しが必要です。
import boto3
client = boto3.client('sts')
def lambda_handler(event, context):
role=event['requestContext']['authorizer']['claims']['cognito:roles']
response = client.assume_role(
RoleArn=role,
RoleSessionName='APIrole'
)
print(response)
response2api = {"statusCode": 200,"headers": { },"body": "Success"}
return response2api
ユーザーは複数の Amazon Cognito ユーザープールグループに属することができ、各グループは異なる IAM ロールを持つことができます。ユーザーが 2 つ以上のグループに属している場合、cognito:roles クレームでロールのリストが返されます。ユーザーの ID トークン内の cognito:preferred_role クレームは、優先度が最も高い (最も低い優先順位値を持つ) グループの IAM ロールを継承します。詳細については、ロールベースのアクセス制御を参照してください。
cognito:preferred_role を取得するには、次のコードスニペットを使用してください。
role = event['requestContext']['authorizer']['claims']['cognito:preferred_role']
ユーザーが自身の Amazon Cognito ロールで Lambda を実行できることを確認するには、次の手順に従います。
1. クライアントアプリケーションを開き、Amazon Cognito ユーザープールのユーザーとしてログインします。
2. ログイン後に受け取った ID トークンを使用して API を呼び出します。
注: 返されたトークンの id_token 値を使用してください。
3. Amazon Cognito ユーザープールのロールで定義したリソースと同じリソースにアクセスできることを確認します。
4. 必要に応じて、CloudWatch Logs を確認し assume_role コマンドが成功したことを確認します。
注: API Gateway Lambda オーソライザーを使用して API へのアクセスを承認する場合は、オーソライザーによって検証されたユーザープールトークンを使用します。トークンのロールを引き受ける前に、トークンを検証する必要があります。
関連情報
Amazon Cognito ユーザープールを承認者として使用して REST API へのアクセスを制御する
Lambda 統合を使用した API Gateway REST API の構築
AWS Lambda 実行ロール