Kinesis Data Firehose로 Amazon CloudWatch Logs 교차 계정을 푸시하려면 어떻게 해야 합니까?

6분 분량
0

Amazon Kinesis Data Firehose에서 다른 리전의 다른 계정으로 Amazon CloudWatch Logs를 스트리밍하려고 합니다. Kinesis Data Firehose에서 다른 리전의 Amazon Simple Storage Service(Amazon S3) 버킷으로 교차 계정 스트림을 설정하려면 어떻게 해야 하나요?

간략한 설명

AWS 리전이 Kinesis Data Firehose를 지원하지 않는 경우 Amazon CloudWatch Logs를 다른 AWS 리전의 Kinesis Data Firehose 스트림으로 전송할 수 없습니다.

중요: 리전에서 Kinesis Data Firehose를 지원하는지 확인하십시오.

지원되는 리전에서 Kinesis Data Firehose를 사용하여 교차 계정 및 교차 리전 스트리밍을 설정하려면 다음 단계를 수행합니다.

1.    대상 계정에서 Amazon S3 버킷을 생성합니다. AWS Identity and Access Management(IAM) 역할을 생성합니다. 그런 다음 Kinesis Data Firehose에 필요한 권한을 첨부하여 데이터를 S3로 푸시합니다.

2.    대상 계정에서 Kinesis Data Firehose의 대상을 생성합니다. Amazon CloudWatch Logs 서비스에 대한 IAM 역할을 생성하여 Amazon Kinesis Data Firehose로 데이터를 푸시합니다. 그런 다음, 로그를 푸시할 전송 스트림의 대상을 생성합니다.

3.    VPC 흐름 로그를 활성화하고 소스 계정의 Amazon CloudWatch로 로그를 푸시합니다.

4.    소스 계정에서 대상 계정을 가리키는 구독 필터를 생성합니다.

5.    대상 계정의 Amazon S3 버킷에 있는 로그 이벤트의 흐름을 확인합니다.

해결 방법

참고: 이 문서에서는 다음 예시 값을 사용합니다.

  • 대상 계정: 111111111111
  • Kinesis Data Firehose 리전: us-east-1
  • S3 버킷 리전: us-west-2
  • 대상 리전(소스 계정에서 로그 수신): us-east-2
  • 소스 계정: 222222222222
  • Amazon CloudWatch 로그 그룹 리전: us-east2
  • VPC 흐름 로그 리전: us-east-2

대상 계정 설정

1.    Amazon S3 버킷을 생성합니다.

aws s3api create-bucket --bucket my-bucket --create-bucket-configuration LocationConstraint=us-west-2 --region us-west-2

위치 제약 조건은 버킷이 us-west-2 리전에 생성됨을 나타냅니다.

2.    Kinesis Data Firehose에 필요한 권한을 부여하는 IAM 역할 및 신뢰 정책을 생성합니다.

{
    "Statement": {
        "Effect": "Allow",
        "Principal": {
            "Service": "firehose.amazonaws.com"
        },
        "Action": "sts:AssumeRole",
        "Condition": {
            "StringEquals": {
                "sts:ExternalId": "111111111111"
            }
        }
    }
}

권한 설정 시 생성한 Amazon S3 버킷에 Kinesis Data Firehose가 데이터를 입력할 수 있도록 허용해야 합니다. ‘111111111111’을 AWS 계정 ID로 바꿉니다.

3.    IAM 역할을 생성하고 신뢰 정책 파일을 지정합니다.

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

참고: 이후 단계에서는 Role_Arn 값을 사용합니다.

4.    JSON 파일로 권한 정책을 생성하여 Kinesis Data Firehose가 대상 계정에서 수행할 수 있는 작업을 정의합니다.

{
  "Statement": [
    {
      "Effect":
    "Allow",
      "Action": [ 
          "s3:AbortMultipartUpload", 
          "s3:GetBucketLocation", 
          "s3:GetObject", 
          "s3:ListBucket", 
          "s3:ListBucketMultipartUploads", 
          "s3:PutObjectAcl",
          "s3:PutObject"
    ],
      "Resource": [ 
          "arn:aws:s3:::my-bucket", 
          "arn:aws:s3:::my-bucket/*" ]
    }
    ]
}

5.    권한 정책을 IAM 역할과 연결합니다.

aws iam put-role-policy --role-name FirehosetoS3Role --policy-name Permissions-Policy-For-Firehose --policy-document file://~/PermissionsForFirehose.json

6.    Kinesis Data Firehose에 대한 대상 전송 스트림 생성:

aws firehose create-delivery-stream --delivery-stream-name 'my-delivery-stream' --s3-destination-configuration RoleARN='arn:aws:iam::111111111111:role/FirehosetoS3Role',BucketARN='arn:aws:s3:::my-bucket' --region us-east-1

