View a markdown version of this page

네트워킹 - AWS Lambda

네트워킹

런타임에 네트워크 커넥터 리소스를 AWS Lambda MicroVM과 연결하여 MicroVM에 대한 네트워크 액세스를 구성합니다. 네트워크 커넥터는 run-microvm 직접 호출 시 지정되며 MicroVM 실행 중에는 변경할 수 없습니다.

개요

각 MicroVM에는 독립적인 수신(인바운드) 및 송신(아웃바운드) 네트워크 구성이 있을 수 있습니다.

  • 수신 네트워크 커넥터는 인바운드 연결을 활성화합니다. 클라이언트는 서비스 관리형 HTTPS 엔드포인트에 연결되고, Lambda는 MicroVM 내에서 구성하는 포트로 트래픽을 전달합니다. 수신 커넥터는 AWS 관리형이므로 MicroVM을 실행할 때 ARN으로 참조합니다.

  • 송신 네트워크 커넥터는 아웃바운드 트래픽을 활성화합니다. 기본적으로 MicroVM은 퍼블릭 인터넷에 액세스할 수 있습니다. 대신 고객 관리형 VPC 송신 커넥터를 생성하여 VPC를 통해 아웃바운드 트래픽을 라우팅할 수 있습니다.

하나의 커넥터를 여러 MicroVM에서 재사용할 수 있습니다. 이것이 의도된 사용 패턴입니다.

인바운드 연결

run-microvm을 직접적으로 호출할 때 할당되는 고유한 HTTPS 엔드포인트 URL을 통해 각 Lambda MicroVM에 연결할 수 있습니다. 클라이언트는 HTTPS를 통해 이 엔드포인트로 요청을 보냅니다. Lambda는 각 요청을 MicroVM 내부의 포트로 라우팅하고, 애플리케이션은 해당 포트에서 요청을 수신합니다.

기본적으로 엔드포인트에서 수신된 요청은 MicroVM 내의 포트 8080으로 라우팅됩니다. 다른 포트로 라우팅하려면 포트 라우팅 섹션을 참조하세요.

인바운드 엔드포인트에서는 다음 프로토콜이 지원됩니다.

  • HTTP/1.1

  • HTTP/2

  • WebSocket

  • gRPC

  • 서버 전송 이벤트(SSE)

참고

클라이언트와 MicroVM 엔드포인트 간의 트래픽은 항상 TLS로 암호화됩니다. 애플리케이션은 내부적으로 HTTP 또는 HTTPS를 통해 요청을 처리할 수 있습니다.

포트 라우팅

Lambda는 다음 우선순위에 따라 MicroVM 내의 대상 포트를 선택합니다.

  1. X-aws-proxy-port 헤더 - 표준 HTTP 요청의 경우 대상 포트 번호와 함께 이 헤더를 포함합니다.

  2. WebSocket 하위 프로토콜 - WebSocket 클라이언트가 사용자 지정 헤더를 설정할 수 없는 경우 대상 포트를 lambda-microvms.port.N이라는 하위 프로토콜로 지정합니다. 여기서 N은 포트 번호입니다. WebSocket 연결을 열 때 하위 프로토콜을 제공합니다. 문제 해결 예는 프로토콜을(를) 참조하세요.

  3. 기본값(8080) - 둘 다 지정되지 않은 경우 포트 8080으로 요청이 라우팅됩니다.

중요

대상 포트는 인증 토큰에 정의된 allowedPorts 내에 있어야 합니다. 승인되지 않은 포트에 대한 요청은 403 금지됨 응답을 수신합니다.

인증

MicroVM 엔드포인트에 대한 모든 요청에는 X-aws-proxy-auth 헤더에 유효한 인증 토큰이 필요합니다. create-microvm-auth-token을 사용하여 토큰을 생성합니다. 각 토큰은 다음 범위의 암호화된 JWE(JSON Web Encryption) 문자열입니다.

  • 특정 MicroVM(ID로 식별됨)

  • 허용된 포트 세트(단일 포트, 범위 또는 모든 포트)

  • 만료 시간(토큰 생성 시 구성됨)

