Amazon CloudFront
개발자 안내서 (API 버전 2016-09-29)

Lambda@Edge에 대한 IAM 권한 및 역할 설정

Lambda@Edge를 구성하려면 특정한 IAM 권한과 IAM 실행 역할이 필요합니다. Lambda@Edge는 Lambda 함수를 CloudFront 리전에 복제하고 CloudWatch 계정에서 로그 파일을 사용할 수 있도록 하기 위해 서비스 연결 역할도 생성합니다.

Lambda 함수를 CloudFront 배포와 연결하는 데 필요한 IAM 권한

IAM 사용자가 Lambda 함수를 CloudFront 배포와 연결하려면 AWS Lambda,를 사용할 때 필요한 IAM 권한 외에 다음과 같은 IAM 권한이 필요합니다.

  • lambda:GetFunction

    리소스의 경우, 다음 예제와 같이 CloudFront 이벤트가 발생할 때 실행할 함수 버전의 ARN을 지정합니다.

    arn:aws:lambda:us-east-1:123456789012:function:TestFunction:2

  • lambda:EnableReplication*

    리소스의 경우, 다음 예제와 같이 CloudFront 이벤트가 발생할 때 실행할 함수 버전의 ARN을 지정합니다.

    arn:aws:lambda:us-east-1:123456789012:function:TestFunction:2

  • iam:CreateServiceLinkedRole

    Lambda@Edge에서 사용되는 서비스 연결 역할을 생성하여 CloudFront에서 Lambda 함수를 복제하는 데 사용됩니다. Lambda@Edge에서 사용하는 첫 번째 배포에서 이 역할이 생성되고 나면 Lambda@Edge에서 사용하는 다른 배포에 대한 권한을 추가할 필요가 없습니다.

  • cloudfront:UpdateDistribution 또는 cloudfront:CreateDistribution

    cloudfront:UpdateDistribution을 선택하여 배포를 업데이트하거나 cloudfront:CreateDistribution을 선택하여 배포를 생성합니다.

자세한 내용은 다음 설명서를 참조하십시오.

서비스 보안 주체에 대한 함수 실행 역할

서비스 보안 주체 lambda.amazonaws.comedgelambda.amazonaws.com가 수임할 수 있는 IAM 역할을 생성해야 합니다. 이 역할은 서비스 보안 주체가 사용자의 함수를 실행할 때 수임합니다. 자세한 내용은 IAM 사용 설명서의 "직무 기능에 관한 AWS 관리형 정책" 주제에 나온 역할 생성 및 정책 연결(콘솔) 단원을 참조하십시오.

IAM의 신뢰 관계 탭 아래에 이 역할을 추가합니다(권한 탭 아래에는 추가하지 마십시오).

다음은 역할 신뢰 정책의 예입니다.

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": [ "lambda.amazonaws.com", "edgelambda.amazonaws.com" ] }, "Action": "sts:AssumeRole" } ] }

실행 역할에 부여해야 하는 권한에 대한 자세한 내용은 AWS Lambda Developer Guide에 있는 권한 관리: IAM 역할(실행 역할) 사용 단원을 참조하십시오. 다음을 참조하십시오.

  • 기본적으로 CloudFront 이벤트가 Lambda 함수를 트리거할 때마다 데이터는 CloudWatch Logs에 기록됩니다. 이러한 로그를 사용하려면 실행 역할에 CloudWatch Logs에 데이터를 기록할 권한이 있어야 합니다. 사전 정의된 AWSLambdaBasicExecutionRole을 사용하여 실행 역할에 대한 권한을 부여할 수 있습니다.

    CloudWatch Logs에 대한 자세한 내용은 Lambda 함수용 CloudWatch 지표 및 CloudWatch Logs 단원을 참조하십시오.

  • Lambda 함수 코드가 S3 버킷에서 객체를 읽는 것처럼 다른 AWS 리소스에 액세스하는 경우 실행 역할에는 해당 작업을 수행할 수 있는 권한이 필요합니다.

Lambda@Edge의 서비스 연결 역할

