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

3분 분량
0

AWS Lambda 프록시 통합을 사용하는 Amazon API Gateway 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 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 역할이 포함될 수 있습니다. 사용자가 둘 이상의 그룹에 속하는 경우 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 실행 역할

AWS 공식
AWS 공식업데이트됨 4달 전