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

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

Lambda@Edge를 구성하려면 Lambda에 대한 다음 IAM 권한과 역할이 있어야 합니다.

  • IAM 권한 - 이러한 권한을 통해 AWS Lambda 함수를 생성하고 CloudFront 배포와 연결할 수 있습니다.

  • Lambda 함수 실행 역할(IAM 역할) – Lambda 서비스 보안 주체가 이 역할을 맡아 함수를 실행합니다.

  • Lambda@Edge 서비스 연결 역할 - 서비스 연결 역할은 특정 AWS 서비스가 Lambda 함수를 AWS 리전에 복제하고 CloudWatch가 CloudFront 로그 파일을 사용할 수 있도록 합니다.

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

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

  • lambda:GetFunction – 함수가 포함된 .zip 파일을 다운로드하기 위한 미리 서명된 URL과 Lambda 함수에 대한 구성 정보를 가져오기 위한 권한을 부여합니다.

  • lambda:EnableReplication* – Lambda 복제 서비스가 함수 코드 및 구성을 가져올 수 있도록 리소스 정책에 대한 권한을 부여합니다.

  • lambda:DisableReplication* – Lambda 복제 서비스가 함수를 삭제할 수 있도록 리소스 정책에 대한 권한을 부여합니다.

    중요

    lambda:EnableReplication*lambda:DisableReplication* 작업 끝에 별표(*)를 추가해야 합니다.

  • 리소스의 경우, 다음 예시와 같이 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 – 배포를 업데이트 또는 생성하기 위한 권한을 부여합니다.

자세한 정보는 다음 주제를 참조하세요.

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

함수를 실행할 때 lambda.amazonaws.comedgelambda.amazonaws.com 서비스 보안 주체가 맡을 수 있는 IAM 역할을 생성해야 합니다.

작은 정보

Lambda 콘솔에서 함수를 생성할 때 AWS 정책 템플릿을 사용하여 새로운 실행 역할을 생성할 수 있습니다. 이 단계는 함수를 실행하는 데 필요한 Lambda@Edge 권한을 자동으로 추가합니다. 자습서의 5단계: 간단한 Lambda@Edge 함수 생성을 참조하세요.

IAM 역할 수동 생성에 대한 자세한 내용은 IAM 사용 설명서의 역할 생성 및 정책 연결(콘솔)을 참조하세요.

예시: 역할 신뢰 정책

IAM 콘솔의 신뢰 관계 탭에서 이 역할을 추가할 수 있습니다. 권한 탭 아래에 이 정책을 추가하지 마세요.

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

실행 역할에 부여해야 하는 권한에 대한 자세한 내용은 AWS Lambda 개발자 안내서의 Lambda 리소스 액세스 권한을 참조하세요.

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

    CloudWatch Logs에 대한 자세한 내용은 엣지 함수 로그 섹션을 참조하세요.

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

Lambda@Edge의 서비스 연결 역할

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

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

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

    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는 이 역할을 사용하여 CloudWatch에 로그 파일을 푸시합니다. 로그 파일을 사용하여 Lambda@Edge 검증 오류를 디버깅할 수 있습니다.

    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 리소스를 보호할 수 있습니다.

서비스 연결 역할에 대한 자세한 내용은 CloudFront 서비스 연결 역할를 참조하세요.

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

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

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

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

AWSServiceRoleForLambdaReplicator 서비스 연결 역할은 역할을 수임하기 위해 replicator.lambda.amazonaws.com 서비스를 신뢰합니다.

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

  • arn:aws:lambda:*:*:function:*​의 lambda:CreateFunction

  • arn:aws:lambda:*:*:function:*​의 lambda:DeleteFunction

  • arn:aws:lambda:*:*:function:*​의 lambda:DisableReplication

  • all AWS resources​의 iam:PassRole

  • all AWS resources​의 cloudfront:ListDistributionsByLambdaFunction

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

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

AWSServiceRoleForCloudFrontLogger 서비스 연결 역할은 역할을 수임하기 위해 logger.cloudfront.amazonaws.com 서비스를 신뢰합니다.

역할 권한 정책에서는 Lambda@Edge가 지정된 arn:aws:logs:*:*:log-group:/aws/cloudfront/* 리소스에서 다음 작업을 완료할 수 있도록 허용합니다.

  • logs:CreateLogGroup

  • logs:CreateLogStream

  • logs:PutLogEvents

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

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

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

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

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

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

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

이러한 서비스 연결 역할을 수동으로 만들어야 하는 경우 다음 AWS Command Line Interface(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