다음 예제에서는 토큰을 생성하고 이를 사용하여 인증된 요청을 보냅니다.

aws lambda-microvms create-microvm-auth-token \ --microvm-identifier microvm-id \ --expiration-in-minutes 30 \ --allowed-ports '[{"port":8080}]'
curl 'https://microvm-endpoint' \ -H 'X-aws-proxy-auth: TOKEN' \ -H 'X-aws-proxy-port: 8080'

WebSocket 연결을 포함하여 토큰 생성 및 MicroVM 연결에 대한 전체 단계별 안내는 MicroVM에 연결 섹션을 참조하세요.

오류 응답

MicroVM 엔드포인트가 요청을 처리하거나 애플리케이션에 전송할 수 없을 때 다음과 같은 HTTP 상태 코드가 반환됩니다. 이러한 응답은 애플리케이션이 아닌 엔드포인트에서 옵니다.

코드 상태 원인 및 해결 방법
400 잘못된 요청 요청 형식, 포트 헤더 또는 WebSocket 하위 프로토콜이 잘못되었습니다. 형식을 확인하세요.
403 금지됨 토큰이 누락되었거나, 만료되었거나, 잘못되었습니다. 또는 요청된 포트가 토큰의 allowedPorts에 없습니다. 새 토큰을 생성하거나 허용된 포트를 사용하세요.
429 요청이 너무 많습니다. 속도 제한을 초과했습니다(계정 수준 또는 MicroVM당). 지수 백오프를 사용하여 재시도하세요.
500 내부 서버 오류 내부 오류가 발생했습니다. 요청을 다시 시도하세요.
502 잘못된 게이트웨이 애플리케이션이 응답하지 않거나 자동 재개가 최대 재시도 횟수 내에 성공하지 못했습니다. 자동 재개을(를) 참조하세요.

요청 헤더

X-aws-proxy-* 헤더 네임스페이스는 Lambda에서 인증 토큰(X-aws-proxy-auth), 대상 포트(X-aws-proxy-port) 등의 요청 메타데이터용으로 예약되어 있습니다. Lambda는 요청을 애플리케이션에 전달하기 전에 X-aws-proxy-* 헤더를 제거합니다.

요청/응답 대역폭

각 Lambda MicroVM에는 크기에 따라 선형으로 규모가 조정되는 요청/응답 대역폭이 있습니다. 이 대역폭은 MicroVM 엔드포인트를 통과하는 모든 트래픽(인바운드 요청 및 아웃바운드 응답 모두)에 적용됩니다.

MicroVM 크기(기준) 최대 대역폭
0.5GB, 0.25 vCPU 1MB/초(8Mbps)
1GB, 0.5 vCPU 2MB/초(16Mbps)
2GB, 1 vCPU 4MB/초(32Mbps)
4GB, 2 vCPU 8MB/초(64Mbps)
8GB, 4 vCPU 16MB/초(128Mbps)

네트워크 포화로 인해 요청 지연 시간이 증가하는 경우 요청 동시성 또는 페이로드 크기를 줄이거나 더 큰 MicroVM 크기를 선택하여 사용 가능한 대역폭을 늘리세요.

HTTP/2 지원

Lambda MicroVM은 인바운드 엔드포인트에서 HTTP/2를 지원합니다. Lambda는 TLS 핸드셰이크 중 ALPN(Application-Layer Protocol Negotiation)을 통해 프로토콜을 협상하며, HTTP/2를 우선적으로 사용하고 HTTP/1.1로 폴백합니다. HTTP/2 지원 클라이언트는 이를 자동으로 사용합니다.

