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

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

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

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

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

  • lambda:GetFunction

    사용자는 Lambda 함수가 포함된 .zip 파일을 다운로드하기 위한 미리 서명된 URL과 Lambda 함수에 대한 구성 정보를 가져올 수 있습니다.

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

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

  • lambda:EnableReplication*

    함수 코드 및 구성을 가져올 수 있는 Lambda 복제 서비스 권한을 부여하는 리소스 정책에 권한을 추가합니다.

    중요

    권한 끝부분의 별표(*)는 필수입니다(lambda:EnableReplication*).

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

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

  • 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 사용 설명서역할 생성 및 정책 연결(콘솔)을 참조하세요.

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

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

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

실행 역할에 부여해야 하는 권한에 대한 자세한 내용은 AWS Lambda 개발자 안내서Manage Permissions: Using an IAM Role(Execution Role)을 참조하세요. 다음을 참조하십시오.

  • 기본적으로 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 서비스를 참조하고 서비스 연결 역할(Service-Linked Role) 열에 예(Yes)가 있는 서비스를 찾으세요.

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

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

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

이 서비스 연결 역할을 통해 Lambda는 Lambda@Edge 함수를 AWS 리전 에 복제할 수 있습니다.

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:*:*:log-group:/aws/cloudfront/*

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

  • 작업: logs:PutLogEvents에 대한 arn:aws:logs:*:*:log-group:/aws/cloudfront/*

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

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

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

  • 트리거를 처음으로 생성할 때, 이 서비스에 AWSServiceRoleForLambdaReplicator(이)라는 역할이 없는 경우 해당 역할을 생성합니다. 이 역할은 Lambda에서 AWS 리전 리전으로 Lambda@Edge 함수를 복제하도록 합니다.

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

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

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

이러한 서비스 연결 역할을 수동으로 만들어야 하는 경우 AWS CLI를 사용하여 다음 명령을 실행합니다.

AWSServiceRoleForLambdaReplicator 역할을 만들려면

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

AWSServiceRoleForCloudFrontLogger 역할을 만들려면

aws iam create-service-linked-role --aws-service-name logger.cloudfront.amazonaws.com

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

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

CloudFront 서비스 연결 역할을 지원하는 AWS 리전

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

  • 미국 동부(버지니아 북부) – us-east-1

  • 미국 동부(오하이오) – us-east-2

  • 미국 서부(캘리포니아 북부) – us-west-1

  • 미국 서부(오레곤) – us-west-2

  • 아시아 태평양(뭄바이) – ap-south-1

  • 아시아 태평양(서울) – ap-northeast-2

  • 아시아 태평양(싱가포르) – ap-southeast-1

  • 아시아 태평양(시드니) – ap-southeast-2

  • 아시아 태평양(도쿄) – ap-northeast-1

  • 유럽(프랑크푸르트) – eu-central-1

  • 유럽(아일랜드) – eu-west-1

  • 유럽(런던) – eu-west-2

  • 남아메리카(상파울루) – sa-east-1