AWS re:Postを使用することにより、以下に同意したことになります 利用規約

Amazon Cognito ユーザープールグループの実行ロールを使用して API Gateway REST API ユーザーが Lambda を実行できるようにするにはどうすればよいですか?

所要時間2分
0

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 実行ロール

コメントはありません