객체 Lambda 액세스 포인트에 대한 IAM 정책 구성 - Amazon Simple Storage Service

객체 Lambda 액세스 포인트에 대한 IAM 정책 구성

Amazon S3 액세스 포인트는 리소스, 사용자 또는 기타 조건별로 액세스 포인트 사용을 제어할 수 있는 AWS Identity and Access Management(IAM) 리소스 정책을 지원합니다. 단계별 예제는 자습서: S3 객체 Lambda를 사용하여 애플리케이션의 데이터 변환자습서: S3 객체 Lambda 및 Amazon Comprehend를 사용하여 PII 데이터 감지 및 수정 단원을 참조하십시오.

단일 AWS 계정의 경우 다음 4개 리소스에 객체 Lambda 액세스 포인트로 작업할 수 있는 권한이 부여되어야 합니다.

  • IAM 사용자 또는 역할

  • 버킷 및 연결된 표준 액세스 포인트

  • 객체 Lambda 액세스 포인트

  • AWS Lambda 함수

정책을 저장하기 전에 AWS Identity and Access Management Access Analyzer의 보안 경고, 오류, 일반 경고 및 제안 사항을 해결해야 합니다. IAM Access Analyzer는 정책 확인은 실행하여 IAM 정책 문법모범 사례에 대해 정책을 검증합니다. 이러한 확인은 결과를 생성하고 보안 모범 사례를 준수하고 작동하는 정책을 작성하는 데 도움이 되는 실행 가능한 권장 사항을 제공합니다. IAM 액세스 분석기를 사용한 정책 검증에 대한 자세한 내용은 IAM 사용 설명서IAM 액세스 분석기 정책 검증을 참조하세요. IAM Access Analyzer에서 반환된 경고, 오류 및 제안 사항 목록을 보려면 IAM Access Analyzer 정책 확인 참조를 참조하세요.

이 예제에서는 다음과 같은 리소스가 있다고 가정합니다.

  • Amazon S3 버킷에는 다음과 같은 Amazon S3 리소스 이름(ARN)이 포함되어 있습니다.

    arn:aws:s3:::DOC-EXAMPLE-BUCKET1

    다음 S3 버킷 정책 예제는 버킷에 대한 액세스 제어를 버킷의 액세스 포인트에 위임합니다. 이 정책은 버킷 소유자의 계정이 소유한 모든 액세스 포인트에 대한 전체 액세스를 허용합니다. 따라서 이 버킷에 대한 모든 액세스는 해당 액세스 포인트에 연결된 정책에 의해 제어됩니다. 사용자는 S3 액세스 포인트를 통해서만 버킷에서 읽을 수 있으므로 액세스 포인트를 통해서만 작업이 호출될 수 있습니다. 자세한 정보는 액세스 포인트에 액세스 제어 위임을 참조하십시오.

    예 - 액세스 포인트에 액세스 제어를 위임하는 버킷 정책

    { "Version": "2012-10-17", "Statement" : [ { "Effect": "Allow", "Principal" : { "AWS":"account-ARN"}, "Action" : "*", "Resource" : [ "arn:aws:s3:::DOC-EXAMPLE-BUCKET1", "arn:aws:s3:::DOC-EXAMPLE-BUCKET1/*" ], "Condition": { "StringEquals" : { "s3:DataAccessPointAccount" : "Bucket owner's account ID" } } }] }
  • 다음 ARN이 있는 이 버킷의 Amazon S3 Standard 액세스 포인트

    arn:aws:s3:us-east-1:111122223333:accesspoint/my-access-point

  • 다음 ARN이 있는 객체 Lambda 액세스 포인트:

    arn:aws:s3-object-lambda:us-east-1:111122223333:accesspoint/my-object-lambda-ap

  • 다음 ARN을 사용하는 AWS Lambda 함수

    arn:aws:lambda:us-east-1:111122223333:function:MyObjectLambdaFunction

참고

계정에서 Lambda 함수를 사용하는 경우 정책 설명에 함수 버전을 포함해야 합니다. 예: arn:aws:lambda:us-east-1:111122223333:function:MyObjectLambdaFunction:$LATEST

다음 IAM 정책은 사용자에게 Lambda 함수, 표준 액세스 포인트 및 S3 객체 Lambda 액세스 포인트에 대한 권한을 부여합니다.

{ "Version": "2012-10-17", "Statement": [ { "Sid": "AllowLambdaInvocation", "Action": [ "lambda:InvokeFunction" ], "Effect": "Allow", "Resource": "arn:aws:lambda:us-east-1:111122223333:function:MyObjectLambdaFunction:$LATEST", "Condition": { "ForAnyValue:StringEquals": { "aws:CalledVia": [ "s3-object-lambda.amazonaws.com" ] } } }, { "Sid": "AllowStandardAccessPointAccess", "Action": [ "s3:Get*", "s3:List*" ], "Effect": "Allow", "Resource": "arn:aws:s3:us-east-1:111122223333:accesspoint/my-access-point/*", "Condition": { "ForAnyValue:StringEquals": { "aws:CalledVia": [ "s3-object-lambda.amazonaws.com" ] } } }, { "Sid": "AllowObjectLambdaAccess", "Action": [ "s3-object-lambda:Get*", "s3-object-lambda:List*" ], "Effect": "Allow", "Resource": "arn:aws:s3-object-lambda:us-east-1:111122223333:accesspoint/my-object-lambda-ap" } ] }

Lambda 실행 역할

Lambda 함수는 객체 Lambda 액세스 포인트에 요청이 있을 때 S3 객체 Lambda에 데이터를 보낼 수 있는 권한이 필요합니다. 이는 Lambda 함수의 실행 역할에 대한 s3-object-lambda:WriteGetObjectResponse 권한을 사용 설정하여 제공됩니다. 새로운 실행 역할을 생성하거나 기존 역할을 업데이트할 수 있습니다.

IAM 콘솔에서 실행 역할 생성

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

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

  3. Common use cases(일반 사용 사례)에서 Lambda를 선택합니다.

  4. Next: Permissions(다음: 권한)를 선택합니다.

  5. 권한 정책 연결(Attach permissions policies)에서 AWS 관리형 정책 AmazonS3ObjectLambdaExecutionRolePolicy을 선택합니다.

  6. 다음: 태그를 선택합니다.

  7. 다음: 검토(Next: Review)를 선택합니다.

  8. [역할 이름(Role name)]에 s3-object-lambda-role을 입력합니다.

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

  10. 새로 생성된 s3-object-lambda-role을 Lambda 함수의 실행 역할로 적용합니다.

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

Lambda 함수의 실행 역할 업데이트

Lambda 함수에 사용되는 실행 역할에 다음 문을 추가합니다.

{ "Sid": "AllowObjectLambdaAccess", "Action": ["s3-object-lambda:WriteGetObjectResponse"], "Effect": "Allow", "Resource": "*" }

실행 역할에 대한 자세한 내용은 AWS Lambda 개발자 가이드Lambda 실행 역할을 참조하세요.

객체 Lambda 액세스 포인트에 컨텍스트 키 사용

S3 객체 Lambda를 사용하면 GET 요청이 자동으로 Lambda 함수를 호출하고 다른 모든 요청은 Amazon S3로 전달됩니다. S3 객체 Lambda는 요청의 연결 서명과 관련된 s3-object-lambda:TlsVersion 또는 s3-object-lambda:AuthType과 같은 컨텍스트 키를 평가합니다. s3:prefix와 같은 다른 모든 컨텍스트 키는 Amazon S3에 의해 평가됩니다.