기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.
1단계: 대상 생성
중요
이 절차의 모든 단계는 로그 데이터 수신자 계정에서 수행해야 합니다.
이 예제에서 로그 데이터 수신자 계정의 AWS 계정 ID는 999999999999이고 로그 데이터 발신자 AWS 계정 ID는 111111111111입니다.
이 예제에서는 라는 Kinesis Data Streams 스트림 RecipientStream과 CloudWatch Logs가 데이터를 쓸 수 있는 역할을 사용하여 대상을 생성합니다.
대상이 생성되면 CloudWatch Logs는 수신자 계정을 대신하여 대상에 테스트 메시지를 보냅니다. 나중에 구독 필터가 활성화되면 CloudWatch Logs는 소스 계정을 대신하여 대상에 로그 이벤트를 보냅니다.
대상을 생성하려면
-
수신자 계정에서 Kinesis Data Streams에 대상 스트림을 생성합니다. 명령 프롬프트에서 다음과 같이 입력합니다.
aws kinesis create-stream --stream-name "RecipientStream" --shard-count 1
-
스트림이 활성 상태가 될 때까지 기다립니다. 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분 정도 기다려야 할 수 있습니다.
-
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 역할을 생성하고 신뢰 정책 파일을 지정합니다. 반환된 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" } } -
권한 정책을 생성하여 CloudWatch 로그가 계정에서 수행할 수 있는 작업을 정의합니다. 먼저 텍스트 편집기를 사용하여 ~/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 로그 대상을 생성할 수 있습니다.
-
이 단계를 수행해도 액세스 정책이 대상에 연결되는 것은 아니며, 대상 생성을 완료하기 위한 두 단계 중 첫 번째 단계를 완료한 것일 뿐입니다. 페이로드에 반환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 단계를 완료한 후 로그 데이터 수신자 계정에서 액세스 정책을 대상과 연결합니다. 이 정책은 로그: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" } ] } -
이전 단계에서 생성한 정책을 대상에 연결합니다.
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단계: 구독 필터 생성 단계로 넘어갑니다.