계정 간에 CloudWatch Logs를 Amazon Data Firehose로 푸시하려면 어떻게 해야 합니까?

5분 분량
0

Amazon Data Firehose에서 다른 AWS 리전의 다른 AWS 계정으로 Amazon CloudWatch Logs를 스트리밍하고 싶습니다.

해결 방법

CloudWatch 로그를 다른 리전의 Firehose 스트림으로 전송하려면 해당 리전이 Firehose를 지원해야 합니다.

해결 명령에서 다음 값을 원하는 값으로 바꿉니다.

  • 111111111111을 대상 계정의 ID로
  • us-east-1을 Firehose 리전으로
  • us-west-2를 Amazon Simple Storage Service(Amazon S3) 버킷 리전으로
  • us-east-2를 대상 계정의 리전으로
  • 222222222222를 소스 계정의 ID로
  • us-east2를 CloudWatch 로그 그룹 리전으로
  • us-east-2를 Amazon Virtual Private Cloud(Amazon VPC) 흐름 로그 리전으로
  • -arn을 리소스의 ARN으로

참고: AWS Command Line Interface(AWS CLI) 명령을 실행할 때 오류가 발생하면 AWS CLI 오류 문제 해결을 참조하십시오. 또한 최신 AWS CLI 버전을 사용하고 있는지 확인하십시오.

대상 계정 설정

다음 단계를 완료합니다.

  1. Amazon S3 버킷 생성:

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

    참고: 이후 단계에서 사용할 수 있도록 출력에서 버킷의 ARN을 기록해 둡니다.

  2. Firehose가 Amazon S3에 데이터를 푸시하는 데 필요한 권한이 있는 신뢰 정책을 만듭니다.

    {
      "Statement": {
        "Effect": "Allow",
        "Principal": {
          "Service": "firehose.amazonaws.com"
        },
        "Action": "sts:AssumeRole",
        "Condition": {
          "StringEquals": {
            "sts:ExternalId": "111111111111"
          }
        }
      }
    }
  3. create-role 명령을 실행하여 IAM 역할을 생성하고 신뢰 정책을 지정합니다.

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

    참고: 이후 단계에서 사용할 수 있도록 출력에서 역할의 ARN을 기록해 둡니다.

  4. Firehose가 대상 계정에서 수행할 수 있는 작업을 정의하려면 JSON 편집기를 사용하여 권한 정책을 생성합니다.

    {
        "Version": "2012-10-17",
        "Statement": [
          {
            "Effect": "Allow",
            "Action": [
              "s3:AbortMultipartUpload",
              "s3:GetBucketLocation",
              "s3:GetObject",
              "s3:ListBucket",
              "s3:ListBucketMultipartUploads",
              "s3:PutObject"
            ],
            "Resource": [
              "arn:aws:s3:::my-bucket",
              "arn:aws:s3:::my-bucket/*"
            ]
          }
        ]
      }
  5. put-role-policy 명령을 실행하여 권한 정책을 IAM 역할과 연결합니다.

    aws iam put-role-policy --role-name FirehosetoS3Role --policy-name Permissions-Policy-For-Firehose --policy-document file://~/PermissionsForFirehose.json
  6. 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

    참고: RoleARNBucketARN을 사용자의 역할 및 버킷 ARN으로 교체합니다.
    S3 객체를 Firehose에 전달하면 타임스탬프 네임스페이스 표현식에 사용자 지정 접두사가 사용됩니다. 시간 형식의 시작 부분에 추가 접두사(yyyy/MM/dd/HH/)를 지정할 수 있습니다. 접두사가 슬래시(/)로 끝나면 S3 버킷에 폴더로 표시됩니다.

  7. DeliveryStreamDescription.DeliveryStreamStatus 속성을 확인하려면 describe-delivery-stream 명령을 실행합니다.

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

    스트림이 활성 상태인지 확인하려면 명령의 출력을 확인합니다.

    {
      "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"
            }
          }
        ]
      }
    }

    참고: 이후 단계에서 사용할 스트림의 ARN을 기록해 둡니다.

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

    {
      "Version": "2012-10-17",
      "Statement": {
        "Effect": "Allow",
        "Principal": {
          "Service": "logs.us-east-2.amazonaws.com"
        },
        "Action": "sts:AssumeRole",
        "Condition": {
          "StringLike": {
            "aws:SourceArn": [
              "arn:aws:logs:us-east-2:sourceAccountId:*",
              "arn:aws:logs:us-east-2:recipientAccountId:*"
            ]
          }
        }
      }
    }
  9. Firehose 스트림에 데이터를 넣기 위한 추가 IAM 역할을 생성하고 신뢰 정책 파일을 지정하려면 create-role 명령을 실행합니다.

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

    참고: 이후 단계에서 사용할 역할의 ARN을 기록해 둡니다.

  10. 권한 정책을 생성하여 대상 계정에서 CloudWatch Logs가 수행할 작업을 정의합니다. 스트림의 ARN과 역할의 ARN을 포함합니다.

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": "firehose:ListDeliveryStreams",
            "Resource": "*"
        },
        {
            "Effect": "Allow",
            "Action": [
                "firehose:DescribeDeliveryStream",
                "firehose:PutRecord",
                "firehose:PutRecordBatch"
            ],
            "Resource": "arn:aws:firehose:us-east-1:111111111111:deliverystream/my-delivery-stream"
        }
    ]
}
  1. 역할과 권한 정책을 연결하려면 put-role-policy 명령을 실행합니다.