엔드포인트와 MicroVM 내의 애플리케이션 간에 HTTP/2를 사용하려면

  • 애플리케이션에서 TLS 제공 - Lambda는 ALPN을 통해 애플리케이션과 HTTP/2를 협상하여 HTTP/2가 지원되지 않는 경우 HTTP/1.1로 폴백합니다.

  • 애플리케이션에서 일반 텍스트 HTTP 제공 - 애플리케이션 연결에서 HTTP/2를 사용하려면 요청에 X-aws-proxy-force-h2: true 헤더를 포함합니다.

아웃바운드 연결

기본적으로 Lambda MicroVM은 송신 경로를 통해 퍼블릭 인터넷에 액세스할 수 있습니다. RDS, ElastiCache, 내부 API, Direct Connect 또는 VPN을 통해 연결된 온프레미스 시스템 등 프라이빗 VPC의 리소스와 MicroVM을 연결하려면 VPC 구성을 사용하여 Lambda 네트워크 커넥터를 생성합니다.

VPC 송신을 사용하는 경우 아웃바운드 트래픽은 VPC의 트래픽을 관리하는 보안 그룹 규칙과 네트워크 ACL의 적용을 받습니다.

송신 네트워크 커넥터 작업

송신 네트워크 커넥터는 VPC를 통해 MicroVM의 아웃바운드 트래픽을 라우팅합니다. 커넥터를 한 번 생성한 다음 run-microvm 명령을 통해 MicroVM을 시작할 때 ARN으로 해당 커넥터를 참조합니다.

사전 조건

네트워크 커넥터를 생성하기 전에 Lambda가 VPC에서 탄력적 네트워크 인터페이스(ENI)를 생성할 수 있도록 허용하는 IAM 역할이 필요합니다. 역할에는 다음 권한이 필요합니다.

{ "Version": "2012-10-17", "Statement": [ { "Sid": "CreateENI", "Effect": "Allow", "Action": "ec2:CreateNetworkInterface", "Resource": [ "arn:aws:ec2:*:*:network-interface/*", "arn:aws:ec2:*:*:subnet/*", "arn:aws:ec2:*:*:security-group/*" ] }, { "Sid": "TagENI", "Effect": "Allow", "Action": "ec2:CreateTags", "Resource": "arn:aws:ec2:*:*:network-interface/*", "Condition": { "StringEquals": { "ec2:ManagedResourceOperator": "network-connectors.lambda.amazonaws.com" } } } ] }

네트워크 커넥터 생성

VPC 서브넷, 보안 그룹 및 네트워크 프로토콜(IPv4 또는 DualStack)을 지정하여 커넥터를 생성합니다.

aws lambda-core create-network-connector \ --name my-connector \ --configuration '{ "VpcEgressConfiguration": { "SubnetIds": ["subnet-xxx"], "SecurityGroupIds": ["sg-xxx"], "NetworkProtocol": "IPv4", "AssociatedComputeResourceTypes": ["MicroVm"] } }' \ --operator-role arn:aws:iam::123456789012:role/NetworkConnectorOperatorRole

네트워크 커넥터 상태

run-microvm에서 커넥터를 참조하려면 커넥터가 ACTIVE 상태여야 합니다.

상태 설명
PENDING 커넥터가 생성되고 있습니다(기본 ENI가 프로비저닝되고 있음).
ACTIVE 커넥터를 사용할 준비가 되었습니다.
INACTIVE 커넥터가 일시적으로 비활성 상태입니다.
FAILED 프로비저닝 또는 업데이트에 실패했습니다. StateReason을 검토합니다.
DELETING 커넥터가 삭제되고 ENI가 정리되고 있습니다.
DELETE_FAILED 삭제에 실패했습니다.

네트워크 커넥터를 사용하여 MicroVM 실행

MicroVM을 실행할 때 커넥터 ARN을 참조합니다.

aws lambda-microvms run-microvm \ --image-identifier arn:aws:lambda:us-east-1:123456789012:microvm-image:my-microvm-image \ --egress-network-connectors connector-arn \ --idle-policy '{"maxIdleDurationSeconds":900,"suspendedDurationSeconds":1800,"autoResumeEnabled":false}'
참고

