

# Amazon SQS, Amazon SNS 및 Lambda 사용
<a name="how-to-enable-disable-notification-intro"></a>

알림 사용 설정은 버킷 수준 작업입니다. 알림 구성 정보는 버킷에 연결된 *알림* 하위 리소스에 저장됩니다. 버킷 알림 구성을 생성하거나 변경한 후 변경 사항이 적용되려면 일반적으로 5분 정도 걸립니다. 알림이 처음으로 사용 설정될 때 `s3:TestEvent`가 발생합니다. 다음과 같은 메서드를 사용하여 알림 구성을 관리할 수 있습니다.
+ **Amazon S3 콘솔 사용** - 콘솔 UI를 사용하면 코드를 작성할 필요 없이 버킷에서 알림 구성을 설정할 수 있습니다. 자세한 내용은 [Amazon S3 콘솔을 사용하여 이벤트 알림 사용 설정 및 구성](enable-event-notifications.md) 섹션을 참조하세요.
+ **AWS SDK를 사용한 프로그래밍 방식** - 내부적으로는 콘솔이나 SDK 모두 Amazon S3 REST API를 호출하여 버킷과 연결된 *알림* 하위 리소스를 관리합니다. AWS SDK를 사용하는 알림 구성의 예는 [연습: 알림용 버킷 구성(SNS 주제 또는 SQS 대기열)](ways-to-add-notification-config-to-bucket.md) 섹션을 참조하십시오.
**참고**  
코드에서 직접 Amazon S3 REST API를 호출할 수도 있습니다. 그러나 이렇게 하려면 요청 인증을 위한 코드를 작성해야 하므로 번거로울 수 있습니다.

