Amazon S3 이벤트 알림 구성 - Amazon Simple Storage Service

Amazon S3 이벤트 알림 구성

Amazon S3 알림 기능은 버킷에서 특정 이벤트가 발생할 때 알림을 보냅니다. 알림을 활성화하려면 먼저 Amazon S3가 게시할 이벤트와 Amazon S3가 알림을 보낼 대상을 식별하는 알림 구성을 추가해야 합니다. 버킷에 연결된 알림 하위 리소스에 이 구성을 저장합니다. 자세한 내용은 버킷 구성 옵션 단원을 참조하십시오. Amazon S3는 이 하위 리소스를 관리하기 위한 API를 제공합니다.

중요

Amazon S3 이벤트 알림은 한 번 이상 전송되도록 설계되었습니다. 이벤트 알림은 일반적으로 몇 초 안에 전송되지만 1분 이상 소요되는 경우도 있습니다.

버전이 지정되지 않은 단일 객체에 대해 동시에 두 번의 쓰기가 수행되는 경우 이벤트 알림이 한 번만 전송될 수 있습니다. 쓰기에 성공할 때마다 이벤트 알림이 전송되도록 하려면 버킷에서 버전 관리를 활성화합니다. 버전 관리를 사용하면 쓰기가 성공적으로 수행될 때마다 객체의 새 버전이 생성되고 이벤트 알림도 전송됩니다.

알림 개요

현재 Amazon S3는 다음 이벤트에 대한 알림을 게시할 수 있습니다.

  • 새 객체 생성 이벤트 — Amazon S3는 여러 객체 생성 API를 지원합니다. 따라서 특정 API(예: s3:ObjectCreated:Put)를 사용할 경우에만 알림을 보내도록 요청하거나, 와일드카드(예: s3:ObjectCreated:*)를 사용하여 API에 관계없이 객체가 생성되면 알림을 보내도록 요청할 수 있습니다.

  • 객체 제거 이벤트 — Amazon S3는 버전이 지정된 객체 및 버전이 지정되지 않은 객체의 삭제를 지원합니다. 객체 버전 관리에 대한 자세한 내용은 객체 버전 관리버전 관리 사용를 참조하십시오.

    s3:ObjectRemoved:Delete 이벤트 유형을 사용하여 객체가 삭제되거나 버전이 지정된 객체가 영구적으로 삭제될 경우 알림을 요청할 수 있습니다. 또한 s3:ObjectRemoved:DeleteMarkerCreated를 사용하여 버전이 지정된 객체에 대해 삭제 마커가 생성될 경우 알림을 요청할 수 있습니다. s3:ObjectRemoved:* 와일드카드를 사용하여 객체가 삭제되는 모든 경우에 알림을 요청할 수도 있습니다. 버전 지정된 객체 삭제에 대한 자세한 내용은 객체 버전 삭제를 참조하십시오.

  • 객체 복원 이벤트 — Amazon S3은 S3 Glacier 스토리지 클래스에 보관된 객체의 복원을 지원합니다. s3:ObjectRestore:Completed를 사용하여 객체 복원 완료 알림을 요청합니다. s3:ObjectRestore:Post를 사용하여 복원 시작 알림을 요청합니다.

  • RRS(Reduced Redundancy Storage) 객체 손실 이벤트 — Amazon S3가 RRS 스토리지 클래스에서 객체 손실이 확인되면 알림 메시지를 보냅니다.

  • 복제 이벤트 — Amazon S3는 S3 Replication Time Control (S3 RTC)가 활성화된 복제 구성에 대한 이벤트 알림을 보냅니다. 객체 복제가 실패할 경우, 객체가 15분 임계값을 초과할 경우, 객체가 15분 임계값 이후에 복제될 경우, 객체가 더 이상 복제 지표에 의해 추적되지 않을 경우 이러한 알림을 보냅니다. 객체가 대상 리전으로 복제될 때 두 번째 이벤트를 게시합니다.

지원되는 이벤트 유형의 전체 목록은 지원되는 이벤트 유형 단원을 참조하십시오.

