

기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.

# 새 교차 계정 구독 설정
<a name="Cross-Account-Log_Subscription-New"></a>

이러한 섹션의 단계에 따라 새 교차 계정 로그 구독을 설정합니다.

**Topics**
+ [1단계: 대상 생성](CreateDestination.md)
+ [2단계: (조직을 사용하는 경우에만) IAM 역할 생성](CreateSubscriptionFilter-IAMrole.md)
+ [3단계: 교차 계정 대상에 대한 IAM 권한 추가/검증](Subscription-Filter-CrossAccount-Permissions.md)
+ [4단계: 구독 필터 생성](CreateSubscriptionFilter.md)
+ [로그 이벤트 흐름 검증](ValidateLogEventFlow.md)
+ [런타임 시 대상 멤버십 수정](ModifyDestinationMembership.md)

# 1단계: 대상 생성
<a name="CreateDestination"></a>

**중요**  
이 절차의 모든 단계는 로그 데이터 수신자 계정에서 수행되어야 합니다.

이 예제에서 로그 데이터 수신자 계정의 AWS 계정 ID는 999999999999이고 로그 데이터 발신자 AWS 계정 ID는 111111111111입니다.

 이 예제에서는 RecipientStream이라는 Amazon Kinesis Data Streams 스트림과 CloudWatch Logs가 데이터를 쓸 수 있는 역할을 사용하여 대상을 생성합니다.

대상이 생성되면 CloudWatch Logs는 수신자 계정을 대신하여 대상에게 테스트 메시지를 전송합니다. 구독 필터가 나중에 활성화되면 CloudWatch Logs는 소스 계정을 대신하여 대상에게 로그 이벤트를 보냅니다.

**대상을 생성하려면**

1. 수신자 계정에서 Amazon Kinesis Data Streams에 대상 스트림을 생성합니다. 명령 프롬프트에서 다음과 같이 입력합니다.

   ```
   aws kinesis create-stream --stream-name "RecipientStream" --shard-count 1
   ```

1. 스트림이 활성 상태가 될 때까지 기다립니다. **aws kinesis describe-stream** 명령을 사용하여 **StreamDescription.StreamStatus** 속성을 확인할 수 있습니다. 또한 CloudWatch Logs의 이후 단계에서 필요할 수 있기 때문에 **StreamDescription.StreamARN** 값을 기록해 둡니다.

   ```
   aws kinesis describe-stream --stream-name "RecipientStream"
   {
     "StreamDescription": {
       "StreamStatus": "ACTIVE",
       "StreamName": "RecipientStream",
       "StreamARN": "arn:aws:kinesis:us-east-1:999999999999:stream/RecipientStream",
       "Shards": [
         {
           "ShardId": "shardId-000000000000",
           "HashKeyRange": {
             "EndingHashKey": "34028236692093846346337460743176EXAMPLE",
             "StartingHashKey": "0"
           },
           "SequenceNumberRange": {
             "StartingSequenceNumber": "4955113521868881845667950383198145878459135270218EXAMPLE"
           }
         }
       ]
     }
   }
   ```

   스트림이 활성 상태가 될 때까지 1\$12분 정도 기다려야 할 수 있습니다.

1. 스트림에 데이터를 입력하는 데 필요한 권한을 CloudWatch Logs에 부여하는 IAM 역할을 생성합니다. 먼저 **\$1/TrustPolicyForCWL.json** 파일에서 신뢰 정책을 생성해야 합니다. 텍스트 편집기를 사용하여 이 정책 파일을 생성하고 IAM 콘솔은 사용하지 마세요.

   이 정책은 `sourceAccountId`를 지정하여 혼동된 대리자 보안 문제를 방지하는 데 도움이 되는 `aws:SourceArn` 글로벌 조건 컨텍스트 키를 포함합니다. 첫 번째 직접 호출에서 소스 계정 ID를 아직 모르는 경우 소스 ARN 필드에 대상 ARN을 넣는 것이 좋습니다. 후속 직접 호출에서는 소스 ARN을 첫 번째 직접 호출에서 수집한 실제 소스 ARN으로 설정해야 합니다. 자세한 내용은 [혼동된 대리자 방지](Subscriptions-confused-deputy.md) 단원을 참조하십시오.

   ```
   {
       "Statement": {
           "Effect": "Allow",
           "Principal": {
               "Service": "logs.amazonaws.com"
           },
           "Condition": {
               "StringLike": {
                   "aws:SourceArn": [
                       "arn:aws:logs:region:sourceAccountId:*",
                       "arn:aws:logs:region:recipientAccountId:*"
                   ]
               }
           },
           "Action": "sts:AssumeRole"
       }
   }
   ```

