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

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

1단계: 대상 생성

중요

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

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

이 예제에서는 RecipientStream이라는 Kinesis Data Streams 스트림과 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 속성을 확인할 수 있습니다. 또한 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~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 역할을 생성합니다. 이 또한 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" } }
  5. CloudWatch Logs가 계정에서 수행할 수 있는 작업을 정의하는 권한 정책을 생성합니다. 먼저 텍스트 편집기를 사용하여 권한 정책을 ~/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 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" }
    2. 7a 단계를 완료한 후 로그 데이터 수신자 계정에서 액세스 정책을 대상과 연결합니다. 이 정책은 logs:PutSubscriptionFilter 작업을 지정해야 하며, 발신자 계정에 대상에 액세스할 권한을 부여합니다.

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

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

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

      { "Version" : "2012-10-17", "Statement" : [ { "Sid" : "", "Effect" : "Allow", "Principal" : "*", "Action" : ["logs:PutSubscriptionFilter","logs:PutAccountPolicy"], "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","logs:PutAccountPolicy"], "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:logs:region:999999999999:destination:testDestination인 대상에 대해 PutSubscriptionFilter를 호출할 수 있습니다. 다른 사용자가 이 대상에 대해 PutSubscriptionFilter를 호출하려는 시도는 모두 거부됩니다.

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

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