Quản lý log tập trung – Chuyển AWS Config logs sang S3 Bucket của account khác

Liên quan tới chủ đề này mình có một kỷ niệm buồn, tài liệu về phần này khá là ít nên tìm kiếm cách làm phần này khá là mất thời gian. Tính mình hay quên nên lâu không sờ đến là lại như mới, dần dần tìm hiểu thì lại như kiểu bị "deja vu", ơ cái này trước mình làm rồi này, ơ ơ. Trước mất 3 tiếng tìm hiểu test... lần tới mà không nhớ là lại y sì từng ấy thời gian lãng phí. Để chấm dứt nỗi đau này và để tích đức cho đời, giúp anh em nào cũng dính phần này thì mình viết bài này để memo và chia sẻ. Hy vọng có ích cho anh em.

Liên quan tới AWS Config log, trước kia AWS không hỗ trợ lưu log vào S3 với KMS, và từ ngày một ngày đẹp trời năm 2021, họ thông báo là "Tao đã support KMS cho AWS Config log rồi đấy, ĐƯỢC CHƯA?".

Sẽ không có gì đáng nói nếu họ viết doc dễ hiểu một chút. Nhưng không, chỉ bằng một thông báo dời ơi và cái hướng dẫn đại khái như này

Thôi miên man thế thôi vào việc.

1. S3 Bucket Policy

Nói ngắn gọn thì anh em làm thế này này

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "AWSConfigBucketPermissionsCheck",
      "Effect": "Allow",
      "Principal": {
        "Service": "config.amazonaws.com"
      },
      "Action": "s3:GetBucketAcl",
      "Resource": "arn:aws:s3:::targetBucketName",
      "Condition": { 
        "StringEquals": {
          "AWS:SourceAccount": "sourceAccountID"
        }
      }
    },
    {
      "Sid": "AWSConfigBucketExistenceCheck",
      "Effect": "Allow",
      "Principal": {
        "Service": "config.amazonaws.com"
      },
      "Action": "s3:ListBucket",
      "Resource": "arn:aws:s3:::targetBucketName",
      "Condition": { 
        "StringEquals": {
          "AWS:SourceAccount": "sourceAccountID"
        }
      }
    },
    {
      "Sid": "AWSConfigBucketDelivery",
      "Effect": "Allow",
      "Principal": {
        "Service": "config.amazonaws.com"
      },
      "Action": "s3:PutObject",
      "Resource": "arn:aws:s3:::targetBucketName/[optional] prefix/AWSLogs/sourceAccountID/Config/*",
      "Condition": { 
        "StringEquals": { 
          "s3:x-amz-acl": "bucket-owner-full-control",
          "AWS:SourceAccount": "sourceAccountID"
        }
      }
    }
  ]
}

2. KMS Policy

đoạn này anh em làm thế này này

{
    "Id": "Policy_ID",
    "Statement": [
        {
            "Sid": "AWSConfigKMSPolicy",
            "Effect": "Allow",
            "Principal": {
                "Service": "config.amazonaws.com"
            },
            "Action": [
                "kms:Decrypt",
                "kms:GenerateDataKey"
            ],
            "Resource": "arn:aws:kms:ap-northeast-1:111122223333:key/abcdefgh-hijk-lmno-pqrs-tuvwxyz12345"
        }
    ]
}

3. Edit delivery-channels

KMS setting nó không hiển thị trên console, nên anh em sẽ không thấy bằng mắt thường, nên anh em phải dùng AWS CLI.

Đại khái thì setting AWS Config thì có 2 thằng cần quan tâm là delivery channels và recorder. Lần này mình quan tâm thằng delivery channels nhé.

Get thông tin của nó

aws configservice describe-delivery-channels

Trả về dạng thế này

{
    "DeliveryChannels": [
        {
            "name": "default",
            "s3BucketName": "your-bucket-name",
            "snsTopicARN": "arn:aws:sns:ap-northeast-1:111122223333:your-topic-name"
        }
    ]
}

rồi thì anh em xào nấu nó lại bằng cách thêm vào "s3KmsKeyArn"

rồi lại đẩy lên

aws configservice put-delivery-channel --delivery-channel name=default,s3BucketName=your-bucket-name,s3KmsKeyArn=arn:aws:kms:ap-northeast-1:111122223333:key/abcdefgh-hijk-lmno-pqrs-tuvwxyz12345,snsTopicARN=arn:aws:sns:ap-northeast-1:111122223333:your-topic-name

check lại cho chắc

aws configservice describe-delivery-channels

Setting ăn rồi thì trả về như này

{
    "DeliveryChannels": [
        {
            "name": "default",
            "s3BucketName": "your-bucket-name",
            "s3KmsKeyArn": "arn:aws:kms:ap-northeast-1:111122223333:key/abcdefgh-hijk-lmno-pqrs-tuvwxyz12345",
            "snsTopicARN": "arn:aws:sns:ap-northeast-1:111122223333:your-topic-name"
        }
    ]
}

Rồi cuối cùng anh em cũng phải thay đổi setting của cái gì đó hoặc thay đổi thời gian đẩy log của aws config để nó đẩy log ra nhanh hơn để còn check xem đã ăn KMS chưa. Phần đợi chờ này khá lâu nên đôi khi không phân biệt được là do setting chưa ok hay là do aws config chưa đẩy log. Anh em bình tĩnh nhé 😀

Tổng kết

Trên đây mình đã tóm tắt cách giải quyết thằng aws config với kms, anh em thấy hay thì chia sẻ để cuộc đời nhiều niềm vui hơn nhé.

Uống nước nhớ nguồn

https://qiita.com/radish19/items/c8d18ff36267aaaeb2d7

Leave a Reply