소스 함수 ARN을 사용하여 함수 액세스 동작 제어 - AWS Lambda

소스 함수 ARN을 사용하여 함수 액세스 동작 제어

Lambda 함수 코드가 다른 AWS 서비스에 API 요청을 전송하는 일은 일반적인 작업입니다. 이러한 요청을 수행하기 위해 Lambda는 함수의 실행 역할을 가정하여 휘발성 자격 증명 세트를 생성합니다. 이러한 보안 인증 정보는 함수를 호출할 때 환경 변수로 사용할 수 있습니다. AWS SDK로 작업할 때는 코드에서 직접 SDK의 보안 인증 정보를 제공할 필요가 없습니다. 기본적으로 보안 인증 공급자 체인은 사용자가 보안 인증 정보를 설정할 수 있는 각 위치를 순차적으로 확인하고, 일반적으로 환경 변수(AWS_ACCESS_KEY_ID, AWS_SECRET_ACCESS_KEYAWS_SESSION_TOKEN)인 사용 가능한 첫 번째 위치를 선택합니다.

Lambda는 요청이 실행 환경 내에서 오는 AWS API 요청인 경우 소스 함수 ARN을 보안 인증 컨텍스트에 삽입합니다. 또한 Lambda는 실행 환경 외부에서 Lambda가 사용자를 대신하여 실행하는 다음 AWS API 요청의 소스 함수 ARN를 주입합니다.

Service 작업 이유
CloudWatch Logs CreateLogGroup, CreateLogStream, PutLogEvents

CloudWatch Logs 로그 그룹에 로그를 저장하려면

X-Ray PutTraceSegments

추적 데이터를 X-Ray로 전송하려면

Amazon EFS ClientMount

함수를 Amazon Elastic File System(Amazon EFS) 파일 시스템에 연결하려면

Lambda가 같은 실행 역할을 사용하여 사용자를 대신하여 실행 환경 외부에서 실행하는 다른 AWS API 호출은 소스 함수 ARN를 포함하지 않습니다. 실행 환경 외부에서의 해당 API 호출의 예는 다음과 같습니다.

  • AWS Key Management Service(AWS KMS)을(를) 호출하여 환경 변수를 자동으로 암호화 및 복호화합니다.

  • Amazon Elastic Compute Cloud(Amazon EC2)를 호출하여 VPC 지원 함수에 대해 탄력적 네트워크 인터페이스(ENI)를 생성합니다.

  • Amazon Simple Queue Service(Amazon SQS)와 같은 AWS 서비스에 대한 직접 호출. 이를 통해 이벤트 소스 매핑으로 설정된 이벤트 소스에서 데이터를 읽습니다.

자격 증명 콘텍스트에서 소스 함수 ARN를 사용하여 리소스에 대한 호출이 특정 Lambda 함수의 코드에서 왔는지 여부를 확인할 수 있습니다. 이를 확인하려면 IAM ID 기반 정책 또는 서비스 제어 정책(SCP)lambda:SourceFunctionArn 조건 키를 사용하세요.

참고

리소스 기반 정책의 lambda:SourceFunctionArn 조건 키를 사용할 수 없습니다.

자격 증명 기반 정책 또는 SCP에서 이 조건 키를 사용하여 함수 코드가 다른 AWS 서비스에 수행하는 API 작업에 대한 보안 제어를 구현할 수 있습니다. 여기에는 자격 증명 유출의 원인을 식별하는 데 도움이 되는 몇 가지 주요 보안 애플리케이션이 있습니다.

참고

lambda:SourceFunctionArn 조건 키가 lambda:FunctionArnaws:SourceArn 조건 키와 다릅니다. lambda:FunctionArn 조건 키는 이벤트 소스 매핑에만 적용되고 이벤트 소스가 간접 호출할 수 있는 함수를 정의하는 데 도움이 됩니다. aws:SourceArn 조건 키는 Lambda 함수가 대상 리소스인 정책에만 적용되며 AWS 서비스 및 리소스가 해당 함수를 간접 호출하도록 정의하도록 돕습니다. lambda:SourceFunctionArn 조건 키는 모든 자격 증명 기반 정책 또는 SCP에 적용하여 다른 리소스에 대한 특정 AWS API 호출 권한을 가진 특정 Lambda 함수를 정의할 수 있습니다.

