API Gateway REST API 사용자가 Amazon Cognito 사용자 풀 그룹의 실행 역할을 사용하여 Lambda를 실행하도록 허용하려면 어떻게 해야 하나요?

3분 분량
0

AWS Lambda 프록시 통합을 지원하는 Amazon API 게이트웨이 REST API에는 Amazon Cognito 사용자 풀 인증 기능이 있습니다. 사용자가 사용자 풀 그룹의 AWS ID 및 액세스 관리 (IAM) 역할을 사용하여 Lambda 함수를 실행하도록 허용하려면 어떻게 해야 하나요?

해결 방법

참고: Amazon Cognito 사용자 풀 외에도 자격 증명 풀을 구성하여 API에 대한 액세스를 승인할 수도 있습니다. 자세한 내용은 역할 기반 액세스 제어를 참조하세요.

Amazon Cognito 역할로 Lambda를 실행하도록 사용자를 설정하기 전에 다음을 설정해야 합니다.

사용자가 Amazon Cognito 권한으로 Lambda를 실행할 수 있도록 허용하려면 다음 단계를 따르세요.

1.    API 게이트웨이 콘솔을 사용하여 Amazon Cognito 사용자 풀을 권한 부여자로 설정합니다. 그런 다음, Amazon Cognito 사용자 풀을 API 메서드의 권한 부여자로 할당합니다. 지침은 REST API를 Amazon Cognito 사용자 풀과 통합을 참조하세요.

2.    AWS Lambda 콘솔을 엽니다.

3.    API의 프록시 리소스로 구성된 Lambda 함수를 선택합니다.

4.    Lambda 함수를 구성하고 다음 코드 스니펫을 추가합니다. 이 코드 스니펫은 이벤트 세부 정보에서 Amazon Cognito 역할을 가져온 다음 역할을 맡습니다.

참고: 이 코드 스니펫을 실행하려면 Lambda IAM 역할에 Amazon CloudWatch Logs에 액세스할 수 있는 권한이 있어야 합니다. 또한 역할에는 assumeRole API 호출이 있어야 assume_role 명령을 실행할 수 있습니다.

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 역할을 가질 수 있습니다. 사용자가 둘 이상의 그룹에 속해 있는 경우, cognito:roles 클레임은 역할 목록을 반환합니다. 사용자 ID 토큰의 cognito:preferred\ _role 클레임은 우선 순위(가장 낮은 우선 순위 값)가 가장 높은 그룹의 IAM 역할을 상속합니다. 자세한 내용은 역할 기반 액세스 제어를 참조하세요.

cognito:referred\ _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 로그를 확인하여 assum_role 명령이 성공했는지 확인할 수 있습니다.

참고: API Gateway Lambda 권한 부여자를 사용하여 API에 대한 액세스를 승인하는 경우 권한 부여자가 검증한 사용자 풀 토큰을 사용하세요. 토큰의 역할을 맡기 전에 토큰을 검증해야 합니다.

관련 정보

Amazon Cognito 사용자 풀을 권한 부여자로 사용하여 REST API에 대한 액세스 제어

Lambda 통합을 통해 API Gateway REST API 구축

AWS Lambda 실행 역할

AWS 공식
AWS 공식업데이트됨 일 년 전