Lambda@Edge에서는 AWS Identity and Access Management(IAM) 서비스 연결 역할을 사용합니다. 서비스 연결 역할은 서비스에 직접 연결된 고유한 유형의 IAM 역할입니다. 서비스 연결 역할은 해당 서비스에서 사전 정의하며 서비스에서 사용자를 대신하여 다른 AWS 서비스를 호출하기 위해 필요한 모든 권한을 포함합니다.

Lambda@Edge는 다음 IAM 서비스 연결 역할을 사용합니다.

  • AWSServiceRoleForLambdaReplicator–Lambda@Edge에서는 이 역할을 사용해 Lambda@Edge가 AWS 리전에 함수를 복제하도록 합니다.

  • AWSServiceRoleForCloudFrontLogger–CloudFront에서는 Lambda@Edge 확인 오류를 디버깅하기 위해 이 역할을 사용해 CloudWatch 계정으로 로그 파일을 푸시합니다.

CloudFront에 Lambda@Edge 트리거를 처음 추가할 때 AWSServiceRoleForLambdaReplicator라는 역할이 자동으로 생성되어 Lambda@Edge가 AWS 리전에 함수를 복제할 수 있도록 합니다. Lambda@Edge 함수를 사용하려면 이 역할이 필요합니다. AWSServiceRoleForLambdaReplicator 역할의 ARN의 모양은 다음과 같습니다.

arn:aws:iam::123456789012:role/aws-service-role/replicator.lambda.amazonaws.com/AWSServiceRoleForLambdaReplicator

AWSServiceRoleForCloudFrontLogger라는 두 번째 역할은 CloudFront에서 Lambda@Edge 오류 로그 파일을 CloudWatch로 푸시하도록 허용하기 위해 Lambda@Edge 함수 연결을 추가한 경우 자동으로 생성됩니다. AWSServiceRoleForCloudFrontLogger 역할의 ARN의 모양은 다음과 같습니다.

arn:aws:iam::account_number:role/aws-service-role/logger.cloudfront.amazonaws.com/AWSServiceRoleForCloudFrontLogger

서비스 연결 역할이 있으면 필요한 권한을 수동으로 추가할 필요가 없으므로 Lambda@Edge를 설정 및 사용하기가 쉽습니다. 서비스 연결 역할의 권한은 Lambda@Edge에서 정의하며, Lambda@Edge만이 그 역할을 맡을 수 있습니다. 정의된 권한에는 신뢰 정책과 권한 정책이 포함됩니다. 권한 정책은 다른 어떤 IAM 엔터티에도 연결할 수 없습니다.

서비스 연결 역할을 삭제하려면 먼저 연결된 CloudFront 또는 Lambda@Edge 리소스를 제거해야 합니다. 그러면 활성 리소스에 액세스하는 데 필요한 서비스 연결 역할을 제거할 필요가 없어 Lambda@Edge 리소스를 보호할 수 있습니다.

서비스 연결 역할을 지원하는 기타 서비스에 대한 자세한 정보는 IAM으로 작업하는 AWS 서비스를 참조하고 서비스 연결 역할 열에 가 있는 서비스를 찾으십시오.

Lambda@Edge의 서비스 연결 역할 권한

Lambda@Edge는 AWSServiceRoleForLambdaReplicatorAWSServiceRoleForCloudFrontLogger이라는 서비스 연결 역할을 사용합니다. 다음 단원에서는 이러한 각 역할에 대한 권한을 설명합니다.

Lambda Replicator의 서비스 연결 역할 권한

This service-linked role allows Lambda to replicate Lambda@Edge functions to AWS Regions.

AWSServiceRoleForLambdaReplicator 서비스 연결 역할은 그 역할을 위임하기 위해 다음 서비스를 신뢰합니다.

  • replicator.lambda.amazonaws.com

