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

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

1단계: 대상 생성

중요

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

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

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

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

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

    aws kinesis create-stream --stream-name "RecipientStream" --shard-count 1
  2. 스트림이 활성 상태가 될 때까지 기다립니다. aws kinesis describe-stream 명령을 사용하여 StreamDescription.StreamStatus 속성을 확인할 수 있습니다. 또한 StreamDescription.StreamARN 값을 기록해 둡니다. 나중에 CloudWatch 로그에 전달하기 때문입니다.

    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~2분 정도 기다려야 할 수 있습니다.

  3. CloudWatch Logs에 스트림에 데이터를 넣을 수 있는 권한을 부여하는 IAM 역할을 생성합니다. 먼저 ~/TrustPolicyForCWL.json 파일에 신뢰 정책을 생성해야 합니다. 텍스트 편집기를 사용하여 이 정책 파일을 생성하고 IAM 콘솔을 사용하지 마세요.

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

    { "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" } }
  4. aws iam create-role 명령을 사용하여 IAM 역할을 생성하고 신뢰 정책 파일을 지정합니다. 반환된 Role.Arn 값은 나중에 CloudWatch Logs에 전달되기 때문에 기록해 둡니다.

    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" } }
  5. 권한 정책을 생성하여 CloudWatch 로그가 계정에서 수행할 수 있는 작업을 정의합니다. 먼저 텍스트 편집기를 사용하여 ~/PermissionsForCWL.json 파일에 권한 정책을 생성합니다.

    { "Statement": [ { "Effect": "Allow", "Action": "kinesis:PutRecord", "Resource": "arn:aws:kinesis:region:999999999999:stream/RecipientStream" } ] }
  6. aws iam put-role-policy 명령을 사용하여 권한 정책을 역할과 연결합니다.

    aws iam put-role-policy \ --role-name CWLtoKinesisRole \ --policy-name Permissions-Policy-For-CWL \ --policy-document file://~/PermissionsForCWL.json
  7. 스트림이 활성 상태이고 IAM 역할을 생성한 후 CloudWatch 로그 대상을 생성할 수 있습니다.

    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" }
    2. 7a 단계를 완료한 후 로그 데이터 수신자 계정에서 액세스 정책을 대상과 연결합니다. 이 정책은 로그:PutSubscriptionFilter 작업을 지정하고 발신자 계정에 대상에 액세스할 수 있는 권한을 부여해야 합니다.

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

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

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

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

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

      { "Version" : "2012-10-17", "Statement" : [ { "Sid" : "", "Effect" : "Allow", "Principal" : { "AWS" : "111111111111" }, "Action" : "logs:PutSubscriptionFilter", "Resource" : "arn:aws:logs:region:999999999999:destination:testDestination" } ] }
    3. 이전 단계에서 생성한 정책을 대상에 연결합니다.

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

      이 액세스 정책을 사용하면 ID가 111111111111인 AWS 계정의 사용자가 ARN arn:aws:logsPutSubscriptionFilter:region:999999999999:destination:testDestination. 이 대상에 PutSubscriptionFilter 대한 다른 사용자의 호출 시도는 거부됩니다.

      액세스 정책에 대한 사용자의 권한을 검증하려면 IAM 사용 설명서정책 검증기 사용을 참조하세요.

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