Lambda용 Amazon MQ 이벤트 소스 구성 - AWS Lambda

Lambda용 Amazon MQ 이벤트 소스 구성

네트워크 보안 구성

이벤트 소스 매핑을 통해 Lambda에 Amazon MQ에 대한 전체 액세스 권한을 부여하려면 브로커가 퍼블릭 엔드포인트(퍼블릭 IP 주소)를 사용하거나 브로커를 생성한 Amazon VPC에 대한 액세스 권한을 제공해야 합니다.

Lambda에서 Amazon MQ를 사용하는 경우 Amazon VPC의 리소스에 대한 액세스 권한을 제공하는 AWS PrivateLink VPC 엔드포인트를 생성합니다.

참고

이벤트 폴러에 기본(온디맨드) 모드를 사용하는 이벤트 소스 매핑을 포함하는 함수에 대해 AWS PrivateLink VPC 엔드포인트가 필요합니다. 이벤트 소스 매핑에서 프로비저닝된 모드를 사용하는 경우 AWS PrivateLink VPC 엔드포인트를 구성하지 않아도 됩니다.

다음 리소스에 대한 액세스를 제공하는 엔드포인트를 생성합니다.

  • Lambda - Lambda 서비스 위탁자에 대한 엔드포인트를 생성합니다.

  • AWS STS - 서비스 위탁자가 사용자를 대신하여 역할을 맡을 수 있도록 AWS STS에 대한 엔드포인트를 생성합니다.

  • Secrets Manager - 브로커에서 Secrets Manager를 사용하여 자격 증명을 저장하는 경우 Secrets Manager를 위한 엔드포인트를 생성합니다.

또는 Amazon VPC의 각 퍼블릭 서브넷에 NAT 게이트웨이를 구성합니다. 자세한 내용은 VPC 연결 Lambda 함수에 대한 인터넷 액세스 활성화 단원을 참조하십시오.

Amazon MQ에 대한 이벤트 소스 매핑을 생성하면 Lambda는 Amazon VPC에 대해 구성된 서브넷과 보안 그룹을 위한 탄력적 네트워크 인터페이스(ENI)가 이미 존재하는지 확인합니다. Lambda가 기존 ENI를 찾으면 이를 재사용하려고 시도합니다. 그렇지 않으면 Lambda가 이벤트 소스에 연결하고 함수를 간접 호출하기 위해 새 ENI를 생성합니다.

참고

Lambda 함수는 항상 Lambda 서비스가 소유한 VPC 내에서 실행됩니다. 함수의 VPC 구성은 이벤트 소스 매핑에 영향을 미치지 않습니다. 이벤트 소스의 네트워킹 구성에 따라 Lambda가 이벤트 소스에 연결하는 방식이 결정됩니다.

브로커가 포함된 Amazon VPC에 대한 보안 그룹을 구성합니다. 기본적으로 Amazon MQ는 61617(ActiveMQ용 Amazon MQ) 및 5671(RabbitMQ용 Amazon MQ) 포트를 사용합니다.

  • 인바운드 규칙 – 이벤트 소스와 연결된 보안 그룹에 대한 기본 브로커 포트의 모든 트래픽을 허용합니다.

  • 아웃바운드 규칙 – 모든 대상에 대해 443 포트의 모든 트래픽을 허용합니다. 이벤트 소스와 연결된 보안 그룹에 대한 기본 브로커 포트의 모든 트래픽을 허용합니다.

  • Amazon VPC 엔드포인트 인바운드 규칙 - Amazon VPC 엔드포인트를 사용하는 경우 Amazon VPC 엔드포인트와 연결된 보안 그룹이 브로커 보안 그룹에서 443 포트의 인바운드 트래픽을 허용해야 합니다.

브로커가 인증을 사용하는 경우 Secrets Manager 엔드포인트에 대한 엔드포인트 정책을 제한할 수도 있습니다. Secrets Manager API를 호출하기 위해 Lambda는 Lambda 서비스 보안 주체가 아닌 함수 역할을 사용합니다.

예 VPC 엔드포인트 정책 — Secrets Manager 엔드포인트
{ "Statement": [ { "Action": "secretsmanager:GetSecretValue", "Effect": "Allow", "Principal": { "AWS": [ "arn:aws::iam::123456789012:role/my-role" ] }, "Resource": "arn:aws::secretsmanager:us-west-2:123456789012:secret:my-secret" } ] }

Amazon VPC 엔드포인트를 사용하는 경우 AWS에서는 엔드포인트의 탄력적 네트워크 인터페이스(ENI)를 사용하여 함수를 간접 호출하도록 API 직접 호출을 라우팅합니다. Lambda 서비스 위탁자는 해당 ENI를 사용하는 모든 역할과 함수에서 lambda:InvokeFunction을 직접 호출해야 합니다.