커넥터를 업데이트하거나 삭제하기 전에 커넥터를 사용하는 모든 MicroVM이 종료되었는지 확인합니다. 현재 사용 중인 커넥터를 수정하면 실행 중인 MicroVM에 네트워크 연결 문제가 발생할 수 있습니다.

AWS PrivateLink를 VPC 리소스와 Lambda MicroVM 간에 AWS 네트워크를 통해 프라이빗 연결로 사용할 수 있으며, 퍼블릭 인터넷을 거치지 않아도 됩니다. MicroVM은 원하는 트래픽 대상에 따라 두 가지 VPC 엔드포인트를 지원합니다.

  • MicroVM 관리 API(이미지 생성, 실행, 일시 중지, 종료) – 기존 Lambda VPC 엔드포인트(com.amazonaws.region.lambda)를 사용합니다.

  • MicroVM에 대한 연결(실행 중인 애플리케이션으로의 HTTPS 트래픽) - 별도의 엔드포인트(com.amazonaws.region.lambda-microvm)를 사용합니다.

Lambda MicroVM은 Lambda(com.amazonaws.region.lambda)와 동일한 VPC 엔드포인트를 공유합니다. 자세한 내용은 Lambda에 대한 인터페이스 엔드포인트 생성을 참조하세요.

인터페이스 엔드포인트를 사용할 수 있는 사람이 누구인지, 그러한 사용자가 어느 Lambda MicroVM API 작업을 수행할 수 있는지 제어하려면 엔드포인트 정책을 연결하세요. 이 정책이 작업을 수행할 수 있는 보안 주체, 해당 보안 주체가 수행할 수 있는 작업 및 작업을 수행할 수 있는 리소스를 지정합니다. Lambda MicroVM 작업은 lambda: IAM 작업 접두사를 사용합니다.

자세한 내용은 Amazon VPC 사용 설명서의 VPC 엔드포인트를 통해 서비스에 대한 액세스 제어를 참조하세요.

다음 정책 예시는 사용자 MyUser가 엔드포인트를 통해 MicroVM 이미지를 가져오고 나열하도록 허용합니다.

{ "Statement": [ { "Principal": { "AWS": "arn:aws:iam::111122223333:user/MyUser" }, "Effect": "Allow", "Action": [ "lambda:ListMicrovmImages", "lambda:GetMicrovmImage" ], "Resource": "*" } ] }

실행 중인 MicroVM에 대한 HTTPS 트래픽을 프라이빗으로 유지하려면 com.amazonaws.region.lambda-microvm 서비스에 대해 인터페이스 엔드포인트를 생성하세요. 이 엔드포인트가 MicroVM 엔드포인트 URL(예: abc123def456.lambda-microvm.us-east-1.on.aws)에 대한 연결을 다룹니다.

인터페이스 엔드포인트 속성에 대해 자세히 알아보려면 Amazon VPC 설명서에서 인터페이스 엔드포인트 가이드를 참조하세요.

MicroVM 연결을 위해 인터페이스 엔드포인트를 생성하는 방법(콘솔)

  1. Amazon VPC 콘솔의 엔드포인트 페이지를 엽니다.

  2. 엔드포인트 생성을 선택합니다.

  3. 서비스 카테고리에서 AWS 서비스가 선택되어 있는지 확인합니다.

  4. 서비스 이름에서 com.amazonaws.region.lambda-microvm를 선택합니다. 유형이 인터페이스인지 확인합니다.

  5. VPC와 서브넷을 선택합니다.

  6. 인터페이스 엔드포인트에 대해 프라이빗 DNS를 활성화하려면 DNS 이름 활성화 확인란을 선택합니다(권장). 이렇게 하면 퍼블릭 MicroVM 엔드포인트 호스트 이름을 사용하는 요청이 자동으로 인터페이스 엔드포인트에 대해 확인되고, 클라이언트 측 변경이 필요하지 않습니다.

  7. 보안 그룹에서 하나 이상의 보안 그룹을 선택합니다. 보안 그룹이 포트 443에서 엔드포인트 네트워크 인터페이스로 이동하는 아웃바운드 TCP 트래픽을 허용해야 합니다.

  8. 엔드포인트 생성을 선택합니다.