"RoleARN" 및 "BucketARN"을 사용자가 생성한 역할 및 버킷 Amazon 리소스 이름(ARN)으로 바꿉니다.

참고: Amazon S3 객체가 Kinesis Data Firehose에 성공적으로 전송되면 timestamp 네임스페이스 표현식에 사용자 지정 접두사가 사용됩니다. 시간 형식 접두사(yyyy/MM/dd/HH/) 앞에 추가 접두사를 추가하여 지정할 수 있습니다 . 접두사가 슬래시(/)로 끝나는 경우 S3 버킷에 폴더로 나타납니다.

7.    describe-delivery-stream 명령을 사용하여 DeliveryStreamDescription.DeliveryStreamStatus 속성을 확인합니다.

aws firehose describe-delivery-stream --delivery-stream-name "my-delivery-stream" --region us-east-1

describe-delivery-stream 명령 출력을 보고 스트림이 활성 상태인지 확인합니다.

{
    "DeliveryStreamDescription": {
        "DeliveryStreamType": "DirectPut", 
        "HasMoreDestinations": false, 
        "DeliveryStreamEncryptionConfiguration": {
            "Status": "DISABLED"
        }, 
        "VersionId": "1", 
        "CreateTimestamp": 1604484348.804, 
        "DeliveryStreamARN": "arn:aws:firehose:us-east-1:111111111111:deliverystream/my-delivery-stream", 
        "DeliveryStreamStatus": "ACTIVE", 
        "DeliveryStreamName": "my-delivery-stream", 
        "Destinations": [
            {
                "DestinationId": "destinationId-000000000001", 
                "ExtendedS3DestinationDescription": {
                    "RoleARN": "arn:aws:iam::111111111111:role/FirehosetoS3Role2test", 
                    "BufferingHints": {
                        "IntervalInSeconds": 300, 
                        "SizeInMBs": 5
                    }, 
                    "EncryptionConfiguration": {
                        "NoEncryptionConfig": "NoEncryption"
                    }, 
                    "CompressionFormat": "UNCOMPRESSED", 
                    "S3BackupMode": "Disabled", 
                    "CloudWatchLoggingOptions": {
                        "Enabled": false
                    }, 
                    "BucketARN": "arn:aws:s3:::my-bucket"
                }, 
                "S3DestinationDescription": {
                    "RoleARN": "arn:aws:iam::111111111111:role/FirehosetoS3Role2test", 
                    "BufferingHints": {
                        "IntervalInSeconds": 300, 
                        "SizeInMBs": 5
                    }, 
                    "EncryptionConfiguration": {
                        "NoEncryptionConfig": "NoEncryption"
                    }, 
                    "CompressionFormat": "UNCOMPRESSED", 
                    "CloudWatchLoggingOptions": {
                        "Enabled": false
                    }, 
                    "BucketARN": "arn:aws:s3:::my-bucket"
                }
            }
        ]
    }
}

참고: 이후 단계에서 DeliveryStreamDescription.DeliveryStreamARN 값을 사용합니다.

8.    Kinesis Data Firehose 스트림에 데이터를 넣을 수 있는 권한을 CloudWatch Logs에 부여하는 IAM 역할 및 신뢰 정책을 생성합니다. 로그가 푸시되는 리전을 추가해야 합니다.

{
  "Statement": {
    "Effect": "Allow",
    "Principal": {
  "Service": [
    "logs.us-east-1.amazonaws.com",
    "logs.us-east-2.amazonaws.com"
    
  ]
},
    "Action": "sts:AssumeRole"
  }
}

9.    create-role 명령을 사용하여 IAM 역할을 생성하고 신뢰 정책 파일을 지정합니다.

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

참고: 이후 단계에서 반환된 Role_Arn 값을 사용합니다.

10.    권한 정책을 생성하여 CloudWatch Logs가 대상 계정에서 수행할 수 있는 작업을 정의합니다.

{
    "Statement":[
      {
        "Effect":"Allow",
        "Action":["firehose:*"],
       
    "Resource":["arn:aws:firehose:us-east-1:111111111111:*"]
      },
      {
        "Effect":"Allow",
        "Action":["iam:PassRole"],
       
    "Resource":["arn:aws:iam::111111111111:role/CWLtoKinesisFirehoseRole"]
      }
    ]
}

7단계의 DeliveryStreamDescription.DeliveryStreamARN 값 및 9단계의 Role_Arn 값을 사용합니다.

11.    put-role-policy 명령을 사용하여 권한 정책을 역할에 연결합니다.

aws iam put-role-policy --role-name CWLtoKinesisFirehoseRole --policy-name Permissions-Policy-For-CWL --policy-document file://~/PermissionsForCWL.json

