Lambda 실행 역할 - AWS Lambda

Lambda 실행 역할

Lambda 함수의 실행 역할은 AWS 서비스 및 리소스에 액세스할 수 있는 권한을 함수에 부여하는 AWS Identity and Access Management(IAM) 역할입니다. Amazon CloudWatch에 로그를 전송하고, AWS X-Ray에 추적 데이터를 업로드하는 권한을 가진 실행 역할을 만들 수 있습니다.

함수를 생성할 때 실행 역할을 제공합니다. 함수를 호출하면 Lambda는 이 역할을 맡아 함수에 임시 보안 인증 정보를 해당 함수에 자동으로 제공합니다. 함수 코드에서 sts:AssumeRole을(를) 호출할 필요가 없습니다.

함수의 실행 역할을 보려면

  1. Lambda 콘솔의 함수 페이지를 엽니다.

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

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

  4. 리소스 요약(Resource summary)에서 함수가 액세스할 수 있는 서비스와 리소스를 검토합니다.

  5. 드롭다운 목록에서 서비스를 선택하여 해당 서비스와 관련된 권한을 확인합니다.

언제든지 함수의 실행 역할에서 원한을 추가하거나 제거할 수 있으며, 다른 역할에 사용하도록 함수를 구성할 수 있습니다. 함수가 AWS SDK를 사용하여 호출하는 서비스 및 Lambda가 선택적 기능을 활성화하기 위해 사용하는 서비스에 대해 권한을 추가합니다.

함수에 권한을 추가할 때 코드나 구성도 함께 업데이트하십시오. 그러면 자격 증명이 오래된 함수의 인스턴스 실행이 중지 및 대체됩니다.

IAM 콘솔에서 실행 역할 생성

기본적으로 Lambda는 Lambda 콘솔에서 함수를 생성할 때 최소한의 권한으로 실행 역할을 생성합니다. IAM 콘솔에서 실행 역할을 생성할 수도 있습니다.

IAM 콘솔에서 실행 역할을 생성하려면

  1. IAM 콘솔에서 역할(Roles) 페이지를 엽니다.

  2. 역할 생성(Create role)을 선택합니다.

  3. 사용 사례에서 Lambda를 선택합니다.

  4. 다음(Next)을 선택합니다.

  5. AWS 관리형 정책 AWSLambdaBasicExecutionRoleAWSXRayDaemonWriteAccess를 선택합니다.

  6. 다음(Next)을 선택합니다.

  7. Role name을 입력하고 Create role을 선택합니다.

자세한 지침은 IAM 사용 설명서AWS 서비스에 대한 역할 생성(콘솔)을 참조하세요.

Lambda 실행 역할에 최소 권한 액세스 부여

개발 단계 중에 Lambda에 대한 IAM 역할을 처음 생성하는 경우 간혹 필요 이상의 권한을 부여하게 될 수 있습니다. 모범 사례로 프로덕션 환경에 함수를 게시하기 전에 필요한 권한만 포함하도록 정책을 조정하는 것이 가장 좋습니다. 자세한 정보는 IAM 사용 설명서최소 권한 적용을 참조하세요.

IAM Access Analyzer를 사용하면 IAM 실행 역할 정책에 필요한 권한을 식별하는 데 도움이 될 수 있습니다. IAM Access Analyzer는 지정한 날짜 범위에 걸친 AWS CloudTrail 로그를 검토하여 해당 기간 동안 함수가 사용했던 권한만을 포함한 정책 템플릿을 생성합니다. 템플릿을 사용하여 세분화된 권한을 가진 관리형 정책을 생성한 다음 IAM 역할에 연결할 수 있습니다. 이렇게 하면 특정 사용 사례에 따라 역할이 AWS 리소스와 상호 작용하는 데 필요한 권한만 부여할 수 있습니다.

자세한 내용은 IAM 사용 설명서에서 액세스 활동을 기반으로 정책 생성을 참조하세요.

IAM API를 사용한 역할 관리

AWS Command Line Interface(AWS CLI)를 사용하여 실행 역할을 생성하려면 create-role 명령을 사용합니다. 이 명령을 사용할 때는 신뢰 정책인라인을 지정할 수 있습니다. 역할의 신뢰 정책은 지정된 보안 주체에게 역할을 맡을 수 있는 권한을 부여합니다. 다음 예에서는 Lambda 서비스 보안 주체에게 자신의 역할을 맡을 권한을 부여합니다. JSON 문자열의 이스케이프 따옴표 요구 사항은 셸에 따라 다릅니다.