Amazon S3는 다음과 같은 이벤트 게시 대상을 지원합니다.

  • Amazon Simple Notification Service(Amazon SNS) 주제

    Amazon SNS는 유연하며 완벽하게 관리되는 푸시 메시징 서비스입니다. 이 서비스를 사용하여 모바일 디바이스 또는 분산 서비스로 메시지를 푸시할 수 있습니다. SNS를 사용해 메시지를 한 번 게시하고 한 번 이상 전송할 수 있습니다. SNS에 대한 자세한 내용은 Amazon SNS 제품 상세 페이지를 참조하십시오.

  • Amazon Simple Queue Service(Amazon SQS) 대기열

    Amazon SQS는 확장 가능하며 완벽하게 관리되는 메시지 대기열 서비스입니다. SQS를 사용하면 다른 서비스를 항상 가용 상태로 유지하지 않고도 모든 데이터 볼륨을 전송할 수 있습니다. 알림 구성에서 Amazon S3가 SQS 대기열에 이벤트를 게시하도록 요청할 수 있습니다.

    현재 스탠다드 SQS 대기열은 Amazon S3 이벤트 알림 대상으로만 허용되지만 FIFO SQS 대기열은 허용되지 않습니다. Amazon SQS에 대한 자세한 내용은 Amazon SQS 제품 세부 정보 페이지를 참조하십시오.

  • AWS Lambda

    AWS Lambda는 간편하게 새 정보에 신속하게 응답하는 애플리케이션을 구축할 수 있는 컴퓨팅 서비스입니다. AWS Lambda는 이미지 업로드, 앱에서의 작업, 웹 사이트 클릭 또는 연결된 디바이스의 출력과 같은 이벤트에 대한 응답으로 사용자가 작성한 코드를 실행합니다.

    AWS Lambda을 사용하여 사용자 지정 로직으로 다른 AWS 서비스를 확장하거나 AWS 규모와 성능, 보안에 따라 작동하는 자체 백엔드를 만들 수 있습니다. AWS Lambda를 사용하면 손쉽게 필요할 경우에만 실행되며, 하루 몇 번의 요청에서 초당 수천 개의 요청으로 자동 확장되는 분산 이벤트 중심 애플리케이션을 만들 수 있습니다.

    AWS Lambda는 Amazon S3 버킷 이벤트에 대한 응답으로 맞춤형 로직을 실행할 수 있습니다. 맞춤 코드를 AWS Lambda로 업로드하여 Lambda 함수를 만듭니다. Amazon S3가 특정 유형의 이벤트(예: 객체 생성 이벤트)를 감지한 후 AWS Lambda에 이벤트를 게시하고 Lambda 함수를 호출할 수 있습니다. 그 응답으로 AWS Lambda는 함수를 실행합니다.

주의

알림이 알림을 트리거하는 버킷에 기록되면 실행 루프가 발생할 수 있습니다. 예를 들어, 객체가 업로드될 때마다 버킷이 Lambda 함수를 트리거하고 그 함수가 객체를 버킷에 업로드하는 경우 함수는 간접적으로 자신을 트리거합니다 이렇게 되지 않도록 하려면 두 개의 버킷을 사용하거나, 수신 객체에 사용되는 접두사에만 적용되도록 트리거를 구성합니다.

AWS Lambda를 이용한 Amazon S3 알림에 대한 자세한 내용과 사용 예는 AWS Lambda Developer GuideAmazon S3와 함께 AWS Lambda 사용을 참조하십시오.

이벤트 알림을 활성화하는 방법

