API Gateway REST API ユーザーが、Amazon Cognito ユーザープールグループの実行ロールを使用して Lambda を実行することを許可する方法を教えてください。

所要時間2分
0

AWS Lambda プロキシ統合を使用した Amazon API ゲートウェイ REST API に Amazon Cognito ユーザープール認証があります。ユーザーが、ユーザープールグループの AWS Identity and Access Management (IAM) ロールを使用して、Lambda 関数の実行することを許可する方法を教えてください。

解決策

注:Amazon Cognito ユーザープールの他にも、ID プールを API へのアクセスを許可する設定が可能です。詳細については、「ロールベースアクセスコントロール」を参照してください。

ユーザーの 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 ログにアクセスするためのアクセス権限が必要です。また、このロールには、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 ログをチェックして、assume_role コマンドが成功したことを確認します。

**注: **API Gateway Lambda オーソライザーを使用して API へのアクセスを認証する場合は、オーソライザーによって検証されたユーザープールトークンを使用してください。トークンのロールを引き受ける前に、トークンを検証する必要があります。

関連情報

Amazon Cognito ユーザープールをオーソライザーとして使用して REST API へのアクセスを制御する

Lambda 統合で API Gateway REST API を構築する

AWS Lambda 実行ロール

コメントはありません

関連するコンテンツ