aws iam put-role-policy --role-name CWLtoKinesisFirehoseRole --policy-name Permissions-Policy-For-CWL --policy-document file://~/PermissionsForCWL.json
  1. 대상 계정에 소스 계정이 로그를 보낼 대상을 생성하려면 put-destination 명령을 실행합니다.
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

참고: 전송 스트림의 대상은 Firehose가 지원되는 어떤 리전에도 만들 수 있습니다. 대상을 생성하는 리전은 로그 소스 리전과 동일해야 합니다. 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"
    }
  ]
}
  1. 액세스 정책을 CloudWatch 대상과 연결합니다.
aws logs put-destination-policy --destination-name "myDestination" --access-policy file://~/AccessPolicy.json --region us-east-2
  1. 대상을 확인하려면 describe-destinations 명령을 실행합니다.
aws logs describe-destinations --region us-east-2

소스 계정 설정

참고: 소스 계정을 설정하려면 해당 계정의 IAM 관리자 또는 루트 사용자여야 합니다.

다음 단계를 완료합니다.

  1. Amazon VPC Flow Logs에 CloudWatch 로그 그룹으로 데이터를 전송할 수 있는 권한을 부여하는 신뢰 정책을 생성합니다.

    {
      "Version": "2012-10-17",
      "Statement": [
        {
          "Sid": "",
          "Effect": "Allow",
          "Principal": {
            "Service": "vpc-flow-logs.amazonaws.com"
          },
          "Action": "sts:AssumeRole"
        }
      ]
    }
  2. create-role 명령을 실행하고 신뢰 정책을 지정합니다.

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

    참고: 이후 단계에서 사용할 수 있도록 출력에서 역할의 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 역할과 연결하려면 put-role-policy 명령을 실행합니다.

    aws iam put-role-policy --role-name PublishFlowLogs --policy-name Permissions-Policy-For-VPCFlowLogs --policy-document file://~/PermissionsForVPCFlowLogs.json
  5. 흐름 로그의 대상을 구성하려면 create-log-group 명령을 실행하여 CloudWatch 로그 그룹을 생성합니다.

    aws logs create-log-group --log-group-name vpc-flow-logs --region us-east-2
  6. VPC 흐름 로그를 활성화하려면 create-flow-logs 명령을 실행합니다.

    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
  7. 대상 계정에서 Firehose에 CloudWatch 로그 그룹을 구독하려면 put-subscription-filter 명령을 실행합니다.

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

    로그가 게시되었는지 확인하려면 S3 버킷에서 새 로그를 검토합니다.

관련 정보

DeliveryStreamDescription

AWS 공식
AWS 공식업데이트됨 2달 전
댓글 없음

관련 콘텐츠