알림 활성화는 버킷 수준의 작업이며, 버킷에 연결된 알림 하위 리소스에 알림 구성 정보를 저장합니다. 다음과 같은 메서드를 사용하여 알림 구성을 관리할 수 있습니다.

  • Amazon S3 콘솔 사용

    콘솔 UI를 사용하면 코드를 작성하지 않고도 버킷에 알림 구성을 설정할 수 있습니다. 자세한 내용은 Amazon Simple Storage Service 콘솔 사용 설명서S3 버킷에 대한 이벤트 알림을 활성화하고 구성하려면 어떻게 해야 합니까? 단원을 참조하십시오.

  • AWS SDK를 사용한 프로그래밍 방식

    참고

    필요한 경우 코드에서 직접 Amazon S3 REST API를 호출하게 할 수도 있습니다. 하지만 이 방법은 요청 인증을 위한 코드를 작성해야 하므로 번거로울 수 있습니다.

    내부적으로는 콘솔이나 SDK 모두 Amazon S3 REST API를 호출하여 버킷과 연결된 알림 하위 리소스를 관리합니다. AWS SDK 예제를 사용한 알림 구성에 대해서는 연습: 알림을 위한 버킷 구성(SNS 주제 또는 SQS 대기열) 단원을 참조하십시오.

    사용하는 메서드에 관계없이 Amazon S3는 버킷과 연결된 알림 하위 리소스에 알림 구성을 XML로 저장합니다. 버킷 하위 리소스에 대한 자세한 내용은 버킷 구성 옵션 단원을 참조하십시오.

    기본적으로 모든 유형의 이벤트에 대해 알림이 비활성화되어 있습니다. 따라서 처음에 알림 하위 리소스에는 빈 구성이 저장되어 있습니다.

    <NotificationConfiguration xmlns="http://s3.amazonaws.com/doc/2006-03-01/"> </NotificationConfiguration>

    특정 유형의 이벤트에 대해 알림을 설정하려면 먼저 Amazon S3가 게시할 이벤트 유형 및 게시된 이벤트에 대한 알림을 보낼 대상을 지정한 구성으로 이 XML을 교체하십시오. 각 대상에 대해 해당 XML 구성을 추가해야 합니다. 예:

    • 이벤트 메시지를 SQS 대기열에 게시 — 하나 이상의 이벤트 유형의 알림 대상으로 SQS 대기열을 설정하려면 QueueConfiguration을 추가합니다.

      <NotificationConfiguration> <QueueConfiguration> <Id>optional-id-string</Id> <Queue>sqs-queue-arn</Queue> <Event>event-type</Event> <Event>event-type</Event> ... </QueueConfiguration> ... </NotificationConfiguration>
    • 이벤트 메시지를 SNS 주제에 게시 — 특정 이벤트 유형의 알림 대상으로 SNS 주제를 설정하려면 TopicConfiguration을 추가합니다.

      <NotificationConfiguration> <TopicConfiguration> <Id>optional-id-string</Id> <Topic>sns-topic-arn</Topic> <Event>event-type</Event> <Event>event-type</Event> ... </TopicConfiguration> ... </NotificationConfiguration>
    • AWS Lambda 함수 호출 및 이벤트 메시지를 인수로 제공 — 특정 이벤트 유형의 알림 대상으로 Lambda 함수를 설정하려면 CloudFunctionConfiguration을 추가합니다.

      <NotificationConfiguration> <CloudFunctionConfiguration>    <Id>optional-id-string</Id>    <CloudFunction>cloud-function-arn</CloudFunction>         <Event>event-type</Event>       <Event>event-type</Event>       ...   </CloudFunctionConfiguration> ... </NotificationConfiguration>

    버킷에 구성된 모든 알림을 삭제하려면 알림 하위 리소스에 빈 <NotificationConfiguration/> 요소를 저장합니다.

    Amazon S3는 특정 유형의 이벤트를 감지하면 이벤트 정보와 함께 메시지를 게시합니다. 자세한 내용은 이벤트 메시지 구조 단원을 참조하십시오.

이벤트 알림 유형 및 대상

이 단원에서는 Amazon S3에서 지원하는 이벤트 알림 유형과, 알림을 게시할 수 있는 대상 유형에 대해 설명합니다.

지원되는 이벤트 유형

Amazon S3는 다음과 같은 유형의 이벤트를 게시할 수 있습니다. 알림 구성에 이러한 이벤트 유형을 지정합니다.

이벤트 유형 설명

s3:ObjectCreated:*

s3:ObjectCreated:Put

s3:ObjectCreated:Post

s3:ObjectCreated:Copy

s3:ObjectCreated:CompleteMultipartUpload

PUT, POST 및 COPY와 같은 Amazon S3 API는 객체를 생성할 수 있습니다. 이러한 이벤트 유형을 사용하면 특정 API를 사용하여 객체가 생성될 때 알림을 활성화할 수 있습니다. 또는 s3:ObjectCreated:* 이벤트 유형을 사용하여 사용된 API에 관계없이 객체가 생성될 때마다 알림을 제공하도록 요청할 수 있습니다.

