

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

# 1단계: 대상 생성
<a name="CreateDestination-Account"></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": "2023-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",
                      "logs:PutAccountPolicy"
                  ],
                  "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",
                      "logs:PutAccountPolicy"
                  ],
                  "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-Account.md). Organizations를 사용하는 대신 다른 계정에 직접 권한을 부여하는 경우 해당 단계를 건너뛰고 [3단계: 계정 수준 구독 필터 정책 생성](CreateSubscriptionFilter-Account.md) 단계로 넘어갑니다.