프라이빗 DNS 옵션을 사용하려면 VPC의 enableDnsHostnames 및 enableDnsSupport 속성을 설정해야 합니다. 자세한 내용은 Amazon VPC 사용 설명서의 VPC에 대한 DNS 지원 보기 및 업데이트를 참조하세요.

MicroVM 연결을 위해 인터페이스 엔드포인트를 생성하는 방법(AWS CLI)

aws ec2 create-vpc-endpoint \ --vpc-id vpc-ec43eb89 \ --vpc-endpoint-type Interface \ --service-name com.amazonaws.us-east-1.lambda-microvm \ --subnet-id subnet-abababab \ --security-group-id sg-1a2b3c4d \ --private-dns-enabled

엔드포인트를 사용할 수 있고 프라이빗 DNS가 유효한지 확인하는 방법:

aws ec2 describe-vpc-endpoints \ --vpc-endpoint-ids vpce-1a2b3c4d5e6f7g8h9 \ --query 'VpcEndpoints[0].{State:State,PrivateDns:PrivateDnsEnabled,Dns:DnsEntries[*].DnsName}'

프라이빗 DNS가 활성화된 경우 – 엔드포인트가 VPC 내 *.lambda-microvm.region.on.aws에 대해 DNS 확인을 관리합니다. 기존 MicroVM 엔드포인트 호스트 이름(예: abc123def456.lambda-microvm.us-east-1.on.aws)는 엔드포인트 네트워크 인터페이스의 프라이빗 IP 주소에 대해 확인됩니다. 클라이언트 변경이 필요하지 않습니다.

프라이빗 DNS가 비활성화된 경우 – Amazon VPC가 엔드포인트의 엔드포인트별 DNS 이름을 vpce-id-hash.lambda-microvm.region.vpce.amazonaws.com 형식으로 생성합니다. 이 엔드포인트를 통해 트래픽을 라우팅하면서, 동시에 올바른 MicroVM에도 연결되도록 하려면 원본 MicroVM 호스트 이름을 두 곳에 보존해야 합니다.

  • TLS 서버 이름 표시(SNI) – TLS 핸드셰이크가 이 값을 사용해 연결이 어느 MicroVM에 대한 것인지 식별합니다.

  • HTTP 호스트 헤더 – 프록시가 이 값을 사용해 요청을 올바른 MicroVM으로 라우팅합니다.

둘 중 한 개의 값이 MicroVM 호스트 이름이 아니라 VPC 엔드포인트 호스트 이름으로 설정되면 연결을 올바른 MicroVM으로 라우팅할 수 없습니다.

예: 엔드포인트별 DNS 이름을 통해 연결

다음 예시에서는 curl과 --connect-to 플래그를 사용해 TCP 연결을 VPC 엔드포인트로 리디렉션하면서, URL, SNI 및 호스트 헤더에서 MicroVM 호스트 이름을 유지합니다.

ENDPOINT_HOST=abc123def456.lambda-microvm.us-east-1.on.aws VPCE_HOST=vpce-0a1b2c3d4e5f67890-a1b2c3d4.lambda-microvm.us-east-1.vpce.amazonaws.com curl --connect-to "$ENDPOINT_HOST:443:$VPCE_HOST:443" \ -H "x-aws-proxy-auth: $MICROVM_AUTH_TOKEN" \ -H "x-aws-proxy-port: 8080" \ "https://$ENDPOINT_HOST/"

--connect-to 플래그가 curl에 VPC 엔드포인트 주소에 대해 TCP 연결을 열도록 지시하고, URL, TLS SNI 및 호스트 헤더는 MicroVM 호스트 이름에 대해 설정된 채 유지됩니다.

