기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.
1단계: 대상 생성
중요
이 절차의 모든 단계는 로그 데이터 수신자 계정에서 수행되어야 합니다.
이 예제에서 로그 데이터 수신자 계정의 AWS계정 ID는 999999999999이고 로그 데이터 발신자 AWS계정 ID는 111111111111입니다.
이 예제에서는 RecipientStream이라는 Amazon Kinesis Data Streams 스트림과 CloudWatch Logs가 데이터를 쓸 수 있는 역할을 사용하여 대상을 생성합니다.
대상이 생성되면 CloudWatch Logs는 수신자 계정을 대신하여 대상에게 테스트 메시지를 전송합니다. 구독 필터가 나중에 활성화되면 CloudWatch Logs는 소스 계정을 대신하여 대상에게 로그 이벤트를 보냅니다.
대상을 생성하려면
-
수신자 계정에서 Amazon Kinesis Data Streams에 대상 스트림을 생성합니다. 명령 프롬프트에서 다음과 같이 입력합니다.
aws kinesis create-stream --stream-name "RecipientStream" --shard-count 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~2분 정도 기다려야 할 수 있습니다.
-
스트림에 데이터를 입력하는 데 필요한 권한을 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" } } -
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" } } -
CloudWatch Logs가 계정에서 수행할 수 있는 작업을 정의하는 권한 정책을 생성합니다. 먼저 텍스트 편집기를 사용하여 권한 정책을 ~/PermissionsForCWL.json 파일로 생성합니다.
{ "Statement": [ { "Effect": "Allow", "Action": "kinesis:PutRecord", "Resource": "arn:aws:kinesis:region:999999999999:stream/RecipientStream" } ] } -
aws iam put-role-policy 명령을 사용하여 권한 정책을 역할에 연결합니다.
aws iam put-role-policy \ --role-name CWLtoKinesisRole \ --policy-name Permissions-Policy-For-CWL \ --policy-document file://~/PermissionsForCWL.json -
스트림이 활성 상태이고 IAM 역할을 생성하고 나면 CloudWatch Logs 대상을 생성할 수 있습니다.
-
이 단계를 수행해도 액세스 정책이 대상에 연결되는 것은 아니며, 대상 생성을 완료하기 위한 두 단계 중 첫 번째 단계를 완료한 것일 뿐입니다. 페이로드에 반환되는 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" } -
7a 단계를 완료한 후 로그 데이터 수신자 계정에서 액세스 정책을 대상과 연결합니다. 이 정책은 logs:PutSubscriptionFilter 작업을 지정해야 하며, 발신자 계정에 대상에 액세스할 권한을 부여합니다.
이 정책은 로그를 전송하는 AWS계정에 권한을 부여합니다. 정책에서 이 계정 하나만 지정할 수 있으며, 또는 발신자 계정이 조직의 구성원인 경우 정책은 해당 조직의 조직 ID를 지정할 수 있습니다. 이렇게 하면 정책 하나만 생성하여 한 조직의 여러 계정이 이 대상 계정으로 로그를 보내도록 할 수 있습니다.
텍스트 편집기를 사용하여 이름이
~/AccessPolicy.json이고 다음 정책 명령문 중 하나를 포함한 파일을 생성합니다.이 첫 번째 예제 정책은 ID가
o-1234567890인 조직의 모든 계정이 수신자 계정으로 로그를 보내도록 허용합니다.다음 예에서는 로그 데이터 발신자 계정(111111111111)에서만 로그 데이터 수신자 계정으로 로그를 보내도록 허용합니다.
-
이전 단계에서 생성한 정책을 대상에 연결합니다.
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 사용 설명서의 정책 검사기 사용을 참조하세요.
-
작업을 마쳤으면 교차 계정 권한AWS Organizations에를 사용하는 경우의 단계를 따릅니다2단계: (조직을 사용하는 경우에만) IAM 역할 생성. Organizations를 사용하는 대신 다른 계정에 직접 권한을 부여하는 경우 해당 단계를 건너뛰고 3단계: 계정 수준 구독 필터 정책 생성 단계로 넘어갑니다.