실패한 작업에서는 이벤트 알림이 수신되지 않습니다.

s3:ObjectRemoved:*

s3:ObjectRemoved:Delete

s3:ObjectRemoved:DeleteMarkerCreated

ObjectRemoved 이벤트 유형을 사용하여 객체나 객체 그룹이 버킷에서 삭제될 경우 알림을 활성화할 수 있습니다.

s3:ObjectRemoved:Delete 이벤트 유형을 사용하여 객체가 삭제되거나 버전이 지정된 객체가 영구적으로 삭제될 경우 알림을 요청할 수 있습니다. 또한 s3:ObjectRemoved:DeleteMarkerCreated를 사용하여 버전이 지정된 객체에 대해 삭제 마커가 생성될 경우 알림을 요청할 수 있습니다. 버전 지정된 객체 삭제에 대한 자세한 내용은 객체 버전 삭제를 참조하십시오. s3:ObjectRemoved:* 와일드카드를 사용하여 객체가 삭제되는 모든 경우에 알림을 요청할 수도 있습니다.

수명 주기 정책에 따른 자동 삭제 또는 작업이 실패한 경우에는 이벤트 알림이 수신되지 않습니다.

s3:ObjectRestore:Post

s3:ObjectRestore:Completed

객체 복원 이벤트 유형을 사용하면 S3 Glacier 스토리지 클래스에서 객체를 복원할 때 초기화 및 완료 알림을 받을 수 있습니다.

s3:ObjectRestore:Post를 사용하여 객체 복원 시작 알림을 요청합니다. s3:ObjectRestore:Completed를 사용하여 복원 완료 알림을 요청합니다.

s3:ReducedRedundancyLostObject 이 이벤트 유형을 사용하여 Amazon S3가 RRS 스토리지 클래스에서 객체가 손실된 것을 확인할 때 Amazon S3가 알림 메시지를 보내도록 요청할 수 있습니다.
s3:Replication:OperationFailedReplication Amazon S3 Replication Time Control을 사용하여 복제할 수 있는 객체를 복제하지 못한 경우 이 알림 이벤트가 수신됩니다.
s3:Replication:OperationMissedThreshold Amazon S3 Replication Time Control을 사용하여 복제할 수 있는 객체가 복제에 대한 15분 임계값을 초과하는 경우 이 알림 이벤트가 수신됩니다.
s3:Replication:OperationReplicatedAfterThreshold Amazon S3 Replication Time Control 기능을 사용하여 복제할 수 있는 객체가 15분 임계값 후 복제된 경우 이 알림 이벤트가 수신됩니다.
s3:Replication:OperationNotTracked Amazon S3 Replication Time Control을 사용하여 복제할 수 있지만 더 이상 복제 지표로 추적되지 않는 객체에 대해 이 알림 이벤트가 수신됩니다.

지원되는 대상

Amazon S3는 다음과 같은 대상으로 이벤트 알림 메시지를 보낼 수 있습니다. 알림 구성에 이러한 대상의 ARN 값을 지정합니다.

  • Amazon Simple Notification Service(Amazon SNS) 주제에 이벤트 메시지 게시

  • Amazon Simple Queue Service(Amazon SQS) 대기열에 이벤트 메시지 게시

    참고

    대상 대기열 또는 주제가 SSE를 사용하는 경우 Amazon S3은 메시지 암호화를 활성화하기 위해 연관된 AWS Key Management Service(AWS KMS) 고객 마스터 키(CMK)에 액세스해야 합니다.

  • Lambda 함수를 호출하고 이벤트 메시지를 인수로 제공하여 AWS Lambda에 이벤트 메시지 게시

Amazon SNS 주제 또는 Amazon SQS 대기열에 메시지를 게시할 수 있는 권한을 Amazon S3에 부여해야 합니다. 또한 Amazon S3에 사용자를 대신하여 AWS Lambda 함수를 호출할 수 있는 권한도 부여해야 합니다. 이러한 권한 부여에 대한 자세한 내용은 대상에 이벤트 알림 메시지를 게시할 권한 부여를 참조하십시오.