사용하는 방법에 관계없이 Amazon S3가 버킷과 연결된 *알림* 하위 리소스에 알림 구성을 XML로 저장합니다. 버킷 하위 리소스에 대한 자세한 내용은 [범용 버킷 구성 옵션](UsingBucket.md#bucket-config-options-intro) 단원을 참조하십시오.

**참고**  
삭제된 대상으로 인해 실패한 이벤트 알림이 여러 개 있는 경우 이를 삭제하려고 하면 **다음 대상 구성을 검증할 수 없음**이라는 메시지가 표시될 수 있습니다. S3 콘솔에서 모든 실패한 알림을 동시에 삭제하여 이 문제를 해결할 수 있습니다.

**Topics**
+ [대상에 이벤트 알림 메시지를 게시할 권한 부여](grant-destinations-permissions-to-s3.md)
+ [Amazon S3 콘솔을 사용하여 이벤트 알림 사용 설정 및 구성](enable-event-notifications.md)
+ [프로그래밍 방식으로 이벤트 알림 구성](#event-notification-configuration)
+ [연습: 알림용 버킷 구성(SNS 주제 또는 SQS 대기열)](ways-to-add-notification-config-to-bucket.md)
+ [객체 키 이름 필터링을 사용하여 이벤트 알림 구성](notification-how-to-filtering.md)
+ [이벤트 메시지 구조](notification-content-structure.md)

# 대상에 이벤트 알림 메시지를 게시할 권한 부여
<a name="grant-destinations-permissions-to-s3"></a>

관련 API를 호출하여 SNS 주제, SQS 대기열 또는 Lambda 함수에 메시지를 게시할 수 있는 권한을 Amazon S3 보안 주체에 부여해야 합니다. 이는 Amazon S3가 이벤트 알림 메시지를 대상에 게시할 수 있도록 하기 위한 것입니다.

대상에 이벤트 알림 메시지를 게시하는 문제를 해결하려면 [Amazon Simple Notification Service 주제에 Amazon S3 이벤트 알림을 게시할 때의 문제 해결](https://repost.aws/knowledge-center/sns-not-receiving-s3-event-notifications)을 참조하십시오.

**Topics**
+ [AWS Lambda 함수 호출 권한 부여](#grant-lambda-invoke-permission-to-s3)
+ [SNS 주제 또는 SQS 대기열로 메시지를 게시할 권한 부여](#grant-sns-sqs-permission-for-s3)

## AWS Lambda 함수 호출 권한 부여
<a name="grant-lambda-invoke-permission-to-s3"></a>

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

Amazon S3 콘솔을 사용하여 Amazon S3 버킷에서 Lambda 함수에 대한 이벤트 알림을 구성할 때 콘솔은 Lambda 함수에 대해 필요한 권한을 설정합니다. 이는 Amazon S3가 버킷에서 함수를 호출할 수 있는 권한을 갖도록 하기 위한 것입니다. 자세한 내용은 [Amazon S3 콘솔을 사용하여 이벤트 알림 사용 설정 및 구성](enable-event-notifications.md) 섹션을 참조하세요.

또한, AWS Lambda에서 Lambda 함수를 호출할 수 있는 권한을 Amazon S3에 부여할 수도 있습니다. 자세한 내용은 *AWS Lambda 개발자 안내서*의 [자습서: Amazon S3에서 AWS Lambda 사용](https://docs.aws.amazon.com/lambda/latest/dg/with-s3-example.html)을 참조하십시오.

## SNS 주제 또는 SQS 대기열로 메시지를 게시할 권한 부여
<a name="grant-sns-sqs-permission-for-s3"></a>

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

SNS 주제 또는 SQS 대기열에 정책을 연결하는 방법에 대한 예제는 [연습: 알림용 버킷 구성(SNS 주제 또는 SQS 대기열)](ways-to-add-notification-config-to-bucket.md) 단원을 참조하십시오. 권한에 대한 자세한 내용은 다음 섹션을 참조하십시오.
+ *Amazon Simple Notification Service 개발자 안내서*의 [Amazon SNS 액세스 제어 사례](https://docs.aws.amazon.com/sns/latest/dg/AccessPolicyLanguage_UseCases_Sns.html)
+ *Amazon Simple Queue Service 개발자 안내서*의 [Amazon SQS의 Identity and Access Management](https://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/UsingIAM.html)

### 대상 SNS 주제에 대한 IAM 정책
<a name="sns-topic-policy"></a>

다음은 대상 SNS 주제에 연결하는 AWS Identity and Access Management(IAM) 정책의 예제입니다. 이 정책을 사용하여 이벤트 알림에 대한 대상 Amazon SNS 주제를 설정하는 방법에 대한 지침은 [연습: 알림용 버킷 구성(SNS 주제 또는 SQS 대기열)](ways-to-add-notification-config-to-bucket.md) 섹션을 참조하십시오.

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Id": "example-ID",
    "Statement": [
        {
            "Sid": "Example SNS topic policy",
            "Effect": "Allow",
            "Principal": {
                "Service": "s3.amazonaws.com"
            },
            "Action": [
                "SNS:Publish"
            ],
            "Resource": "arn:aws:sns:us-east-1:111122223333:example-sns-topic",
            "Condition": {
                "ArnEquals": {
                    "aws:SourceArn": "arn:aws:s3:::amzn-s3-demo-bucket"
                },
                "StringEquals": {
                    "aws:SourceAccount": "bucket-owner-123456789012"
                }
            }
        }
    ]
}
```

------

### 대상 SQS 대기열에 대한 IAM 정책
<a name="sqs-queue-policy"></a>

다음은 대상 SQS 대기열에 연결하는 IAM 정책의 예제입니다. 이 정책을 사용하여 이벤트 알림에 대한 대상 Amazon SQS 대기열을 설정하는 방법에 대한 지침은 [연습: 알림용 버킷 구성(SNS 주제 또는 SQS 대기열)](ways-to-add-notification-config-to-bucket.md) 섹션을 참조하십시오.

이 정책을 사용하려면 Amazon SQS 대기열 ARN, 버킷 이름 및 버킷 소유자의 AWS 계정 ID를 업데이트해야 합니다.

------
#### [ JSON ]

****  

```
{
    "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:us-east-1:111122223333:queue-name",
            "Condition": {
                "ArnLike": {
                    "aws:SourceArn": "arn:aws:s3:*:*:amzn-s3-demo-bucket"
                },
                "StringEquals": {
                    "aws:SourceAccount": "bucket-owner-123456789012"
                }
            }
        }
    ]
}
```

------

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

`ArnLike`를 사용하는 경우 ARN의 파티션, 서비스, 계정 ID, 리소스 유형, 부분 리소스 ID가 요청 컨텍스트의 ARN과 정확히 일치해야 합니다. 리전 및 리소스 경로만 부분 일치가 허용됩니다.

 `ArnLike` 대신 `StringLike`를 사용하는 경우 매칭 시 ARN 구조를 무시하고 와일드카드 문자로 대체된 부분에 관계없이 부분 일치를 허용합니다. 자세한 내용은 *IAM 사용 설명서*의 [IAM JSON 정책 요소](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_elements_condition_operators.html)를 참조하십시오.

```
"Condition": {         
  "StringLike": { "aws:SourceArn": "arn:aws:s3:*:*:amzn-s3-demo-bucket" }
  }
```

### AWS KMS 키 정책
<a name="key-policy-sns-sqs"></a>

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

------
#### [ JSON ]

****  

```
{
    "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 개발자 안내서*에서 [AWS KMS에서 키 정책 사용](https://docs.aws.amazon.com/kms/latest/developerguide/key-policies.html)을 참조하십시오.

Amazon SQS 및 Amazon SNS에 대해 AWS KMS의 서버 측 암호화를 사용하는 방법에 대한 자세한 내용은 다음을 참조하십시오.
+ *Amazon Simple Notification Service 개발자 안내서*의 [키 관리](https://docs.aws.amazon.com/sns/latest/dg/sns-key-management.html)
+ *Amazon Simple Queue Service 개발자 안내서*의 [키 관리](https://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/sqs-key-management.html)
+ *AWS 컴퓨팅 블로그*의 [AWS KMS를 활용하여 Amazon SNS에 게시된 메시지 암호화](https://aws.amazon.com/blogs/compute/encrypting-messages-published-to-amazon-sns-with-aws-kms/)

# Amazon S3 콘솔을 사용하여 이벤트 알림 사용 설정 및 구성
<a name="enable-event-notifications"></a>

특정 Amazon S3 범용 버킷 이벤트를 사용 설정해 이벤트가 발생할 때마다 대상에 알림을 보낼 수 있습니다. 이 섹션에서는 Amazon S3 콘솔로 이벤트 알림을 사용 설정하는 방법을 살펴봅니다. AWS SDK 및 Amazon S3 REST API를 통해 이벤트 알림을 사용하는 방법에 대한 자세한 내용은 [프로그래밍 방식으로 이벤트 알림 구성](how-to-enable-disable-notification-intro.md#event-notification-configuration) 섹션을 참조하십시오.

**사전 조건**: 버킷에 대한 이벤트 알림을 사용 설정하려면 먼저 대상 유형 중 하나를 설정한 후 권한을 구성해야 합니다. 자세한 내용은 [지원되는 이벤트 대상](notification-how-to-event-types-and-destinations.md#supported-notification-destinations) 및 [대상에 이벤트 알림 메시지를 게시할 권한 부여](grant-destinations-permissions-to-s3.md)(을)를 참조하세요.

**참고**  
Amazon Simple Queue Service FIFO(선입선출) 대기열은 Amazon S3 이벤트 알림 대상으로 지원되지 않습니다. Amazon S3 이벤트에 대한 알림을 Amazon SQS FIFO 대기열로 보내려면 Amazon EventBridge를 사용하면 됩니다. 자세한 내용은 [Amazon EventBridge 사용 설정](enable-event-notifications-eventbridge.md) 섹션을 참조하세요.

**Topics**
+ [Amazon S3 콘솔로 Amazon SNS, Amazon SQS 또는 Lambda 알림 사용 설정](#enable-event-notifications-sns-sqs-lam)

## Amazon S3 콘솔로 Amazon SNS, Amazon SQS 또는 Lambda 알림 사용 설정
<a name="enable-event-notifications-sns-sqs-lam"></a>

**S3 버킷에 대한 이벤트 알림 사용 설정 및 구성**

1. AWS Management Console에 로그인한 후 [https://console.aws.amazon.com/s3/](https://console.aws.amazon.com/s3/)에서 Amazon S3 콘솔을 엽니다.

1. 왼쪽 탐색 창에서 **범용 버킷**을 선택합니다.

1. 버킷 목록에서 이벤트를 활성화하려는 버킷의 이름을 선택합니다.

1. [**속성(Properties)**]을 선택합니다.

1. **이벤트 알림(Event Notifications)** 섹션으로 이동하여 **이벤트 알림 생성(Create event notification)**을 선택합니다.

1. **일반 구성(General configuration)** 섹션에서 이벤트 알림을 설명하는 이벤트 이름을 지정합니다. 선택적으로 접두사와 접미사를 지정하여 지정된 문자로 끝나는 키가 있는 객체로 알림을 제한할 수도 있습니다.

   1. **이벤트 이름(Event name)**에 대한 설명을 입력합니다.

      이름을 입력하지 않으면 전역 고유 식별자(GUID)가 생성되어 이름에 사용됩니다.

   1. (선택 사항) 접두사를 기준으로 이벤트 알림을 필터링하려면 **접두사(Prefix)**를 입력합니다.

      예를 들어 특정 폴더에 파일이 추가될 때만 알림을 받도록 접두사 필터를 설정할 수 있습니다(예: `images/`).

   1. (선택 사항) 접미사를 기준으로 이벤트 알림을 필터링하려면 **접미사(Suffix)**를 입력합니다.

      자세한 내용은 [객체 키 이름 필터링을 사용하여 이벤트 알림 구성](notification-how-to-filtering.md) 섹션을 참조하세요.

1. **이벤트 유형(Event types)** 섹션에서 알림을 받을 이벤트 유형을 하나 이상 선택합니다.

   다양한 이벤트 유형 목록은 [SQS, SNS 및 Lambda에 지원되는 이벤트 유형](notification-how-to-event-types-and-destinations.md#supported-notification-event-types) 섹션을 참조하십시오.

1. **대상(Destination)** 섹션에서 이벤트 알림 대상을 선택합니다.
**참고**  
이벤트 알림을 게시하려면 관련 API를 호출하는 데 필요한 권한을 Amazon S3 보안 주체에 부여해야 합니다. 이는 Lambda 함수, SNS 주제 또는 SQS 대기열에 알림을 게시할 수 있도록 하기 위한 것입니다.

   1. **Lambda 함수**, **SNS 주제** 또는 **SQS 대기열**과 같은 대상 유형을 선택합니다.

   1. 대상 유형을 선택한 후 목록에서 함수, 주제 또는 대기열을 선택합니다.

   1. 또는 Amazon 리소스 이름(ARN)을 지정하려는 경우 [**ARN 입력(Enter ARN)**]을 선택하고 ARN을 입력합니다.

   자세한 내용은 [지원되는 이벤트 대상](notification-how-to-event-types-and-destinations.md#supported-notification-destinations) 섹션을 참조하세요.

1. [**변경 사항 저장(Save changes)**]을 선택하면 Amazon S3가 이벤트 알림 대상으로 테스트 메시지를 보냅니다.

## 프로그래밍 방식으로 이벤트 알림 구성
<a name="event-notification-configuration"></a>

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

```
<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이 특정 유형의 이벤트를 감지하면 이벤트 정보와 함께 메시지를 게시합니다. 자세한 내용은 [이벤트 메시지 구조](notification-content-structure.md) 섹션을 참조하세요.

이벤트 알림 구성에 대한 자세한 내용은 다음 주제를 참조하십시오.
+ [연습: 알림용 버킷 구성(SNS 주제 또는 SQS 대기열)](ways-to-add-notification-config-to-bucket.md).
+ [객체 키 이름 필터링을 사용하여 이벤트 알림 구성](notification-how-to-filtering.md)

# 연습: 알림용 버킷 구성(SNS 주제 또는 SQS 대기열)
<a name="ways-to-add-notification-config-to-bucket"></a>

Amazon Simple Notification Service(Amazon SNS) 또는 Amazon Simple Queue Service(Amazon SQS)를 통해 Amazon S3 알림을 받을 수 있습니다. 이 연습에서는 Amazon SNS 주제 및 Amazon SQS 대기열을 사용하여 버킷에 알림 구성을 추가합니다.

**참고**  
Amazon Simple Queue Service FIFO(선입선출) 대기열은 Amazon S3 이벤트 알림 대상으로 지원되지 않습니다. Amazon S3 이벤트에 대한 알림을 Amazon SQS FIFO 대기열로 보내려면 Amazon EventBridge를 사용하면 됩니다. 자세한 내용은 [Amazon EventBridge 사용 설정](enable-event-notifications-eventbridge.md) 섹션을 참조하세요.

**Topics**
+ [연습 요약](#notification-walkthrough-summary)
+ [1단계: Amazon SQS 대기열 생성](#step1-create-sqs-queue-for-notification)
+ [2단계: Amazon SNS 주제 생성](#step1-create-sns-topic-for-notification)
+ [3단계: 버킷에 알림 구성 추가](#step2-enable-notification)
+ [4단계: 설정 테스트](#notification-walkthrough-1-test)

## 연습 요약
<a name="notification-walkthrough-summary"></a>

이 연습은 다음을 수행하는 데 도움이 됩니다.
+ Amazon SQS 대기열에 `s3:ObjectCreated:*` 유형의 이벤트를 게시합니다.
+ Amazon SNS 주제에 `s3:ReducedRedundancyLostObject` 유형의 이벤트를 게시합니다.

알림 구성에 대한 자세한 내용은 [Amazon SQS, Amazon SNS 및 Lambda 사용](how-to-enable-disable-notification-intro.md) 섹션을 참조하세요.

콘솔을 사용하면 코드를 생성하지 않고도 이러한 모든 단계를 수행할 수 있습니다. 또한, AWS SDK for Java 및 .NET을 사용하는 코드 예제가 제공되므로 프로그래밍 방식으로 알림 구성을 추가할 수 있습니다.

이 절차에는 다음 단계가 포함됩니다.

1. Amazon SQS 대기열 생성

   Amazon SQS 콘솔을 사용하여 SQS 대기열을 생성합니다. 프로그래밍 방식으로 Amazon S3이 대기열로 전송하는 모든 메시지에 액세스할 수 있습니다. 그러나 이 시연에서는 콘솔에서 알림 메시지를 확인합니다.

   대기열에 액세스 정책을 연결하여 메시지를 게시할 수 있는 권한을 Amazon S3에 부여합니다.

1. Amazon SNS 주제 생성

   Amazon SNS 콘솔을 사용하여 SNS 주제를 생성하고 주제를 구독합니다. 그렇게 하면 게시된 모든 이벤트가 사용자에게 전송됩니다. 통신 프로토콜로 이메일을 지정합니다. 주제를 생성하면 Amazon SNS에서 이메일을 전송합니다. 이메일에 포함된 링크를 사용하여 주제 구독을 확인합니다.

   주제에 액세스 정책을 연결하여 메시지를 게시할 수 있는 권한을 Amazon S3에 부여합니다.

1. 버킷에 알림 구성을 추가합니다.

## 1단계: Amazon SQS 대기열 생성
<a name="step1-create-sqs-queue-for-notification"></a>

단계에 따라 Amazon Simple Queue Service(Amazon SQS) 대기열을 생성하고 구독합니다.

1. Amazon SQS 콘솔을 사용하여 대기열을 생성합니다. 자세한 내용은 *Amazon Simple Queue Service 개발자 안내서*의 [Amazon SQS 시작하기](https://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/sqs-getting-started.html)를 참조하십시오.

1. 대기열에 연결된 액세스 정책을 다음 정책으로 바꿉니다.

   1. Amazon SQS 콘솔의 **대기열** 목록에서 대기열 이름을 선택합니다.

   1. **액세스 정책** 탭에서 **편집**을 선택합니다.

   1. 대기열에 연결된 액세스 정책을 바꿉니다. 여기에 Amazon SQS ARN, 원본 버킷 이름 및 버킷 소유자 계정 ID를 제공합니다.

------
#### [ JSON ]

****  

      ```
      {
          "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:us-west-2:111122223333:s3-notification-queue",
                  "Condition": {
                      "ArnLike": {
                          "aws:SourceArn": "arn:aws:s3:*:*:awsexamplebucket1"
                      },
                      "StringEquals": {
                          "aws:SourceAccount": "bucket-owner-123456789012"
                      }
                  }
              }
          ]
      }
      ```

------

   1. **저장**을 선택합니다.

1. (선택 사항) AWS Key Management Service(AWS KMS)를 사용하여 Amazon SQS 대기열 또는 Amazon SNS 주제에 서버 측 암호화가 사용되어 있는 경우 연결된 대칭 암호화 고객 관리형 키에 다음 정책을 추가합니다.

   Amazon SQS 또는 Amazon SNS용 AWS 관리형 키는 수정할 수 없으므로 고객 관리형 키에 정책을 추가해야 합니다.

------
#### [ JSON ]

****  

   ```
   {
       "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에서 Amazon SQS 및 Amazon SNS용 SSE를 사용하는 방법에 대한 자세한 내용은 다음을 참조하십시오.
   + *Amazon Simple Notification Service 개발자 안내서*의 [키 관리](https://docs.aws.amazon.com/sns/latest/dg/sns-key-management.html)
   + *Amazon Simple Queue Service 개발자 안내서*의 [키 관리](https://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/sqs-key-management.html)

1. 대기열 ARN을 기록합니다.

   생성한 SQS 대기열은 AWS 계정에 있는 또 다른 리소스입니다. 고유한 Amazon 리소스 이름(ARN)을 가집니다. 다음 단계에서 이 ARN을 사용합니다. ARN의 형식은 다음과 같습니다.

   ```
   arn:aws:sqs:aws-region:account-id:queue-name
   ```

## 2단계: Amazon SNS 주제 생성
<a name="step1-create-sns-topic-for-notification"></a>

다음 단계에 따라 Amazon SNS 주제를 생성하고 구독합니다.

1. Amazon SNS 콘솔을 사용하여 주제를 생성합니다. 자세한 내용은 *Amazon Simple Notification Service 개발자 안내서*에서 [Amazon SNS 주제 생성](https://docs.aws.amazon.com/sns/latest/dg/CreateTopic.html)을 참조하십시오.

1. 주제를 구독합니다. 이 실습에서는 통신 프로토콜로 전자 메일을 사용합니다. 자세한 내용은 *Amazon Simple Notification Service 개발자 안내서*에서 [Amazon SNS 주제 구독](https://docs.aws.amazon.com/sns/latest/dg/sns-create-subscribe-endpoint-to-topic.html)을 참조하십시오.

   주제 구독을 확인하도록 요청하는 전자 메일이 전송되면 구독을 확인합니다.

1. 주제에 연결된 액세스 정책을 다음 정책으로 교체합니다. 여기에 SNS 주제 ARN, 버킷 이름 및 버킷 소유자의 계정 ID를 제공합니다.

1. 주제 ARN을 기록합니다.

   생성된 SNS 주제는 AWS 계정의 리소스이며 따라서 고유한 ARN을 가집니다. 다음 단계에서 이 ARN을 사용합니다. ARN의 형식은 다음과 같습니다.

   ```
   arn:aws:sns:aws-region:account-id:topic-name
   ```

## 3단계: 버킷에 알림 구성 추가
<a name="step2-enable-notification"></a>

Amazon S3 콘솔 또는 AWS SDK를 사용한 프로그래밍 방식으로 버킷 알림을 사용할 수 있습니다. 다음 옵션 중 하나를 선택하여 버킷에 알림을 구성합니다. 이 섹션에서는 AWS SDK for Java 및 .NET을 사용한 코드 예제를 제공합니다.

### 옵션 A: 콘솔을 사용하여 버킷에 대한 알림 사용 설정
<a name="step2-enable-notification-using-console"></a>

Amazon S3 콘솔을 사용하여 다음 작업을 Amazon S3에 요청하는 알림 구성을 추가합니다.
+ Amazon SQS 대기열에 **모든 객체 생성 이벤트** 유형의 이벤트를 게시합니다.
+ Amazon SNS 주제에 **RRS 객체 손실** 유형의 이벤트를 게시합니다.

알림 구성을 저장하면 Amazon S3이 테스트 메시지를 게시하고 이메일을 통해 이 테스트 메시지가 전송됩니다.

지침은 [Amazon S3 콘솔을 사용하여 이벤트 알림 사용 설정 및 구성](enable-event-notifications.md) 단원을 참조하십시오.

### 옵션 B: AWS SDK를 사용하여 버킷에 대한 알림 사용
<a name="step2-enable-notification-using-awssdk-dotnet"></a>

------
#### [ .NET ]

다음 C\$1 코드 예제는 버킷에 알림 구성을 추가하는 전체 코드를 제공합니다. 이 코드를 업데이트하여 버킷 이름과 SNS 주제 ARN을 제공해야 합니다. 코드 예제 설정 및 실행에 대한 자세한 내용은 *AWS SDK for .NET 개발자 안내서*의 [AWS SDK for .NET 시작하기](https://docs.aws.amazon.com/sdk-for-net/latest/developer-guide/net-dg-setup.html)를 참조하세요.

```
using Amazon;
using Amazon.S3;
using Amazon.S3.Model;
using System;
using System.Collections.Generic;
using System.Threading.Tasks;

namespace Amazon.DocSamples.S3
{
    class EnableNotificationsTest
    {
        private const string bucketName = "*** bucket name ***";
        private const string snsTopic = "*** SNS topic ARN ***";
        private const string sqsQueue = "*** SQS topic ARN ***";
        // Specify your bucket region (an example region is shown).
        private static readonly RegionEndpoint bucketRegion = RegionEndpoint.USWest2;
        private static IAmazonS3 client;

        public static void Main()
        {
            client = new AmazonS3Client(bucketRegion);
            EnableNotificationAsync().Wait();
        }

        static async Task EnableNotificationAsync()
        {
            try
            {
               PutBucketNotificationRequest request = new PutBucketNotificationRequest
                {
                    BucketName = bucketName
                };

                TopicConfiguration c = new TopicConfiguration
                {
                    Events = new List<EventType> { EventType.ObjectCreatedCopy },
                    Topic = snsTopic
                };
                request.TopicConfigurations = new List<TopicConfiguration>();
                request.TopicConfigurations.Add(c);
                request.QueueConfigurations = new List<QueueConfiguration>();
                request.QueueConfigurations.Add(new QueueConfiguration()
                {
                    Events = new List<EventType> { EventType.ObjectCreatedPut },
                    Queue = sqsQueue
                });
                
                PutBucketNotificationResponse response = await client.PutBucketNotificationAsync(request);
            }
            catch (AmazonS3Exception e)
            {
                Console.WriteLine("Error encountered on server. Message:'{0}' ", e.Message);
            }
            catch (Exception e)
            {
                Console.WriteLine("Unknown error encountered on server. Message:'{0}' ", e.Message);
            }
        }
    }
}
```

------
#### [ Java ]

AWS SDK for Java를 사용하여 버킷 알림을 구성하는 방법의 예는 *Amazon S3 API 참조*의 [Process S3 event notifications](https://docs.aws.amazon.com/AmazonS3/latest/API/s3_example_s3_Scenario_ProcessS3EventNotification_section.html)를 참조하세요.

------

## 4단계: 설정 테스트
<a name="notification-walkthrough-1-test"></a>

이제 버킷에 객체를 업로드한 후 Amazon SQS 콘솔에서 이벤트 알림을 확인하여 설정을 테스트할 수 있습니다. 자세한 내용은 *Amazon Simple Queue Service 개발자 안내서의 '시작하기' 섹션*에서 [메시지 수신](https://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/sqs-getting-started.htmlReceiveMessage.html)을 참조하십시오.

# 객체 키 이름 필터링을 사용하여 이벤트 알림 구성
<a name="notification-how-to-filtering"></a>

Amazon S3 이벤트 알림을 구성할 때 Amazon S3에서 알림을 전송하도록 하는 지원되는 Amazon S3 이벤트 유형을 지정해야 합니다. 지정하지 않은 이벤트 유형이 S3 버킷에 발생하면 Amazon S3에서 알림을 전송하지 않습니다.

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

**참고**  
필터에서 접두사 또는 접미사로 와일드카드 문자("\$1")를 사용할 수 없습니다. 접두사 또는 접미사에 공백이 포함된 경우 공백을 “\$1” 문자로 대체해야 합니다. 접두사 또는 접미사 값에 다른 특수 문자를 사용하는 경우 [URL 인코딩(퍼센트 인코딩)](https://en.wikipedia.org/wiki/Percent-encoding) 형식으로 입력해야 합니다. 이벤트 알림의 접두사 또는 접미사에 사용할 때 URL 인코딩 형식으로 변환해야 하는 특수 문자의 전체 목록은 [사용 가능 문자](object-keys.md#object-key-guidelines-safe-characters) 페이지를 참조하십시오.

Amazon S3 콘솔에서 객체 키 이름 필터링을 사용하는 알림 구성을 설정할 수 있습니다. AWS SDK 또는 REST API를 통해 Amazon S3 API를 직접 사용하면 됩니다. 콘솔 UI를 사용하여 버킷에 알림 구성을 설정하는 방법에 대한 자세한 내용은 [Amazon S3 콘솔을 사용하여 이벤트 알림 사용 설정 및 구성](enable-event-notifications.md) 섹션을 참조하십시오.

[Amazon SQS, Amazon SNS 및 Lambda 사용](how-to-enable-disable-notification-intro.md)에서 설명한 대로, Amazon S3은 버킷과 연결된 *알림* 하위 리소스에 XML로 알림 구성을 저장합니다. 알림의 규칙을 정의하여 객체 키 이름의 접두사 또는 접미사로 알림을 필터링하려면 `Filter` XML 구조를 사용합니다. `Filter` XML 구조에 대한 자세한 내용은 *Amazon Simple Storage Service API 참조*의 [PUT 버킷 알림](https://docs.aws.amazon.com/AmazonS3/latest/API/RESTBucketPUTnotification.html)을 참조하십시오.

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

**Topics**
+ [객체 키 이름 필터링을 포함하는 유효한 알림 구성 예제](#notification-how-to-filtering-example-valid)
+ [유효하지 않은 접두사 및 접미사 중첩을 포함하는 알림 구성 예제](#notification-how-to-filtering-examples-invalid)

## 객체 키 이름 필터링을 포함하는 유효한 알림 구성 예제
<a name="notification-how-to-filtering-example-valid"></a>

다음 알림 구성에는 `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` 접미사는 마지막 문자가 동일해도 중첩되지 않습니다. 지정된 문자열이 두 접미사로 끝날 수 있으면 2개의 접미사가 겹치는 것으로 간주됩니다. 문자열이 `.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>
```

## 유효하지 않은 접두사 및 접미사 중첩을 포함하는 알림 구성 예제
<a name="notification-how-to-filtering-examples-invalid"></a>

`Filter`를 사용하는 알림 구성은 대부분의 경우 동일한 이벤트 유형에 대해 중첩 접두사, 중첩 접미사 또는 접두사와 접미사의 중첩 조합을 포함하는 필터링 규칙을 정의할 수 없습니다. 접미사가 중첩되지 않을 경우에 한해 중첩 접두사를 사용할 수 있습니다. 관련 예제는 [객체 키 이름 필터링을 사용하여 이벤트 알림 구성](#notification-how-to-filtering) 섹션을 참조하십시오

이벤트 유형이 서로 다른 중첩 객체 키 이름 필터를 사용할 수 있습니다. 예를 들어, `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>
```

다음 알림 구성은 중첩 접미사가 있기 때문에 유효하지 않습니다. 지정된 문자열이 두 접미사로 끝날 수 있으면 2개의 접미사가 겹치는 것으로 간주됩니다. 문자열은 `jpg`와 `pg`로 끝날 수 있습니다. 따라서 접미사가 겹칩니다. 접두사의 경우에도 마찬가지입니다. 지정된 문자열이 두 접두사로 시작할 수 있으면 2개의 접두사가 겹치는 것으로 간주됩니다.

```
 <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>
```

# 이벤트 메시지 구조
<a name="notification-content-structure"></a>

이벤트를 게시하기 위해 Amazon S3이 전송하는 알림 메시지는 JSON 형식입니다.

이벤트 알림 구성에 대한 일반 개요와 지침은 [Amazon S3 이벤트 알림](EventNotifications.md) 섹션을 참조하십시오.

이 예제는 이벤트 알림 JSON 구조의 *버전 2.1*을 보여줍니다. Amazon S3는 이 이벤트 구조의 *버전 2.1*, *2.2* 및 *2.3*을 사용합니다. Amazon S3는 리전 간 복제 이벤트 알림에 버전 2.2를 사용합니다. S3 수명 주기, S3 Intelligent-Tiering, 객체 ACL, 객체 태깅 및 객체 복원 삭제 이벤트에는 버전 2.3을 사용합니다. 이러한 버전에는 작업과 관련된 추가 정보가 포함되어 있습니다. 버전 2.2 및 2.3은 Amazon S3가 현재 다른 모든 이벤트 알림 유형에 사용하는 버전 2.1과 호환됩니다.

```
{  
   "Records":[  
      {  
         "eventVersion":"2.1",
         "eventSource":"aws:s3",
         "awsRegion":"us-west-2",
         "eventTime":"The time, in ISO-8601 format (for example, 1970-01-01T00:00:00.000Z) when Amazon S3 finished processing the request",
         "eventName":"The event type",
         "userIdentity":{  
            "principalId":"The unique ID of the IAM resource that caused the event"
         },
         "requestParameters":{  
            "sourceIPAddress":"The IP address where the request came from"
         },
         "responseElements":{  
            "x-amz-request-id":"The Amazon S3 generated request ID",
            "x-amz-id-2":"The Amazon S3 host that processed the request"
         },
         "s3":{  
            "s3SchemaVersion":"1.0",
            "configurationId":"The ID found in the bucket notification configuration",
            "bucket":{  
               "name":"The name of the bucket, for example, amzn-s3-demo-bucket",
               "ownerIdentity":{  
                  "principalId":"The Amazon retail customer ID of the bucket owner"
               },
               "arn":"The bucket Amazon Resource Name (ARN)"
            },
            "object":{  
               "key":"The object key name",
               "size":"The object size in bytes (as a number)",
               "eTag":"The object entity tag (ETag)",
               "versionId":"The object version if the bucket is versioning-enabled; null or not present if the bucket isn't versioning-enabled",
               "sequencer": "A string representation of a hexadecimal value used to determine event sequence; only used with PUT and DELETE requests"
            }
         },
         "glacierEventData": {
            "restoreEventData": {
               "lifecycleRestorationExpiryTime": "The time, in ISO-8601 format (for example, 1970-01-01T00:00:00.000Z), when the temporary copy of the restored object expires",
               "lifecycleRestoreStorageClass": "The source storage class for restored objects"
            }
         }
      }
   ]
}
```

이벤트 메시지 구조에 대한 다음 사항에 유의하십시오.
+ `eventVersion` 키 값에는 `major`.`minor` 형식의 메이저 및 마이너 버전이 포함됩니다.

  Amazon S3가 이전 버전과 호환되지 않는 이벤트 구조를 변경하는 경우 주 버전이 증가합니다. 여기에는 이미 존재하는 JSON 필드를 제거하거나 필드의 콘텐츠가 표시되는 방식(예: 날짜 형식)을 변경하는 것이 포함됩니다.

  Amazon S3이 이벤트 구조에 새 필드를 추가하는 경우 마이너 버전이 증가합니다. 이는 일부 또는 모든 기존 이벤트에 새 정보가 제공되는 경우 발생할 수 있습니다. 이는 새로 도입된 이벤트 유형에 대해서만 새 정보가 제공되는 경우에도 발생할 수 있습니다. 이벤트 구조의 새로운 마이너 버전과 호환성을 유지하려면 애플리케이션에서 새 필드를 무시하는 것이 좋습니다.

  새로운 이벤트 유형이 도입되었지만 그와 달리 이벤트 구조는 수정되지 않는 경우 이벤트 버전이 변경되지 않습니다.

  애플리케이션이 이벤트 구조의 구문을 올바로 분석할 수 있도록 메이저 버전 번호에 대해 같은 값인지 비교하는 것이 좋습니다. 애플리케이션이 예상하는 필드가 반드시 존재할 수 있도록 마이너 버전에 대해 크거나 같은 값인지 비교하는 것이 좋습니다.
+ `eventName` 키 값은 [이벤트 알림 유형](https://docs.aws.amazon.com/AmazonS3/latest/userguide/notification-how-to-event-types-and-destinations.html) 목록을 참조하지만 `s3:` 접두사는 포함하지 않습니다.
+ `userIdentity` 키 값은 이벤트를 발생시킨 AWS Identity and Access Management(IAM) 리소스(사용자, 역할, 그룹 등)의 고유 ID를 참조합니다. 각 IAM 식별 접두사(예: AIDA, AROA, AGPA)의 정의 및 고유 식별자를 얻는 방법에 대한 자세한 내용은 *IAM 사용 설명서*의 [고유 식별자](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_identifiers.html##identifiers-unique-ids) 섹션을 참조하세요.
+ `responseElements`의 도움을 받아 요청을 추적하려는 경우 AWS Support 키 값을 유용하게 사용할 수 있습니다. `x-amz-request-id` 및 `x-amz-id-2` 모두 Amazon S3이 개별 요청을 추적하는 데 도움이 됩니다. 이러한 값은 이벤트를 시작한 요청에 대한 응답에서 Amazon S3가 반환하는 값과 동일합니다. 따라서 이러한 값을 사용하여 이벤트를 요청과 일치시킬 수 있습니다.
+ `s3` 키 값은 이벤트와 연관된 버킷 및 객체에 대한 정보를 제공합니다. 객체의 키 이름 값은 URL로 인코딩되어 있습니다. 예를 들어, `red flower.jpg`는 `red+flower.jpg`가 됩니다. (Amazon S3는 응답의 콘텐츠 유형으로 "`application/x-www-form-urlencoded`"를 반환합니다.)

  `ownerIdentity` 키 값은 버킷 소유자의 Amazon 소매(Amazon.com) 고객 ID에 해당합니다. 이 ID 값은 더 이상 사용되지 않으며 이전 버전과의 호환성을 위해서만 유지됩니다.
+ `sequencer` 키 값은 이벤트 시퀀스를 정의하는 방법을 제공합니다. 이벤트 알림은 이벤트가 발생한 순서대로 도착하지 않을 수 있습니다. 단, 객체를 생성(`PUT` 요청)하고 객체를 삭제하는 이벤트의 알림에는 `sequencer`가 포함됩니다. 이 값을 사용하여 주어진 객체 키에 대한 이벤트 순서를 결정할 수 있습니다.

  `sequencer` 문자열을 동일한 객체 키의 두 가지 이벤트 알림과 비교할 경우 `sequencer` 16진수 값이 더 큰 이벤트 알림이 나중에 발생한 이벤트입니다. 이벤트 알림을 사용하여 별도의 데이터베이스 또는 Amazon S3 객체의 인덱스를 관리할 경우 각 이벤트 알림을 처리할 때 `sequencer` 값을 비교하고 저장하는 것이 좋습니다.

  다음 사항에 유의하세요.
  + `sequencer` 키 값을 사용하여 서로 다른 객체 키의 이벤트 순서를 결정할 수는 없습니다.
  + `sequencer` 문자열의 길이는 다를 수 있습니다. 따라서 이러한 값을 비교하려면 먼저 더 짧은 값을 0으로 왼쪽 채움한 뒤 사전순 비교를 수행합니다.
+ `glacierEventData` 키 값은 `s3:ObjectRestore:Completed` 이벤트에 대해서만 표시됩니다.
+ `restoreEventData` 키 값에는 복원 요청과 관련된 속성이 포함되어 있습니다.
+ `replicationEventData` 키 값은 복제 이벤트에 대해서만 표시됩니다.
+ `intelligentTieringEventData` 키 값은 S3 Intelligent-Tiering 이벤트에만 표시됩니다.
+ `lifecycleEventData` 키 값은 S3 수명 주기 전환 이벤트에만 표시됩니다.

## 예제 메시지
<a name="notification-content-structure-examples"></a>

다음은 Amazon S3 이벤트 알림 메시지의 예입니다.

**Amazon S3 테스트 메시지**  
버킷에 이벤트 알림을 구성한 후 Amazon S3가 다음과 같은 테스트 메시지를 전송합니다.

```
1. {  
2.    "Service":"Amazon S3",
3.    "Event":"s3:TestEvent",
4.    "Time":"2014-10-13T15:57:02.089Z",
5.    "Bucket":"amzn-s3-demo-bucket",
6.    "RequestId":"5582815E1AEA5ADF",
7.    "HostId":"8cLeGAmw098X5cv4Zkwcmo8vvZa3eH3eKxsPzbB9wrR+YstdA6Knx4Ip8EXAMPLE"
8. }
```

**참고**  
`s3:TestEvent` 메시지는 일반 S3 이벤트 알림과 다른 형식을 사용합니다. 앞에 표시된 `Records` 배열 구조를 사용하는 다른 이벤트 알림과 달리 테스트 이벤트는 직접 필드가 있는 단순화된 형식을 사용합니다. 이벤트 처리를 구현할 때 코드가 두 메시지 형식을 구분하고 올바르게 처리할 수 있는지 확인합니다.

**`PUT` 요청을 사용하여 객체를 생성할 때의 예제 메시지**  
다음은 Amazon S3에서 `s3:ObjectCreated:Put` 이벤트를 게시하기 위해 전송하는 메시지의 예입니다.

```
 1. {  
 2.    "Records":[  
 3.       {  
 4.          "eventVersion":"2.1",
 5.          "eventSource":"aws:s3",
 6.          "awsRegion":"us-west-2",
 7.          "eventTime":"1970-01-01T00:00:00.000Z",
 8.          "eventName":"ObjectCreated:Put",
 9.          "userIdentity":{  
10.             "principalId":"AIDAJDPLRKLG7UEXAMPLE"
11.          },
12.          "requestParameters":{  
13.             "sourceIPAddress":"172.16.0.1"
14.          },
15.          "responseElements":{  
16.             "x-amz-request-id":"C3D13FE58DE4C810",
17.             "x-amz-id-2":"FMyUVURIY8/IgAtTv8xRjskZQpcIZ9KG4V5Wp6S7S/JRWeUWerMUE5JgHvANOjpD"
18.          },
19.          "s3":{  
20.             "s3SchemaVersion":"1.0",
21.             "configurationId":"testConfigRule",
22.             "bucket":{  
23.                "name":"amzn-s3-demo-bucket",
24.                "ownerIdentity":{  
25.                   "principalId":"A3NL1KOZZKExample"
26.                },
27.                "arn":"arn:aws:s3:::amzn-s3-demo-bucket"
28.             },
29.             "object":{  
30.                "key":"HappyFace.jpg",
31.                "size":1024,
32.                "eTag":"d41d8cd98f00b204e9800998ecf8427e",
33.                "versionId":"096fKKXTRTtl3on89fVO.nfljtsv6qko",
34.                "sequencer":"0055AED6DCD90281E5"
35.             }
36.          }
37.       }
38.    ]
39. }
```