1. **aws iam create-role** 명령을 사용하여 신뢰 정책 파일을 지정하는 IAM 역할을 생성합니다. 이 또한 CloudWatch Logs의 이후 단계에서 필요할 수 있기 때문에 반환된 Role.Arn 값을 적어 둡니다.

   ```
   aws iam create-role \
   --role-name CWLtoKinesisRole \
   --assume-role-policy-document file://~/TrustPolicyForCWL.json
   
   {
       "Role": {
           "AssumeRolePolicyDocument": {
               "Statement": {
                   "Action": "sts:AssumeRole",
                   "Effect": "Allow",
                   "Condition": {
                       "StringLike": {
                           "aws:SourceArn": [
                               "arn:aws:logs:region:sourceAccountId:*",
                               "arn:aws:logs:region:recipientAccountId:*"
                           ]
                       }
                   },
                   "Principal": {
                       "Service": "logs.amazonaws.com"
                   }
               }
           },
           "RoleId": "AAOIIAH450GAB4HC5F431",
           "CreateDate": "2015-05-29T13:46:29.431Z",
           "RoleName": "CWLtoKinesisRole",
           "Path": "/",
           "Arn": "arn:aws:iam::999999999999:role/CWLtoKinesisRole"
       }
   }
   ```

1. CloudWatch Logs가 계정에서 수행할 수 있는 작업을 정의하는 권한 정책을 생성합니다. 먼저 텍스트 편집기를 사용하여 권한 정책을 **\$1/PermissionsForCWL.json** 파일로 생성합니다.

   ```
   {
     "Statement": [
       {
         "Effect": "Allow",
         "Action": "kinesis:PutRecord",
         "Resource": "arn:aws:kinesis:region:999999999999:stream/RecipientStream"
       }
     ]
   }
   ```

1. **aws iam put-role-policy** 명령을 사용하여 권한 정책을 역할에 연결합니다.

   ```
   aws iam put-role-policy \
       --role-name CWLtoKinesisRole \
       --policy-name Permissions-Policy-For-CWL \
       --policy-document file://~/PermissionsForCWL.json
   ```

1. 스트림이 활성 상태이고 IAM 역할을 생성하고 나면 CloudWatch Logs 대상을 생성할 수 있습니다.

   1. 이 단계를 수행해도 액세스 정책이 대상에 연결되는 것은 아니며, 대상 생성을 완료하기 위한 두 단계 중 첫 번째 단계를 완료한 것일 뿐입니다. 페이로드에 반환되는 **DestinationArn**을 적어둡니다.

      ```
      aws logs put-destination \
          --destination-name "testDestination" \
          --target-arn "arn:aws:kinesis:region:999999999999:stream/RecipientStream" \
          --role-arn "arn:aws:iam::999999999999:role/CWLtoKinesisRole"
      
      {
        "DestinationName" : "testDestination",
        "RoleArn" : "arn:aws:iam::999999999999:role/CWLtoKinesisRole",
        "DestinationArn" : "arn:aws:logs:us-east-1:999999999999:destination:testDestination",
        "TargetArn" : "arn:aws:kinesis:us-east-1:999999999999:stream/RecipientStream"
      }
      ```

   1. 7a 단계를 완료한 후 로그 데이터 수신자 계정에서 액세스 정책을 대상과 연결합니다. 이 정책은 **logs:PutSubscriptionFilter** 작업을 지정해야 하며, 발신자 계정에 대상에 액세스할 권한을 부여합니다.

      이 정책은 로그를 전송하는 AWS 계정에 권한을 부여합니다. 정책에서 이 계정 하나만 지정할 수 있으며, 또는 발신자 계정이 조직의 구성원인 경우 정책은 해당 조직의 조직 ID를 지정할 수 있습니다. 이렇게 하면 정책 하나만 생성하여 한 조직의 여러 계정이 이 대상 계정으로 로그를 보내도록 할 수 있습니다.

      텍스트 편집기를 사용하여 이름이 `~/AccessPolicy.json`이고 다음 정책 명령문 중 하나를 포함한 파일을 생성합니다.

      이 첫 번째 예제 정책은 ID가 `o-1234567890`인 조직의 모든 계정이 수신자 계정으로 로그를 보내도록 허용합니다.

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