객체 키 이름 필터링으로 알림 구성

객체 키 이름의 접두사 및 접미사로 알림을 필터링하도록 구성할 수 있습니다. 예를 들어, 파일 이름 확장명이 ".jpg"인 이미지 파일이 버킷에 추가될 경우에만 알림을 받도록 구성을 설정할 수 있습니다. 또는 접두사가 "images/"인 객체가 버킷에 추가될 때에는 Amazon SNS 주제에 알림을 전송하고, 동일한 버킷에서 접두사가 "logs/"인 객체에 대한 알림은 AWS Lambda 함수로 전송하도록 구성할 수도 있습니다.

Amazon S3 콘솔에서 그리고 AWS SDK 또는 REST API를 통해 직접 Amazon S3 API를 사용하여 객체 키 이름 필터링을 사용하는 알림 구성을 설정할 수 있습니다. 콘솔 UI를 사용하여 버킷에 대한 알림 구성을 설정하는 방법에 대한 자세한 내용은 Amazon Simple Storage Service 콘솔 사용 설명서S3 버킷에 대한 이벤트 알림을 활성화하고 구성하려면 어떻게 해야 합니까? 단원을 참조하십시오.

이벤트 알림을 활성화하는 방법 에서 설명한 대로, Amazon S3는 버킷과 연결된 알림 하위 리소스에 XML로 알림 구성을 저장합니다. 알림의 규칙을 정의하여 객체 키 이름의 접두사 및/또는 접미사로 알림을 필터링하려면 Filter XML 구조를 사용합니다. Filter XML 구조에 대한 자세한 내용은 Amazon Simple Storage Service API ReferencePUT 버킷 알림을 참조하십시오.

Filter를 사용하는 알림 구성은 중첩 접두사, 중첩 접미사 또는 접두사 및 접미사 중첩을 포함하는 필터링 규칙을 정의할 수 있습니다. 다음 단원에는 객체 키 이름 필터링을 사용하는 유효한 알림 구성의 예가 나와 있습니다. 또한 접두사/접미사 중첩으로 인해 유효하지 않은 알림 구성 예제가 포함되어 있습니다.

객체 키 이름 필터링을 포함하는 유효한 알림 구성 예제

다음 알림 구성에는 s3:ObjectCreated:Put 유형의 이벤트를 게시하기 위해 Amazon S3에 대한 Amazon SQS 대기열을 식별하는 대기열 구성이 포함되어 있습니다. 이 이벤트는 접두사가 images/이고 접미사가 jpg인 객체가 버킷에 추가(PUT)될 때마다 게시됩니다.

<NotificationConfiguration> <QueueConfiguration> <Id>1</Id> <Filter> <S3Key> <FilterRule> <Name>prefix</Name> <Value>images/</Value> </FilterRule> <FilterRule> <Name>suffix</Name> <Value>jpg</Value> </FilterRule> </S3Key> </Filter> <Queue>arn:aws:sqs:us-west-2:444455556666:s3notificationqueue</Queue> <Event>s3:ObjectCreated:Put</Event> </QueueConfiguration> </NotificationConfiguration>

다음 알림 구성에는 여러 개의 비중첩 접두사가 있습니다. 이 구성은 images/ 폴더에서 PUT 요청에 대한 알림을 대기열 A로 보내고, logs/ 폴더에서 PUT 요청에 대한 알림은 대기열 B로 보내도록 정의합니다.

<NotificationConfiguration> <QueueConfiguration> <Id>1</Id> <Filter> <S3Key> <FilterRule> <Name>prefix</Name> <Value>images/</Value> </FilterRule> </S3Key> </Filter> <Queue>arn:aws:sqs:us-west-2:444455556666:sqs-queue-A</Queue> <Event>s3:ObjectCreated:Put</Event> </QueueConfiguration> <QueueConfiguration> <Id>2</Id> <Filter> <S3Key> <FilterRule> <Name>prefix</Name> <Value>logs/</Value> </FilterRule> </S3Key> </Filter> <Queue>arn:aws:sqs:us-west-2:444455556666:sqs-queue-B</Queue> <Event>s3:ObjectCreated:Put</Event> </QueueConfiguration> </NotificationConfiguration>