역할 권한 정책에서는 Lambda@Edge가 지정된 리소스에서 다음 작업을 완료할 수 있도록 허용합니다.

  • 작업: lambda:CreateFunction에 대한 arn:aws:lambda:*:*:function:*

  • 작업: lambda:DeleteFunction에 대한 arn:aws:lambda:*:*:function:*

  • 작업: lambda:DisableReplication에 대한 arn:aws:lambda:*:*:function:*

  • 작업: iam:PassRole에 대한 all AWS resources

  • 작업: cloudfront:ListDistributionsByLambdaFunction에 대한 all AWS resources

CloudFront Logger에 대한 서비스 연결 역할 권한

이 서비스 연결 역할을 사용하면 Lambda@Edge 확인 오류를 디버깅하기 위해 CloudFront에서 CloudWatch 계정으로 로그 파일을 푸시할 수 있습니다.

AWSServiceRoleForCloudFrontLogger 서비스 연결 역할은 그 역할을 위임하기 위해 다음 서비스를 신뢰합니다.

  • logger.cloudfront.amazonaws.com

역할 권한 정책에서는 Lambda@Edge가 지정된 리소스에서 다음 작업을 완료할 수 있도록 허용합니다.

  • 작업: logs:CreateLogGroup에 대한 arn:aws:logs:*:*:/aws/cloudfront/*

  • 작업: logs:CreateLogStream에 대한 arn:aws:logs:*:*:/aws/cloudfront/*

  • 작업: logs:PutLogsEvent에 대한 arn:aws:logs:*:*:/aws/cloudfront/*

IAM 개체(예: 사용자, 그룹 또는 역할)가 Lambda@Edge 서비스 연결 역할을 삭제할 수 있도록 권한을 구성해야 합니다. 자세한 내용은 IAM 사용 설명서서비스 연결 역할 권한 단원을 참조하십시오.

Lambda@Edge의 서비스 연결 역할 생성

일반적으로 Lambda@Edge에 대한 서비스 연결 역할은 수동으로 생성하지 않습니다. 다음 시나리오에서 서비스는 역할을 자동으로 생성합니다.

  • 트리거를 처음으로 생성할 때 서비스에서는 Lambda에서 AWS 리전으로 Lambda@Edge 함수를 복제하도록 허용하는 AWSServiceRoleForLambdaReplicator 역할을 생성합니다.

    서비스 연결 역할을 삭제하는 경우, 배포에서 Lambda@Edge의 새 트리거를 추가할 때 이 역할이 다시 생성됩니다.

  • Lambda@Edge 연결이 있는 CloudFront 배포를 업데이트 또는 생성할 때, 이 서비스에서는 AWSServiceRoleForCloudFrontLogger라는 역할이 없는 경우 해당 역할을 생성합니다. 이 역할은 CloudFront가 CloudWatch로 로그 파일을 푸시하도록 합니다.

    서비스 연결 역할을 삭제했다 하더라도, Lambda@Edge 연결이 있는 CloudFront 배포를 업데이트 또는 생성하는 경우 해당 역할이 다시 생성됩니다.

AWSServiceRoleForCloudFrontLogger 서비스 연결 역할을 수동으로 프로비저닝해야 하는 경우 AWS 명령줄에서 다음 명령을 실행합니다.

aws iam create-service-linked-role --aws-service-name replicator.lambda.amazonaws.com

Lambda@Edge 서비스 연결 역할 편집

Lambda@Edge에서는 AWSServiceRoleForLambdaReplicator 또는 AWSServiceRoleForCloudFrontLogger 서비스 연결 역할을 편집할 수 없습니다. 서비스에서 서비스 연결 역할을 만든 후에는 다양한 개체가 역할을 참조할 수 있기 때문에 역할 이름을 변경할 수 없습니다. 그러나 IAM를 사용하여 역할의 설명을 편집할 수 있습니다. 자세한 내용은 IAM 사용 설명서서비스에 연결 역할 편집 단원을 참조하십시오.

Lambda@Edge 서비스 연결 역할 삭제

Lambda@Edge를 더 이상 사용할 필요가 없는 경우 해당 서비스 연결 역할을 삭제하는 것이 좋습니다. 따라서 적극적으로 모니터링하지 않거나 유지하지 않는 미사용 개체가 없도록 합니다. 단, 계정에서 Lambda@Edge 리소스를 먼저 정리해야 역할을 수동으로 삭제할 수 있습니다.

배포에서 모든 Lambda@Edge 연결을 제거하려면 배포를 업데이트하여 모든 Lambda@Edge 함수 트리거를 제거하거나, Lambda@Edge 함수를 사용하는 배포 자체를 제거하십시오. 자세한 내용은 Lambda@Edge 함수 및 복제본 삭제 단원을 참조하십시오.

모든 Lambda@Edge 함수 연결을 배포에서 제거하고 CloudFront가 AWS 위치에서 함수 복제본을 제거하고 나면 서비스 연결 역할을 삭제할 수 있습니다.

참고

CloudFront의 업데이트가 완료되지 않으면 서비스 연결 역할이 삭제되지 않습니다. 이 문제가 발생하면 몇 분 기다렸다가 삭제 단계를 다시 시도하십시오.

각 서비스 연결 역할을 수동으로 삭제하려면 별도의 절차를 따라야 합니다.

  • CloudFront 콘솔을 사용하여 AWSServiceRoleForLambdaReplicator 역할을 삭제합니다.

  • IAM 콘솔을 사용하여 AWSServiceRoleForCloudFrontLogger 역할을 삭제합니다.

수동으로 AWSServiceRoleForLambdaReplicator 서비스 연결 역할을 삭제하려면

  1. AWS Management 콘솔에 로그인한 다음 https://console.aws.amazon.com/cloudfront/에서 CloudFront 콘솔을 엽니다.

  2. CloudFront 배포 페이지에서 상단 오른쪽에 있는 아바타를 클릭합니다.

    
  		      CloudFront의 아바타를 보여 주는 스크린샷.
  3. Delete를 선택합니다.

    
  	        CloudFront에서 Lambda 서비스 연결 역할을 삭제하기 위한 대화 상자의 스크린샷.

수동으로 AWSServiceRoleForCloudFrontLogger 서비스 연결 역할을 삭제하려면

  1. AWS Management 콘솔에 로그인한 다음 https://console.aws.amazon.com/iam/에서 IAM 콘솔을 엽니다.

  2. IAM 콘솔의 탐색 창에서 역할을 선택합니다. 그런 다음 삭제할 역할의 이름이나 행이 아닌 이름 옆에 있는 확인란을 선택합니다.

  3. 페이지 상단의 역할 작업에서 역할 삭제를 선택합니다.

  4. 확인 대화 상자가 나타나면 서비스 마지막 액세스 데이터를 검토합니다. 이 데이터는 선택한 각 역할이 AWS 서비스를 마지막으로 액세스한 일시를 보여 줍니다. 이를 통해 역할이 현재 활동 중인지 여부를 확인할 수 있습니다. 계속 진행하려면 Yes, Delete를 선택하여 삭제할 서비스 연결 역할을 제출합니다.

  5. IAM 콘솔 알림을 보고 서비스 연결 역할 삭제 진행 상황을 모니터링합니다. IAM 서비스 연결 역할 삭제는 비동기이므로 삭제할 역할을 제출한 후에 삭제 작업이 성공하거나 실패할 수 있습니다. 자세한 정보는 IAM 사용 설명서서비스에 연결 역할 삭제 단원을 참조하십시오.

CloudFront 서비스 연결 역할에 대해 지원되는 리전

CloudFront는 다음 리전에서 Lambda@Edge에 대한 서비스 연결 역할 사용을 지원합니다.

리전 이름 리전 자격 증명 CloudFront의 지원
미국 동부(버지니아 북부) us-east-1
미국 동부(오하이오) us-east-2
미국 서부(오레곤) us-west-2
아시아 태평양(뭄바이) ap-south-1
아시아 태평양(도쿄) ap-northeast-1
아시아 태평양(서울) ap-northeast-2
아시아 태평양(싱가포르) ap-southeast-1
아시아 태평양(시드니) ap-southeast-2
EU(프랑크푸르트) eu-central-1
EU(런던) eu-west-2
남아메리카(상파울루) sa-east-1