****  

      ```
      {
          "Version":"2012-10-17",		 	 	 
          "Statement": [
              {
                  "Sid": "",
                  "Effect": "Allow",
                  "Principal": "*",
                  "Action": "logs:PutSubscriptionFilter",
                  "Resource": "arn:aws:logs:us-east-1:999999999999:destination:testDestination",
                  "Condition": {
                      "StringEquals": {
                          "aws:PrincipalOrgID": [
                              "o-1234567890"
                          ]
                      }
                  }
              }
          ]
      }
      ```

------

      다음 예에서는 로그 데이터 발신자 계정(111111111111)에서만 로그 데이터 수신자 계정으로 로그를 보내도록 허용합니다.

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

****  

      ```
      {
          "Version":"2012-10-17",		 	 	 
          "Statement": [
              {
                  "Sid": "",
                  "Effect": "Allow",
                  "Principal": {
                      "AWS": "111111111111"
                  },
                  "Action": "logs:PutSubscriptionFilter",
                  "Resource": "arn:aws:logs:us-east-1:999999999999:destination:testDestination"
              }
          ]
      }
      ```

------

   1. 이전 단계에서 생성한 정책을 대상에 연결합니다.

      ```
      aws logs put-destination-policy \
          --destination-name "testDestination" \
          --access-policy file://~/AccessPolicy.json
      ```

      이 액세스 정책을 사용하면 ID가 111111111111인 AWS 계정의 사용자가 ARN arn:aws:logs:region::destination:testDestination인 대상에 대해 **PutSubscriptionFilter**를 호출할 수 있습니다.**999999999999 testDestination 다른 사용자가 이 대상에 대해 PutSubscriptionFilter를 직접 호출하려는 시도는 모두 거부됩니다.

      액세스 정책에 대한 사용자 권한의 유효성을 검사하려면 *IAM 사용 설명서*의 [정책 검사기 사용](https://docs.aws.amazon.com/IAM/latest/UserGuide/policies_policy-validator.html)을 참조하세요.

작업을 마쳤으면 교차 계정 권한 AWS Organizations 에를 사용하는 경우의 단계를 따릅니다[2단계: (조직을 사용하는 경우에만) IAM 역할 생성](CreateSubscriptionFilter-IAMrole.md). Organizations를 사용하는 대신 다른 계정에 직접 권한을 부여하는 경우 해당 단계를 건너뛰고 [4단계: 구독 필터 생성](CreateSubscriptionFilter.md) 단계로 넘어갑니다.

# 2단계: (조직을 사용하는 경우에만) IAM 역할 생성
<a name="CreateSubscriptionFilter-IAMrole"></a>

이전 섹션에서 `111111111111` 계정이 속한 조직에 권한을 부여하는 액세스 정책을 사용하여 대상을 생성한 경우 `111111111111` 계정에 직접 권한을 부여하는 대신 이 섹션의 단계를 따릅니다. 그렇지 않다면 [4단계: 구독 필터 생성](CreateSubscriptionFilter.md) 단계로 건너뛰어도 됩니다.

이 섹션의 단계에서는 CloudWatch가 수신자 대상에 대한 구독 필터를 생성할 수 있는 권한이 발신자 계정에 있는지를 가정하고 검증할 수 있는 IAM 역할을 생성합니다.

발신자 계정에서 이 섹션의 단계를 수행합니다. 역할은 발신자 계정에 있어야 하며 구독 필터에서 이 역할의 ARN을 지정합니다. 이 예제에서 발신자 계정은 `111111111111`입니다.

**를 사용하여 교차 계정 로그 구독에 필요한 IAM 역할을 생성하려면 AWS Organizations**

1. `/TrustPolicyForCWLSubscriptionFilter.json` 파일에 다음 트러스트 정책을 생성합니다. 텍스트 편집기를 사용하여 이 정책 파일을 생성하고, IAM 콘솔은 사용하지 마세요.

   ```
   {
     "Statement": {
       "Effect": "Allow",
       "Principal": { "Service": "logs.amazonaws.com" },
       "Action": "sts:AssumeRole"
     }
   }
   ```

1. 이 정책을 사용하는 IAM 역할을 생성합니다. 명령에 의해 반환되는 `Arn` 값은 이 절차의 뒷부분에 필요하므로 메모해 둡니다. 이 예제에서 생성하는 역할의 이름으로는 `CWLtoSubscriptionFilterRole`을 사용합니다.

   ```
   aws iam create-role \ 
        --role-name CWLtoSubscriptionFilterRole \ 
        --assume-role-policy-document file://~/TrustPolicyForCWLSubscriptionFilter.json
   ```

1. CloudWatch Logs가 계정에서 수행할 수 있는 작업을 정의하는 권한 정책을 생성합니다.

   1. 먼저 텍스트 편집기를 사용하여 다음 권한 정책을 이름이 `~/PermissionsForCWLSubscriptionFilter.json`인 파일로 생성합니다.

      ```
      { 
          "Statement": [ 
              { 
                  "Effect": "Allow", 
                  "Action": "logs:PutLogEvents", 
                  "Resource": "arn:aws:logs:region:111111111111:log-group:LogGroupOnWhichSubscriptionFilterIsCreated:*" 
              } 
          ] 
      }
      ```

   1. 다음 명령을 입력하여 방금 생성한 권한 정책을 2단계에서 생성한 역할에 연결합니다.

      ```
      aws iam put-role-policy  
          --role-name CWLtoSubscriptionFilterRole  
          --policy-name Permissions-Policy-For-CWL-Subscription-filter 
          --policy-document file://~/PermissionsForCWLSubscriptionFilter.json
      ```

작업을 마쳤으면 [4단계: 구독 필터 생성](CreateSubscriptionFilter.md) 단계로 넘어갑니다.

# 3단계: 교차 계정 대상에 대한 IAM 권한 추가/검증
<a name="Subscription-Filter-CrossAccount-Permissions"></a>

 AWS 교차 계정 정책 평가 로직에 따라 교차 계정 리소스(예: 구독 필터의 대상으로 사용되는 Kinesis 또는 Firehose 스트림)에 액세스하려면 전송 계정에 교차 계정 대상 리소스에 대한 명시적 액세스를 제공하는 자격 증명 기반 정책이 있어야 합니다. 정책 평가 로직에 대한 자세한 내용은 [교차 계정 정책 평가 로직](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_evaluation-logic-cross-account.html)을 참조하세요.

구독 필터를 생성하는 데 사용하는 IAM 역할 또는 IAM 사용자에게 자격 증명 기반 정책을 연결할 수 있습니다. 전송 계정에 이 정책이 있어야 합니다. 관리자 역할을 사용하여 구독 필터를 만드는 경우 이 단계를 건너뛰고 [4단계: 구독 필터 생성](CreateSubscriptionFilter.md)로 넘어갈 수 있습니다.

**교차 계정에 필요한 IAM 권한을 추가 또는 검증하려면**

1. 다음 명령을 입력하여 AWS 로그 명령을 실행하는 데 사용되는 IAM 역할 또는 IAM 사용자를 확인합니다.

   ```
   aws sts get-caller-identity
   ```

   이 명령은 다음과 비슷한 출력을 반환합니다.

   ```
   {
   "UserId": "User ID",
   "Account": "sending account id",
   "Arn": "arn:aws:sending account id:role/user:RoleName/UserName"
   }
   ```

   *RoleName* 또는 *UserName*으로 나타낸 값을 기록해 둡니다.

1. 전송 계정의 AWS Management Console 에 로그인하고 1단계에서 입력한 명령의 출력에서 반환된 IAM 역할 또는 IAM 사용자가 있는 연결된 정책을 검색합니다.

1. 이 역할 또는 사용자에게 연결된 정책이 교차 계정 대상 리소스에서 `logs:PutSubscriptionFilter`을 직접 호출할 수 있는 명시적 권한을 제공하는지 확인합니다.

   다음 정책은 단일 AWS 계정인 계정 에서만 모든 대상 리소스에 구독 필터를 생성할 수 있는 권한을 제공합니다`999999999999`.

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

****  

   ```
   {
        "Version":"2012-10-17",		 	 	 
        "Statement": [
           {
               "Sid": "AllowSubscriptionFiltersOnAccountResources",
               "Effect": "Allow",
               "Action": "logs:PutSubscriptionFilter",
               "Resource": [
                   "arn:aws:logs:*:*:log-group:*",
                   "arn:aws:logs:*:123456789012:destination:*"
               ]
           }
       ]
   }
   ```

------

   다음 정책은 단일 AWS 계정인 계정에서 라는 특정 대상 리소스에 대해서만 구독 필터를 생성할 `sampleDestination` 수 있는 권한을 제공합니다`123456789012`.

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

****  

   ```
   {
       "Version":"2012-10-17",		 	 	 
       "Statement": [
           {
               "Sid": "AllowSubscriptionFiltersonAccountResource",
               "Effect": "Allow",
               "Action": "logs:PutSubscriptionFilter",
               "Resource": [
                   "arn:aws:logs:*:*:log-group:*",
                   "arn:aws:logs:*:123456789012:destination:sampleDestination"
               ]
           }
       ]
   }
   ```

------

# 4단계: 구독 필터 생성
<a name="CreateSubscriptionFilter"></a>

대상을 생성하고 나면 로그 데이터 수신자 계정에서 다른 AWS 계정이 로그 이벤트를 동일한 대상으로 전송할 수 있도록 대상 ARN(arn:aws:logs:us-east-1:999999999999:destination:testDestination)을 이들과 공유할 수 있습니다. 그러면 이러한 다른 전송 계정 사용자는 이 대상에 해당되는 로그 그룹에 대한 구독 필터를 생성합니다. 그 즉시 구독 필터는 실시간으로 선택한 로그 그룹에서 지정된 스트림으로 로그 데이터를 이동시키기 시작합니다.

**참고**  
전체 조직에 구독 필터에 대한 권한을 부여하는 경우 [2단계: (조직을 사용하는 경우에만) IAM 역할 생성](CreateSubscriptionFilter-IAMrole.md)에서 생성한 IAM 역할의 ARN을 사용해야 합니다.

다음 예제에서는 전송 계정에 구독 필터가 생성됩니다.이 필터는 이벤트가 포함된 AWS CloudTrail 로그 그룹과 연결되어 "루트" AWS 자격 증명에 의해 기록된 모든 활동이 이전에 생성한 대상으로 전달됩니다. 이 대상에서는 'RecipientStream'이라는 스트림을 캡슐화합니다.

다음 섹션의 나머지 단계에서는 *AWS CloudTrail 사용 설명서*의 [CloudWatch Logs로 CloudTrail 이벤트 전송](https://docs.aws.amazon.com/awscloudtrail/latest/userguide/send-cloudtrail-events-to-cloudwatch-logs.html) 지침을 따른 후 CloudTrail 이벤트를 포함하는 로그 그룹을 만들었다고 가정합니다. 이 단계에서는 이 로그 그룹의 이름이 `CloudTrail/logs`라고 가정합니다.

다음 명령을 입력할 때는[3단계: 교차 계정 대상에 대한 IAM 권한 추가/검증](Subscription-Filter-CrossAccount-Permissions.md)에서 IAM 사용자로 로그인하거나 정책을 추가한 IAM 역할을 사용하여 로그인해야 합니다.

```
aws logs put-subscription-filter \
    --log-group-name "CloudTrail/logs" \
    --filter-name "RecipientStream" \
    --filter-pattern "{$.userIdentity.type = Root}" \
    --destination-arn "arn:aws:logs:region:999999999999:destination:testDestination"
```

로그 그룹과 대상은 동일한 AWS 리전에 있어야 합니다. 그러나 대상은 다른 리전에 있는 Amazon Kinesis Data Streams 스트림과 같은 AWS 리소스를 가리킬 수 있습니다.

# 로그 이벤트 흐름 검증
<a name="ValidateLogEventFlow"></a>

구독 필터를 생성하고 나면 CloudWatch Logs가 들어오는 모든 로그 이벤트 중에서 필터 패턴과 일치하는 이벤트를 "**RecipientStream**"이라는 대상 스트림 내에서 캡슐화된 스트림으로 전달합니다. 대상 소유자는 **aws kinesis get-shard-iterator** 명령을 사용하여 Amazon Kinesis Data Streams 샤드를 캡처하고 **aws kinesis get-records** 명령을 사용하여 일부 Amazon Kinesis Data Streams 레코드를 가져와서이 문제가 발생하고 있는지 확인할 수 있습니다.

```
aws kinesis get-shard-iterator \
      --stream-name RecipientStream \
      --shard-id shardId-000000000000 \
      --shard-iterator-type TRIM_HORIZON

{
    "ShardIterator":
    "AAAAAAAAAAFGU/kLvNggvndHq2UIFOw5PZc6F01s3e3afsSscRM70JSbjIefg2ub07nk1y6CDxYR1UoGHJNP4m4NFUetzfL+wev+e2P4djJg4L9wmXKvQYoE+rMUiFq+p4Cn3IgvqOb5dRA0yybNdRcdzvnC35KQANoHzzahKdRGb9v4scv+3vaq+f+OIK8zM5My8ID+g6rMo7UKWeI4+IWiKEXAMPLE"
}

aws kinesis get-records \
      --limit 10 \
      --shard-iterator
      "AAAAAAAAAAFGU/kLvNggvndHq2UIFOw5PZc6F01s3e3afsSscRM70JSbjIefg2ub07nk1y6CDxYR1UoGHJNP4m4NFUetzfL+wev+e2P4djJg4L9wmXKvQYoE+rMUiFq+p4Cn3IgvqOb5dRA0yybNdRcdzvnC35KQANoHzzahKdRGb9v4scv+3vaq+f+OIK8zM5My8ID+g6rMo7UKWeI4+IWiKEXAMPLE"
```

**참고**  
Amazon Kinesis Data Streams가 데이터를 반환하기 전에 get-records 명령을 몇 번 다시 실행해야 할 수 있습니다.

Amazon Kinesis Data Streams 레코드 배열이 포함된 응답이 표시됩니다. Amazon Kinesis Data Streams 레코드의 데이터 속성은 gzip 형식으로 압축된 다음 base64로 인코딩됩니다. 다음 Unix 명령을 사용하여 명령 줄에서 원시 데이터를 검토할 수 있습니다.

```
echo -n "<Content of Data>" | base64 -d | zcat
```

디코딩 및 압축 해제된 base64 데이터는 다음 구조를 가진 JSON으로 포맷됩니다.

```
{
    "owner": "111111111111",
    "logGroup": "CloudTrail/logs",
    "logStream": "111111111111_CloudTrail/logs_us-east-1",
    "subscriptionFilters": [
        "RecipientStream"
    ],
    "messageType": "DATA_MESSAGE",
    "logEvents": [
        {
            "id": "3195310660696698337880902507980421114328961542429EXAMPLE",
            "timestamp": 1432826855000,
            "message": "{\"eventVersion\":\"1.03\",\"userIdentity\":{\"type\":\"Root\"}"
        },
        {
            "id": "3195310660696698337880902507980421114328961542429EXAMPLE",
            "timestamp": 1432826855000,
            "message": "{\"eventVersion\":\"1.03\",\"userIdentity\":{\"type\":\"Root\"}"
        },
        {
            "id": "3195310660696698337880902507980421114328961542429EXAMPLE",
            "timestamp": 1432826855000,
            "message": "{\"eventVersion\":\"1.03\",\"userIdentity\":{\"type\":\"Root\"}"
        }
    ]
}
```

이 데이터 구조에서의 키 요소는 다음과 같습니다.

**owner**  
원본 로그 데이터의 AWS 계정 ID입니다.

**logGroup**  
원본 로그 데이터의 로그 그룹 이름.

**logStream**  
원본 로그 데이터의 로그 스트림 이름.

**subscriptionFilters**  
원본 로그 데이터과 일치한 구독 필터 이름 목록입니다.

**messageType**  
데이터 메시지는 'DATA\$1MESSAGE' 유형을 사용합니다. CloudWatch Logs는 주로 대상에 연결할 수 있는지 확인하기 위해 "CONTROL\$1MESSAGE" 유형의 Amazon Kinesis Data Streams 레코드를 내보낼 수 있습니다.

**logEvents**  
로그 이벤트 레코드의 배열로 표현되는 실제 로그 데이터. ID 속성은 모든 로그 이벤트의 고유 식별자입니다.

# 런타임 시 대상 멤버십 수정
<a name="ModifyDestinationMembership"></a>

소유된 대상에서 몇몇 사용자의 멤버십을 추가 또는 제거해야 하는 상황에 직면할 수 있습니다. 새 액세스 정책과 함께 대상에 `put-destination-policy` 명령을 사용할 수 있습니다. 다음 예제에서는 이전에 추가한 계정인 **111111111111**이 추가적인 로그 데이터 전송을 중단하고 계정 **222222222222**가 활성화됩니다.

1. 대상 **testDestination**에 현재 연결된 정책을 가져와서 **AccessPolicy**를 적어둡니다.

   ```
   aws logs describe-destinations \
       --destination-name-prefix "testDestination"
   
   {
    "Destinations": [
      {
        "DestinationName": "testDestination",
        "RoleArn": "arn:aws:iam::999999999999:role/CWLtoKinesisRole",
        "DestinationArn": "arn:aws:logs:region:999999999999:destination:testDestination",
        "TargetArn": "arn:aws:kinesis:region:999999999999:stream/RecipientStream",
        "AccessPolicy": "{\"Version\": \"2012-10-17\", \"Statement\": [{\"Sid\": \"\", \"Effect\": \"Allow\", \"Principal\": {\"AWS\": \"111111111111\"}, \"Action\": \"logs:PutSubscriptionFilter\", \"Resource\": \"arn:aws:logs:region:999999999999:destination:testDestination\"}] }"
      }
    ]
   }
   ```

1. 계정 **111111111111**이 중단되고 계정 **222222222222**가 활성화되었음을 반영하도록 이 정책을 업데이트합니다. **\$1/NewAccessPolicy.json** 파일에 이 정책을 저장합니다.

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

****  

   ```
   {
       "Version":"2012-10-17",		 	 	 
       "Statement": [
           {
               "Sid": "",
               "Effect": "Allow",
               "Principal": {
                   "AWS": "222222222222"
               },
               "Action": "logs:PutSubscriptionFilter",
               "Resource": "arn:aws:logs:us-east-1:999999999999:destination:testDestination"
           }
       ]
   }
   ```

------

1. **PutDestinationPolicy**를 직접 호출하여 **NewAccessPolicy.json** 파일에 정의된 정책을 대상에 연결합니다.

   ```
   aws logs put-destination-policy \
   --destination-name "testDestination" \
   --access-policy file://~/NewAccessPolicy.json
   ```

   이렇게 하면 계정 ID **111111111111**에서 로그 이벤트가 비활성화됩니다. 계정 ID **222222222222**에서 나온 로그 이벤트는 계정 **222222222222** 의 소유자가 구독 필터를 생성하고 나면 그 즉시 대상으로 이동하기 시작합니다.