다음 알림 구성에는 여러 개의 비중첩 접미사가 있습니다. 이 구성은 버킷에 새로 추가된 모든 .jpg 이미지를 Lambda 클라우드 함수 A에서 처리하고, 새로 추가된 모든 .png 이미지는 클라우드 함수 B에서 처리하도록 구성합니다. 접미사 .png.jpg는 마지막 문자가 같기는 하지만 중첩되지는 않습니다. 한 문자열이 두 접미사로 끝날 수 있으면 두 개의 접미사가 중첩되는 것으로 간주됩니다. 한 문자열이 .png.jpg로 끝날 수 없으므로 예제 구성의 접미사는 중첩 접미사가 아닙니다.

<NotificationConfiguration> <CloudFunctionConfiguration> <Id>1</Id> <Filter> <S3Key> <FilterRule> <Name>suffix</Name> <Value>.jpg</Value> </FilterRule> </S3Key> </Filter> <CloudFunction>arn:aws:lambda:us-west-2:444455556666:cloud-function-A</CloudFunction> <Event>s3:ObjectCreated:Put</Event> </CloudFunctionConfiguration> <CloudFunctionConfiguration> <Id>2</Id> <Filter> <S3Key> <FilterRule> <Name>suffix</Name> <Value>.png</Value> </FilterRule> </S3Key> </Filter> <CloudFunction>arn:aws:lambda:us-west-2:444455556666:cloud-function-B</CloudFunction> <Event>s3:ObjectCreated:Put</Event> </CloudFunctionConfiguration> </NotificationConfiguration>

Filter를 사용하는 알림 구성은 동일한 이벤트 유형에 대해 중첩 접두사를 포함하는 필터링 규칙을 정의할 수 없습니다. 단 중첩 접두사가 중첩되지 않는 접미사와 함께 사용될 경우에는 가능합니다. 다음 예제 구성은 일반 접두사를 갖지만 접미사가 중첩되지 않게 생성된 객체가 어떻게 다른 대상으로 전송될 수 있는지를 보여 줍니다.

<NotificationConfiguration> <CloudFunctionConfiguration> <Id>1</Id> <Filter> <S3Key> <FilterRule> <Name>prefix</Name> <Value>images</Value> </FilterRule> <FilterRule> <Name>suffix</Name> <Value>.jpg</Value> </FilterRule> </S3Key> </Filter> <CloudFunction>arn:aws:lambda:us-west-2:444455556666:cloud-function-A</CloudFunction> <Event>s3:ObjectCreated:Put</Event> </CloudFunctionConfiguration> <CloudFunctionConfiguration> <Id>2</Id> <Filter> <S3Key> <FilterRule> <Name>prefix</Name> <Value>images</Value> </FilterRule> <FilterRule> <Name>suffix</Name> <Value>.png</Value> </FilterRule> </S3Key> </Filter> <CloudFunction>arn:aws:lambda:us-west-2:444455556666:cloud-function-B</CloudFunction> <Event>s3:ObjectCreated:Put</Event> </CloudFunctionConfiguration> </NotificationConfiguration>

유효하지 않은 접두사/접미사 중첩을 포함하는 알림 구성 예제

Filter를 사용하는 알림 구성은 대부분의 경우 동일한 이벤트 유형에 대해 중첩 접두사, 중첩 접미사 또는 접두사와 접미사의 중첩 조합을 포함하는 필터링 규칙을 정의할 수 없습니다. (접미사가 중첩되지 않을 경우에 한해 중첩 접두사를 사용할 수 있습니다. 관련 예제는 객체 키 이름 필터링으로 알림 구성.)

이벤트 유형이 서로 다른 중첩 객체 키 이름 필터를 사용할 수 있습니다. 예를 들어, image/ 이벤트 유형에 대해 ObjectCreated:Put 접두사를 사용하고, image/ 이벤트 유형에 대해 ObjectRemoved:* 접두사를 사용하는 알림 구성을 만들 수 있습니다.

