2단계: 대상 생성 - Amazon CloudWatch Logs

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

2단계: 대상 생성

중요

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

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

대상을 생성하려면
  1. 1단계: Firehose 전송 스트림 생성에서 생성한 Firehose 스트림이 활성화될 때까지 기다립니다. 다음 명령을 사용하여 StreamDescription.StreamStatus 속성을 확인할 수 있습니다.

    aws firehose describe-delivery-stream --delivery-stream-name "my-delivery-stream"

    뿐만 아니라 이후 단계에서 필요할 수 있기 때문에 DeliveryStreamDescription.DeliveryStreamARN 값을 적어둡니다. 이 명령의 샘플 출력:

    { "DeliveryStreamDescription": { "DeliveryStreamName": "my-delivery-stream", "DeliveryStreamARN": "arn:aws:firehose:us-east-1:222222222222:deliverystream/my-delivery-stream", "DeliveryStreamStatus": "ACTIVE", "DeliveryStreamEncryptionConfiguration": { "Status": "DISABLED" }, "DeliveryStreamType": "DirectPut", "VersionId": "1", "CreateTimestamp": "2021-02-01T23:59:15.567000-08:00", "Destinations": [ { "DestinationId": "destinationId-000000000001", "S3DestinationDescription": { "RoleARN": "arn:aws:iam::222222222222:role/FirehosetoS3Role", "BucketARN": "arn:aws:s3:::amzn-s3-demo-bucket", "BufferingHints": { "SizeInMBs": 5, "IntervalInSeconds": 300 }, "CompressionFormat": "UNCOMPRESSED", "EncryptionConfiguration": { "NoEncryptionConfig": "NoEncryption" }, "CloudWatchLoggingOptions": { "Enabled": false } }, "ExtendedS3DestinationDescription": { "RoleARN": "arn:aws:iam::222222222222:role/FirehosetoS3Role", "BucketARN": "arn:aws:s3:::amzn-s3-demo-bucket", "BufferingHints": { "SizeInMBs": 5, "IntervalInSeconds": 300 }, "CompressionFormat": "UNCOMPRESSED", "EncryptionConfiguration": { "NoEncryptionConfig": "NoEncryption" }, "CloudWatchLoggingOptions": { "Enabled": false }, "S3BackupMode": "Disabled" } } ], "HasMoreDestinations": false } }

    전송 스트림이 활성 상태가 될 때까지 1~2분 정도 기다려야 할 수 있습니다.

  2. 전송 스트림이 활성 상태가 되면 Firehose 스트림으로 데이터를 입력하는 데 필요한 권한을 CloudWatch Logs에 부여하는 IAM 역할을 생성합니다. 먼저 신뢰 정책을 ~/TrustPolicyForCWL.json 파일로 생성해야 합니다. 텍스트 편집기를 사용하여 이 정책을 생성하세요. CloudWatch Logs 엔드포인트에 대한 자세한 내용은 Amazon CloudWatch Logs 엔드포인트 및 할당량을 참조하세요.

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

    { "Statement": { "Effect": "Allow", "Principal": { "Service": "logs.amazonaws.com" }, "Action": "sts:AssumeRole", "Condition": { "StringLike": { "aws:SourceArn": [ "arn:aws:logs:region:sourceAccountId:*", "arn:aws:logs:region:recipientAccountId:*" ] } } } }
  3. aws iam create-role 명령을 사용하여 IAM 역할을 생성해 방금 만든 신뢰 정책 파일을 지정합니다.

    aws iam create-role \ --role-name CWLtoKinesisFirehoseRole \ --assume-role-policy-document file://~/TrustPolicyForCWL.json

    다음은 출력 샘플입니다. 이후 단계에서 사용해야 하므로 반환된 Role.Arn 값을 메모해 둡니다.

    { "Role": { "Path": "/", "RoleName": "CWLtoKinesisFirehoseRole", "RoleId": "AROAR3BXASEKYJYWF243H", "Arn": "arn:aws:iam::222222222222:role/CWLtoKinesisFirehoseRole", "CreateDate": "2023-02-02T08:10:43+00:00", "AssumeRolePolicyDocument": { "Statement": { "Effect": "Allow", "Principal": { "Service": "logs.amazonaws.com" }, "Action": "sts:AssumeRole", "Condition": { "StringLike": { "aws:SourceArn": [ "arn:aws:logs:region:sourceAccountId:*", "arn:aws:logs:region:recipientAccountId:*" ] } } } } } }
  4. CloudWatch Logs가 계정에서 수행할 수 있는 작업을 정의하는 권한 정책을 생성합니다. 먼저 텍스트 편집기를 사용하여 권한 정책을 ~/PermissionsForCWL.json 파일로 생성합니다.

    { "Statement":[ { "Effect":"Allow", "Action":["firehose:*"], "Resource":["arn:aws:firehose:region:222222222222:*"] } ] }
  5. 다음 명령을 입력하여 권한 정책을 역할에 연결합니다.

    aws iam put-role-policy --role-name CWLtoKinesisFirehoseRole --policy-name Permissions-Policy-For-CWL --policy-document file://~/PermissionsForCWL.json
  6. Firehose 전송 스트림이 활성 상태이고 IAM 역할을 생성하고 나면 CloudWatch Logs 대상을 생성할 수 있습니다.

    1. 이 단계를 수행했다고 액세스 정책이 대상에 연결되는 것은 아니며, 대상 생성을 완료하기 위한 두 단계 중 첫 번째 단계일 뿐입니다. 페이로드에서 반환된 새 대상의 ARN은 이후 단계에서 destination.arn으로 사용할 것이므로 메모해 둡니다.

      aws logs put-destination \ --destination-name "testFirehoseDestination" \ --target-arn "arn:aws:firehose:us-east-1:222222222222:deliverystream/my-delivery-stream" \ --role-arn "arn:aws:iam::222222222222:role/CWLtoKinesisFirehoseRole" { "destination": { "destinationName": "testFirehoseDestination", "targetArn": "arn:aws:firehose:us-east-1:222222222222:deliverystream/my-delivery-stream", "roleArn": "arn:aws:iam::222222222222:role/CWLtoKinesisFirehoseRole", "arn": "arn:aws:logs:us-east-1:222222222222:destination:testFirehoseDestination"} }
    2. 이전 단계를 완료한 후 로그 데이터 수신자 계정(222222222222)에서 액세스 정책을 대상과 연결합니다. 이 정책을 사용하면 로그 데이터 발신자 계정(111111111111)이 로그 데이터 수신자 계정(222222222222)만의 대상에 액세스할 수 있습니다. 텍스트 편집기를 사용하여 이 정책을~/AccessPolicy.json 파일에 저장할 수 있습니다.

      { "Version" : "2012-10-17", "Statement" : [ { "Sid" : "", "Effect" : "Allow", "Principal" : { "AWS" : "111111111111" }, "Action" : ["logs:PutSubscriptionFilter","logs:PutAccountPolicy"], "Resource" : "arn:aws:logs:us-east-1:222222222222:destination:testFirehoseDestination" } ] }
    3. 이렇게 하면 대상에 대해 쓰기 액세스 권한을 가진 사람을 정의하는 정책이 생성됩니다. 이 정책은 대상에 액세스하기 위해 logs:PutSubscriptionFilterlogs:PutAccountPolicy 작업을 지정해야 합니다. 교차 계정 사용자는 PutSubscriptionFilterPutAccountPolicy 작업을 사용하여 대상에 로그 이벤트를 전송합니다.

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