12.    put-destination API 호출을 사용하여 대상 계정에서 대상을 생성합니다. 이는 소스 계정이 모든 로그를 보내는 대상입니다.

aws logs put-destination --destination-name "myDestination" --target-arn "arn:aws:firehose:us-east-1:111111111111:deliverystream/my-delivery-stream"
--role-arn "arn:aws:iam::111111111111:role/CWLtoKinesisFirehoseRole" --region us-east-2

참고: Kinesis Data Firehose가 지원되는 모든 리전에서 전송 스트림의 대상을 생성할 수 있습니다. 대상을 생성하는 리전은 로그 소스 리전과 동일해야 합니다.

13.    Amazon CloudWatch 대상에 대한 액세스 정책을 생성합니다.

{
"Version" : "2012-10-17",
"Statement" : [
{
"Sid" : "",
"Effect" : "Allow",
"Principal" : {
"AWS" : "222222222222"
},
"Action" : "logs:PutSubscriptionFilter",
"Resource" : "arn:aws:logs:us-east-2:111111111111:destination:myDestination"
}
]
}

‘222222222222’를 생성한 Amazon Virtual Private Cloud(Amazon VPC) 로그가 있는 AWS 소스 계정으로 바꿉니다.

14.    액세스 정책을 Amazon CloudWatch 대상에 연결합니다.

aws logs put-destination-policy --destination-name "myDestination" --access-policy file://~/AccessPolicy.json --region us-east-2

15.    다음 명령을 실행하여 대상을 확인합니다.

aws logs describe-destinations --region us-east-2

소스 계정 설정

참고: 소스 계정의 IAM 관리자 사용자 또는 루트 사용자여야 합니다. 1.    IAM 역할 및 신뢰 정책을 생성하여 CloudWatch Logs 로그 그룹에 데이터를 전송할 수 있는 권한을 VPC 흐름 로그에 부여합니다.

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "",
            "Effect": "Allow",
            "Principal":
          {
            "Service": "vpc-flow-logs.amazonaws.com"
          },
        "Action": "sts:AssumeRole"
       }
    ]
}

2.    다음 명령을 사용하여 IAM 역할을 생성하고 생성한 신뢰 정책 파일을 지정합니다.

aws iam create-role --role-name PublishFlowLogs --assume-role-policy-document file://~/TrustPolicyForVPCFlowLogs.json

참고: 이후 단계에서 VPC 흐름 로그에 전달하는 데 반환된 ARN 값을 사용합니다.

3.    권한 정책을 생성하여 소스 계정에서 VPC Flow Logs가 수행할 수 있는 작업을 정의합니다.

{
    "Version": "2012-10-17",
    "Statement": [
        {
        "Action": [
            "logs:CreateLogGroup",
            "logs:CreateLogStream",
            "logs:PutLogEvents",
            "logs:DescribeLogGroups",
            "logs:DescribeLogStreams"    
            ],
        "Effect": "Allow",
        "Resource": "*"
        }
   ]
}

4.    다음 명령을 실행하여 권한 정책을 IAM 역할에 연결합니다.

aws iam put-role-policy --role-name PublishFlowLogs --policy-name Permissions-Policy-For-VPCFlowLogs --policy-document file://~/PermissionsForVPCFlowLogs.json

5.    VPC 흐름 로그의 대상을 구성하기 위해 CloudWatch Logs 로그 그룹을 생성합니다.

aws logs create-log-group --log-group-name vpc-flow-logs --region us-east-2

6.    다음 명령을 실행하여 VPC 흐름 로그를 활성화합니다.

aws ec2 create-flow-logs --resource-type VPC --resource-ids vpc-12345678 --traffic-type ALL --log-group-name vpc-flow-logs --deliver-logs-permission-arn arn:aws:iam::222222222222:role/PublishFlowLogs --region us-east-2

--resource-ids--deliver-logs-permission-arn 자리 표시자 값을 VPC ID 및 VPC 흐름 로그 역할로 바꿉니다.

7.    대상 계정의 Kinesis Data Firehose에 대한 CloudWatch Logs 로그 그룹을 구독합니다.

aws logs put-subscription-filter --log-group-name "vpc-flow-logs" --filter-name "AllTraffic" --filter-pattern "" --destination-arn 
"arn:aws:logs:us-east-1:111111111111:destination:myDestination" --region us-east-2

--destination ARN 값을 업데이트하고 "111111111111"을 대상 계정 번호로 바꿉니다.

8.    Amazon S3 버킷을 보고 로그가 게시되었는지 확인합니다.


관련 정보

DeliveryStreamDescription

AWS 공식
AWS 공식업데이트됨 일 년 전