Amazon S3 콘솔이나 API를 사용할 경우 동일한 이벤트 유형에 대해 유효하지 않은 중첩 이름 필터를 가진 알림 구성을 저장하려고 하면 오류가 발생합니다. 이 단원에서는 중첩된 이름 필터로 인해 유효하지 않은 알림 구성의 예를 보여줍니다.

기존의 알림 구성 규칙이 다른 접두사 및 접미사와 각각 일치하는 기본 접두사와 접미사를 갖는다고 가정해 보겠습니다. 다음 알림 구성은 중첩 접두사가 있기 때문에 유효하지 않습니다. 루트 접두사가 다른 접두사와 중첩됩니다. (이 예제에서 접두사 대신 접미사를 사용할 경우에도 마찬가지입니다. 루트 접미사가 다른 접미사와 중첩됩니다.)

<NotificationConfiguration> <TopicConfiguration> <Topic>arn:aws:sns:us-west-2:444455556666:sns-notification-one</Topic> <Event>s3:ObjectCreated:*</Event> </TopicConfiguration> <TopicConfiguration> <Topic>arn:aws:sns:us-west-2:444455556666:sns-notification-two</Topic> <Event>s3:ObjectCreated:*</Event> <Filter> <S3Key> <FilterRule> <Name>prefix</Name> <Value>images</Value> </FilterRule> </S3Key> </Filter> </TopicConfiguration> </NotificationConfiguration>

다음 알림 구성은 중첩 접미사가 있기 때문에 유효하지 않습니다. 한 문자열이 두 접미사로 끝날 수 있으면 두 개의 접미사가 중첩되는 것으로 간주됩니다. 문자열이 jpgpg로 끝날 수 있으므로 접미사가 중첩됩니다. (접두사의 경우에도 마찬가지로, 한 문자열이 두 접두사로 시작할 수 있을 경우 두 개의 접두사가 중첩되는 것으로 간주됩니다.)

<NotificationConfiguration> <TopicConfiguration> <Topic>arn:aws:sns:us-west-2:444455556666:sns-topic-one</Topic> <Event>s3:ObjectCreated:*</Event> <Filter> <S3Key> <FilterRule> <Name>suffix</Name> <Value>jpg</Value> </FilterRule> </S3Key> </Filter> </TopicConfiguration> <TopicConfiguration> <Topic>arn:aws:sns:us-west-2:444455556666:sns-topic-two</Topic> <Event>s3:ObjectCreated:Put</Event> <Filter> <S3Key> <FilterRule> <Name>suffix</Name> <Value>pg</Value> </FilterRule> </S3Key> </Filter> </TopicConfiguration> </NotificationConfiguration

다음 알림 구성은 접두사와 접미사가 중첩되기 때문에 유효하지 않습니다.

<NotificationConfiguration> <TopicConfiguration> <Topic>arn:aws:sns:us-west-2:444455556666:sns-topic-one</Topic> <Event>s3:ObjectCreated:*</Event> <Filter> <S3Key> <FilterRule> <Name>prefix</Name> <Value>images</Value> </FilterRule> <FilterRule> <Name>suffix</Name> <Value>jpg</Value> </FilterRule> </S3Key> </Filter> </TopicConfiguration> <TopicConfiguration> <Topic>arn:aws:sns:us-west-2:444455556666:sns-topic-two</Topic> <Event>s3:ObjectCreated:Put</Event> <Filter> <S3Key> <FilterRule> <Name>suffix</Name> <Value>jpg</Value> </FilterRule> </S3Key> </Filter> </TopicConfiguration> </NotificationConfiguration>

대상에 이벤트 알림 메시지를 게시할 권한 부여

Amazon S3에서 대상으로 메시지를 게시할 수 있으려면 먼저 Amazon S3 보안 주체에 관련 API를 호출하여 SNS 주제, SQS 대기열 또는 Lambda 함수로 메시지를 게시할 수 있는 권한을 부여해야 합니다.

AWS Lambda 함수 호출 권한 부여

Amazon S3는 Lambda 함수를 호출하고 그 인수로 이벤트 메시지를 제공하여 AWS Lambda에 이벤트 메시지를 게시합니다.