정책에서 lambda:SourceFunctionArn을(를) 사용하려면 ARN 조건 연산자 중 하나를 포함하는 조건으로 포함하십시오. 키 값은 유효한 ARN이어야 합니다.

예를 들어, Lambda 함수 코드가 특정 Amazon S3 버킷을 대상으로 하는 s3:PutObject 호출을 한다고 합시다. 하나의 특정 Lambda 함수만 해당 버킷에 s3:PutObject 액세스하게 허용한다고 합시다. 이 경우 함수의 실행 역할에 다음과 같은 정책이 연결되어 있어야 합니다.

예 Amazon S3 리소스에 대한 특정 Lambda 함수 액세스 권한을 부여하는 정책
{ "Version": "2012-10-17", "Statement": [ { "Sid": "ExampleSourceFunctionArn", "Effect": "Allow", "Action": "s3:PutObject", "Resource": "arn:aws:s3:::lambda_bucket/*", "Condition": { "ArnEquals": { "lambda:SourceFunctionArn": "arn:aws:lambda:us-east-1:123456789012:function:source_lambda" } } } ] }

이 정책은 소스가 ARN arn:aws:lambda:us-east-1:123456789012:function:source_lambda을(를) 사용하는 Lambda 함수인 경우만 s3:PutObject 액세스를 허용합니다. 이 정책은 다른 호출 자격 증명에 대한 s3:PutObject 액세스를 허용하지 않습니다. 이것은 다른 함수 또는 엔티티가 동일한 실행 역할로 s3:PutObject을(를) 호출할 때도 마찬가지입니다.

참고

lambda:SourceFunctionARN 조건 키는 Lambda 함수 버전 또는 함수 별칭을 지원하지 않습니다. 특정 함수 버전 또는 별칭에 ARN을 사용하는 경우 함수는 지정한 작업을 수행할 권한이 없습니다. 버전 또는 별칭 접미사 없이 함수에 정규화되지 않은 ARN을 사용해야 합니다.

SCP에서도 lambda:SourceFunctionArn을 사용할 수 있습니다. 예를 들어 버킷에 대한 액세스를 단일 Lambda 함수의 코드 또는 특정 Amazon Virtual Private Cloud(VPC)의 호출로 제한하려고 한다고 가정해 보겠습니다. 다음 SCP에서 이 방법을 보여줍니다.

예 특정 조건에서 Amazon S3 대한 액세스를 거부하는 정책
{ "Version": "2012-10-17", "Statement": [ { "Action": [ "s3:*" ], "Resource": "arn:aws:s3:::lambda_bucket/*", "Effect": "Deny", "Condition": { "StringNotEqualsIfExists": { "aws:SourceVpc": [ "vpc-12345678" ] } } }, { "Action": [ "s3:*" ], "Resource": "arn:aws:s3:::lambda_bucket/*", "Effect": "Deny", "Condition": { "ArnNotEqualsIfExists": { "lambda:SourceFunctionArn": "arn:aws:lambda:us-east-1:123456789012:function:source_lambda" } } } ] }

이 정책은 ARN arn:aws:lambda:*:123456789012:function:source_lambda을(를) 사용하는 특정 Lambda 함수에서 오지 않는 한 또는 지정된 VPC에서 오지 않는 한 모든 S3 작업을 거부합니다. StringNotEqualsIfExists 연산자는 aws:SourceVpc 키가 요청에 있는 경우에만 이 조건을 처리하도록 IAM에 지시합니다. 마찬가지로 IAM은 lambda:SourceFunctionArn이(가) 있는 경우에만 ArnNotEqualsIfExists 연산자를 고려합니다.