자세한 내용은 Amazon VPC 사용 설명서의 인터페이스 엔드포인트를 통해 서비스 액세스를 참조하세요.

어느 MicroVM에 lambda-microvm VPC 엔드포인트를 통해 연결할 수 있는지 제어하려면 엔드포인트 정책을 연결하면 됩니다. lambda-microvm 서비스의 엔드포인트 정책을 사용하면 특정 계정 또는 조직으로 연결 범위를 지정할 수 있습니다. 기본적으로 엔드포인트는 모든 AWS 계정의 MicroVM에 대한 연결을 허용합니다. (참고: 연결을 설정하는 클라이언트에 유효한 MicroVM 인증 토큰이 있어야 액세스 권한이 부여됩니다.)

기본적으로 VPC 엔드포인트에는 모든 트래픽을 허용하는 전체 액세스 정책이 있습니다. 기본 정책을 사용자 지정 정책으로 바꾸면 Lambda MicroVM이 엔드포인트를 통해 설정되는 모든 연결에서 lambda:ConnectMicrovm 작업에 대해 해당 정책을 평가합니다. 정책이 MicroVM으로의 연결을 허용하지 않는 경우, 연결이 거부되고 HTTP 403 금지됨 응답이 반환됩니다. lambda:ConnectMicrovm을 부여하지 않는 정책은 엔드포인트를 통한 모든 연결을 거부합니다.

참고

lambda:ConnectMicrovm 작업은 인터페이스 엔드포인트를 통한 MicroVM 엔드포인트에 대한 연결에 권한을 부여합니다. 이 작업은 Lambda API 작업이 아니고 IAM ID 기반 또는 리소스 기반 정책에서는 사용할 수 없습니다. VPC 엔드포인트 정책에서만 유효합니다.

보안 주체 및 리소스

MicroVM 엔드포인트에 대한 연결은 AWS 서명 버전 4가 아니라 MicroVM 인증 토큰을 사용해 인증됩니다. 그래서 이 연결에 연계된 IAM 보안 주체가 없습니다. 대신, Lambda MicroVM은 익명 보안 주체를 사용해 엔드포인트 정책을 평가합니다. 이는 다음을 의미합니다.

  • Principal이 "*"여야 합니다. 특정 보안 주체를 지정하는 정책은 아무것과도 일치하지 않고 모든 연결을 거부합니다.

  • 요청자 ID(예: aws:PrincipalArn, aws:PrincipalOrgID, aws:userid)에 종속되는 조건 키가 채워지지 않고 일치하지 않습니다.

  • Resource도 "*"여야 합니다. Lambda MicroVM은 엔드포인트 평가의 범위를 개별 MicroVM 리소스 ARN으로 지정하지 않습니다. 엔드포인트가 어느 MicroVM에 연결할 수 있는지 제한하려면 Resource 요소가 아니라 aws:ResourceAccount 조건 키를 사용하세요.

지원되는 조건 키

조건 키 설명
aws:ResourceAccount 연결하려 하는 MicroVM을 소유한 AWS 계정입니다.
aws:ResourceOrgID MicroVM을 소유하는 계정의 AWS Organizations 조직 ID입니다.
aws:SourceVpce 연결이 통과한 인터페이스 엔드포인트의 ID입니다.
aws:SourceVpc 연결의 출처인 VPC의 ID입니다.
aws:VpcSourceIp 연결을 설정한 클라이언트의 프라이빗 IP 주소입니다.

예: 자체 계정의 MicroVM으로만 연결 허용

다음 엔드포인트 정책은 계정 111122223333이 소유한 MicroVM에 대해서만 엔드포인트를 통한 연결을 허용합니다. 다른 계정이 소유한 MicroVM으로의 연결은 거부됩니다.

{ "Statement": [ { "Principal": "*", "Effect": "Allow", "Action": "lambda:ConnectMicrovm", "Resource": "*", "Condition": { "StringEquals": { "aws:ResourceAccount": "111122223333" } } } ] }