Amazon S3 콘솔을 사용하여 Amazon S3 버킷에 Lambda 함수에 대한 이벤트 알림을 구성할 때 콘솔은 Amazon S3에 버킷에서 함수를 호출하기 위한 권한을 부여하도록 Lambda 함수에 필수 권한을 설정합니다. 자세한 내용은 Amazon Simple Storage Service 콘솔 사용 설명서S3 버킷에 대한 이벤트 알림을 활성화하고 구성하려면 어떻게 해야 합니까? 단원을 참조하십시오.

또한 Amazon S3에 Lambda 함수를 호출할 AWS Lambda의 권한도 부여할 수 있습니다. 자세한 내용은 AWS Lambda Developer Guide에서 Tutorial: Using the AWS Lambda with Amazon S3 단원을 참조하십시오.

SNS 주제 또는 SQS 대기열로 메시지를 게시할 권한 부여

Amazon S3에 SNS 주제 또는 SQS 대기열에 메시지를 게시할 수 있는 권한을 부여하려면 대상 SNS 주제 또는 SQS 대기열에 AWS Identity and Access Management(IAM) 정책을 연결합니다.

SNS 주제 또는 SQS 대기열에 정책을 연결하는 방법에 대한 예제는 연습: 알림을 위한 버킷 구성(SNS 주제 또는 SQS 대기열) 단원을 참조하십시오. 권한에 대한 자세한 내용은 다음 단원을 참조하십시오.

대상 SNS 주제에 대한 IAM 정책

다음은 대상 SNS 주제에 연결하는 IAM 정책의 예제입니다.

{ "Version": "2012-10-17", "Id": "example-ID", "Statement": [ { "Sid": "example-statement-ID", "Effect": "Allow", "Principal": { "Service": "s3.amazonaws.com" }, "Action": [ "SNS:Publish" ], "Resource": "arn:aws:sns:Region:account-id:topic-name", "Condition": { "ArnLike": { "aws:SourceArn": "arn:aws:s3:::awsexamplebucket1" }, "StringEquals": { "aws:SourceAccount": "bucket-owner-account-id" } } } ] }

대상 SQS 대기열에 대한 IAM 정책

다음은 대상 SQS 대기열에 연결하는 IAM 정책의 예제입니다.

{ "Version": "2012-10-17", "Id": "example-ID", "Statement": [ { "Sid": "example-statement-ID", "Effect": "Allow", "Principal": { "Service": "s3.amazonaws.com" }, "Action": [ "SQS:SendMessage" ], "Resource": "arn:aws:sqs:Region:account-id:queue-name", "Condition": { "ArnLike": { "aws:SourceArn": "arn:aws:s3:*:*:awsexamplebucket1" }, "StringEquals": { "aws:SourceAccount": "bucket-owner-account-id" } } } ] }

Amazon SNS 및 Amazon SQS IAM 정책 모두 ArnLike 조건 대신, StringLike 조건을 정책에 지정할 수 있습니다.

"Condition": {        "StringLike": { "aws:SourceArn": "arn:aws:s3:*:*:bucket-name" } }

AWS KMS 키 정책

SQS 대기열 또는 SNS 주제가 AWS Key Management Service(AWS KMS) 고객 관리형 고객 마스터 키(CMK)로 암호화되는 경우 Amazon S3 서비스 보안 주체에게 암호화된 주제 및/또는 대기열을 사용할 수 있는 권한을 부여해야 합니다. Amazon S3 서비스 보안 주체에게 권한을 부여하려면 고객 관리형 CMK의 주요 정책에 다음 설명을 추가합니다.

{ "Version": "2012-10-17", "Id": "example-ID", "Statement": [ { "Sid": "example-statement-ID", "Effect": "Allow", "Principal": { "Service": "s3.amazonaws.com" }, "Action": [ "kms:GenerateDataKey", "kms:Decrypt" ], "Resource": "*" } ] }

AWS KMS 키 정책에 대한 자세한 내용은 AWS Key Management Service Developer GuideAWS KMS에서 키 정책 사용을 참조하십시오. Amazon SQS 및 Amazon SNS에서 AWS KMS와 함께 서버 측 암호화를 사용하는 방법에 대한 자세한 내용은 다음을 참조하십시오.