aws iam create-role --role-name lambda-ex --assume-role-policy-document '{"Version": "2012-10-17","Statement": [{ "Effect": "Allow", "Principal": {"Service": "lambda.amazonaws.com"}, "Action": "sts:AssumeRole"}]}'

별도의 JSON 파일을 사용하여 역할에 대한 신뢰 정책을 정의할 수도 있습니다. 다음 예제에서 trust-policy.json은 최신 디렉터리의 파일입니다.

예 trust-policy.json

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": "lambda.amazonaws.com" }, "Action": "sts:AssumeRole" } ] }
aws iam create-role --role-name lambda-ex --assume-role-policy-document file://trust-policy.json

다음 결과가 표시됩니다.

{ "Role": { "Path": "/", "RoleName": "lambda-ex", "RoleId": "AROAQFOXMPL6TZ6ITKWND", "Arn": "arn:aws:iam::123456789012:role/lambda-ex", "CreateDate": "2020-01-17T23:19:12Z", "AssumeRolePolicyDocument": { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": "lambda.amazonaws.com" }, "Action": "sts:AssumeRole" } ] } } }
참고

자신의 함수를 호출하면 Lambda는 자동으로 실행 역할을 맡습니다. 함수 코드에서 수동으로 sts:AssumeRole을(를) 호출하는 것은 피해야 합니다. 사용 사례에서 역할을 맡아야 하는 경우 자신의 역할의 신뢰 정책에, 역할 자체를 신뢰할 수 있는 보안 주체로 포함해야 합니다. 역할 신뢰 정책을 수정하는 방법에 대한 자세한 내용은 IAM 사용 설명서의 역할 신뢰 정책 수정(콘솔)을 참조하세요.

역할에 권한을 추가하려면 attach-policy-to-role 명령을 사용하세요. 먼저 AWSLambdaBasicExecutionRole 관리형 정책을 추가합니다.

aws iam attach-role-policy --role-name lambda-ex --policy-arn arn:aws:iam::aws:policy/service-role/AWSLambdaBasicExecutionRole

임시 보안 자격 증명에 관한 세션 기간

Lambda는 함수와 연결된 실행 역할을 수임하여 함수를 호출하는 동안 환경 변수로 사용할 수 있는 임시 보안 자격 증명을 가져옵니다. Lambda 외부에서 이러한 임시 보안 인증을 사용하는 경우(예: 미리 서명된 Amazon S3 URL 생성) 세션 기간을 제어할 수 없습니다. IAM 최대 세션 기간 설정은 Lambda와 같이 AWS 서비스에서 수임하는 세션에 적용되지 않습니다. 세션 기간을 제어해야 하는 경우 sts:AssumeRole 작업을 사용하세요.

Lambda 기능에 대한 AWS 관리형 정책

다음 AWS 관리형 정책은 Lambda 기능을 사용하는 데 필요한 권한을 제공합니다.

변경 사항 설명 날짜

AWSLambdaMSKExecutionRole – Lambda에서 이 정책에 kafka:DescribeClusterV2 권한을 추가했습니다.

AWSLambdaMSKExecutionRole은 Amazon Managed Streaming for Apache Kafka(Amazon MSK) 클러스터에서 레코드를 읽고 액세스하고, 탄력적 네트워크 인터페이스(ENI)를 관리하고, CloudWatch 로그에 쓸 수 있는 권한을 부여합니다.

2022년 6월 17일

AWSLambdaBasicExecutionRole – Lambda가 이 정책의 변경 사항 추적을 시작했습니다.

AWSLambdaBasicExecutionRole은 CloudWatch에 로그를 업로드할 수 있는 권한을 부여합니다.

2022년 2월 14일

AWSLambdaDynamoDBExecutionRole – Lambda가 이 정책의 변경 사항 추적을 시작했습니다.

AWSLambdaDynamoDBExecutionRole은 Amazon DynamoDB Stream에서 레코드를 읽고 CloudWatch 로그에 쓸 수 있는 권한을 부여합니다.

2022년 2월 14일

AWSLambdaKinesisExecutionRole – Lambda가 이 정책의 변경 사항 추적을 시작했습니다.

AWSLambdaKinesisExecutionRole은 Amazon Kinesis 데이터 스트림에서 이벤트를 읽고 CloudWatch 로그에 쓸 수 있는 권한을 부여합니다.

2022년 2월 14일

AWSLambdaMSKExecutionRole – Lambda가 이 정책의 변경 사항 추적을 시작했습니다.

AWSLambdaMSKExecutionRole은 Amazon Managed Streaming for Apache Kafka(Amazon MSK) 클러스터에서 레코드를 읽고 액세스하고, 탄력적 네트워크 인터페이스(ENI)를 관리하고, CloudWatch 로그에 쓸 수 있는 권한을 부여합니다.

2022년 2월 14일

AWSLambdaSQSQueueExecutionRole – Lambda가 이 정책의 변경 사항 추적을 시작했습니다.

AWSLambdaSQSQueueExecutionRole은 Amazon Simple Queue Service(Amazon SQS) 대기열에서 메시지를 읽고 CloudWatch 로그에 쓸 수 있는 권한을 부여합니다.

2022년 2월 14일

AWSLambdaVPCAccessExecutionRole – Lambda가 이 정책의 변경 사항 추적을 시작했습니다.

AWSLambdaVPCAccessExecutionRole은 Amazon VPC 내에서 ENI를 관리하고 CloudWatch 로그에 쓸 수 있는 권한을 부여합니다.

2022년 2월 14일

AWSXRayDaemonWriteAccess – Lambda가 이 정책의 변경 사항 추적을 시작했습니다.

AWSXRayDaemonWriteAccess는 추적 데이터를 X-Ray에 업로드할 수 있는 권한을 부여합니다.

2022년 2월 14일

CloudWatchLambdaInsightsExecutionRolePolicy – Lambda가 이 정책의 변경 사항 추적을 시작했습니다.

CloudWatchLambdaInsightsExecutionRolePolicy는 CloudWatch Lambda Insights에 런타임 지표를 쓸 수 있는 권한을 부여합니다.

2022년 2월 14일

AmazonS3ObjectLambdaExecutionRolePolicy – Lambda가 이 정책의 변경 사항 추적을 시작했습니다.

AmazonS3ObjectLambdaExecutionRolePolicy는 Amazon Simple Storage Service(Amazon S3) 객체 Lambda와 상호 작용하고 CloudWatch 로그에 쓸 수 있는 권한을 부여합니다.

2022년 2월 14일

일부 기능의 경우 Lambda 콘솔은 고객 관리형 정책의 실행 역할에 누락된 권한을 추가하려고 시도합니다. 이러한 정책은 많아질 수 있습니다. 추가 정책을 만들지 않도록 기능을 활성화하기 전에 실행 역할에 관련된 AWS 관리형 정책을 추가합니다.

이벤트 소스 매핑을 사용하여 함수를 호출할 경우 Lambda는 실행 역할을 사용해 이벤트 데이터를 읽습니다. 예를 들어 Kinesis에 대한 이벤트 소스 매핑은 데이터 스트림의 이벤트를 읽고 이를 함수에 배치(batch)로 전송합니다. 다음과 같은 서비스에 이벤트 소스 매핑을 사용할 수 있습니다.

AWS 관리형 정책 외에도 Lambda 콘솔은 추가 사용 사례와 관련된 권한을 가진 사용자 지정 정책을 생성하는 템플릿을 제공합니다. Lambda 콘솔에서 함수를 생성할 때 하나 이상의 템플릿의 권한을 사용하여 새로운 실행 역할을 만들 수 있습니다. 블루프린트에서 함수를 생성하거나, 다른 서비스에 액세스해야 하는 옵션을 구성할 때 이러한 템플릿도 자동으로 적용됩니다. 예제 템플릿은 이 설명서의 GitHub 리포지토리에서 구할 수 있습니다.

Lambda 실행 환경 자격 증명 작업

Lambda 함수 코드가 다른 AWS 서비스에 API 요청을 보내는 일은 흔히 발생합니다. 이러한 요청을 수행하기 위해 Lambda는 함수의 실행 역할을 가정하여 휘발성 자격 증명 세트를 생성합니다. 또한 Lambda는 함수 코드에서 API를 요청하는 데 사용되는 자격 증명 콘텍스트에 소스 함수 Amazon 리소스 이름(ARN) 을 자동으로 삽입합니다.

Lambda는 요청이 실행 환경 내에서 오는 AWS API 요청인 경우에만 소스 함수 ARN을 자격 증명 콘텍스트에 삽입합니다. AWS Lambda가 같은 실행 역할을 사용하여 사용자를 대신하여 실행 환경 외부에서 수행하는 API 호출은 소스 함수 ARN를 포함하지 않습니다. 실행 환경 외부에서의 해당 API 호출의 예는 다음과 같습니다.

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

  • 로깅을 위한 CloudWatch 호출.

자격 증명 콘텍스트에서 소스 함수 ARN를 사용하여 리소스에 대한 호출이 특정 Lambda 함수의 코드에서 왔는지 여부를 확인할 수 있습니다. 이를 확인하려면 IAM 자격 증명 기반 정책 또는 서비스 제어 정책(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 함수의 코드 또는 특정 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" ] }, "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 연산자를 고려합니다.