기본적으로 Amazon VPC 엔드포인트에는 리소스에 대한 광범위한 액세스를 허용하는 개방형 IAM 정책이 있습니다. 모범 사례는 해당 엔드포인트를 사용하여 필요한 작업을 수행하도록 이러한 정책을 제한하는 것입니다. 이벤트 소스 매핑이 Lambda 함수를 간접 호출할 수 있도록 하려면 VPC 엔드포인트 정책에서 Lambda 서비스 위탁자가 sts:AssumeRolelambda:InvokeFunction을 직접 호출할 수 있도록 허용해야 합니다. 조직 내에서 발생하는 API 직접 호출만 허용하도록 VPC 엔드포인트 정책을 제한하면 이벤트 소스 매핑이 제대로 작동하지 않으므로 이 정책에는 "Resource": "*"가 필요합니다.

다음 예제 VPC 엔드포인트 정책은 AWS STS 및 Lambda 엔드포인트에 대해 Lambda 서비스 보안 주체에 필요한 액세스 권한을 부여하는 방법을 안내합니다.

예 VPC 엔드포인트 정책 - AWS STS 엔드포인트
{ "Statement": [ { "Action": "sts:AssumeRole", "Effect": "Allow", "Principal": { "Service": [ "lambda.amazonaws.com" ] }, "Resource": "*" } ] }
예 VPC 엔드포인트 정책 - Lambda 엔드포인트
{ "Statement": [ { "Action": "lambda:InvokeFunction", "Effect": "Allow", "Principal": { "Service": [ "lambda.amazonaws.com" ] }, "Resource": "*" } ] }

이벤트 소스 매핑 생성

이벤트 소스 매핑을 생성하여 Lambda가 Amazon MQ 브로커의 레코드를 Lambda 함수로 전송하도록 지시합니다. 여러 이벤트 소스 매핑을 생성하여 여러 함수로 동일한 데이터를 처리하거나, 단일 함수로 여러 소스의 항목을 처리할 수 있습니다.

Amazon MQ에서 읽도록 함수를 구성하려면 필요한 권한을 추가하고 Lambda 콘솔에서 MQ 트리거를 생성합니다.

Amazon MQ 브로커에서 레코드를 읽으려면, Lambda 함수에는 다음 권한이 필요합니다. 함수 실행 역할에 권한 문을 추가함으로써 Amazon MQ 브로커 및 기본 리소스와 상호 작용할 수 있는 권한을 Lambda에 부여합니다.

참고

암호화된 고객 관리형 키를 사용하는 경우 kms:Decrypt 권한도 추가합니다.

권한 추가 및 트리거 생성
  1. Lambda 콘솔의 함수 페이지를 엽니다.

  2. 함수의 이름을 선택합니다.

  3. 구성(Configuration) 탭을 선택한 다음, 권한(Permissions)을 선택합니다.

  4. 역할 이름에서 실행 역할에 대한 링크를 선택합니다. 이 링크를 클릭하면 IAM 콘솔에서 역할이 열립니다.

    실행 역할 링크
  5. 권한 추가를 선택하고 인라인 정책 생성을 선택합니다.

    IAM 콘솔에서 인라인 정책 생성
  6. 정책 편집기 섹션에서 JSON을 선택합니다. 다음 정책을 입력합니다. 함수가 Amazon MQ 브로커에서 읽으려면 이러한 권한이 필요합니다.

    { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "mq:DescribeBroker", "secretsmanager:GetSecretValue", "ec2:CreateNetworkInterface", "ec2:DeleteNetworkInterface", "ec2:DescribeNetworkInterfaces", "ec2:DescribeSecurityGroups", "ec2:DescribeSubnets", "ec2:DescribeVpcs", "logs:CreateLogGroup", "logs:CreateLogStream", "logs:PutLogEvents" ], "Resource": "*" } ] }
    참고

    암호화된 고객 관리형 키를 사용하는 경우 kms:Decrypt 권한도 추가해야 합니다.

  7. Next(다음)를 선택합니다. 정책 이름을 입력한 후 정책 생성을 선택합니다.

  8. Lambda 콘솔에서 함수로 돌아갑니다. 함수 개요(Function overview)에서 트리거 추가(Add trigger)를 선택합니다.

    Lambda 콘솔의 함수 개요 섹션
  9. MQ 트리거 유형을 선택합니다.

  10. 필요한 옵션을 구성한 다음 추가를 선택합니다.

Lambda는 Amazon MQ 이벤트 소스에 대해 다음과 같은 옵션을 지원합니다.

  • 브로커 - Amazon MQ 브로커를 선택합니다.

  • 배치 크기(Batch size) - 단일 배치에서 검색할 최대 메시지 수를 설정합니다.

  • 대기열 이름(Queue name) - 사용할 Amazon MQ 대기열을 입력합니다.

  • 소스 액세스 구성 - 가상 호스트 정보 및 브로커 자격 증명을 저장하는 Secrets Manager 암호를 입력합니다.

  • 트리거 활성화 - 레코드 처리를 중지하려면 트리거를 비활성화합니다.

트리거를 활성화하거나 비활성화(또는 삭제)하려면 디자이너에서 MQ 트리거를 선택합니다. 트리거를 재구성하려면 이벤트 소스 매핑 API 작업을 사용합니다.