0
0
Lập trình
Flame Kris
Flame Krisbacodekiller

Bảo vệ Dữ liệu Nhạy cảm trong CloudWatch Logs cho API

Đăng vào 5 tháng trước

• 6 phút đọc

😬 Vấn Đề

Hãy tưởng tượng bạn đã xây dựng một API tuyệt vời mà mọi người yêu thích. Đời sống thật tốt đẹp, cho đến khi một ngày bạn nhìn vào CloudWatch Logs và — BÙM 💥 — bạn thấy... thông tin đăng nhập của người dùng. Mật khẩu, token, có thể thậm chí là số thẻ tín dụng. Không phải là điều bạn mong muốn xuất hiện trong nhật ký của mình, đặc biệt khi các nhà quản lý (và đội ngũ bảo mật của bạn) đang theo dõi.

Dù tôi rất yêu CloudWatch để gỡ lỗi và giám sát, nhưng không ai muốn nhật ký sản xuất của mình giống như một cuốn nhật ký mở về dữ liệu nhạy cảm của người dùng. Trong lĩnh vực fintech, điều đó là một điều cấm kỵ (hãy nghĩ đến PCI, GDPR, SOC2).

🎯 Nhiệm Vụ

Nhiệm vụ của tôi rất rõ ràng: 👉 Bảo vệ dữ liệu nhạy cảm (như mật khẩu, token, thông tin thẻ) trong CloudWatch Logs — trong khi vẫn giữ cho nhật ký có ích cho việc khắc phục sự cố.
Thách thức bổ sung: làm cho giải pháp có khả năng mở rộng, thân thiện với người mới bắt đầu và thú vị.

🛠️ Giải Pháp

1. Nhắc lại một chút

CloudWatch Logs là gì?
CloudWatch Logs giống như một máy ghi đen của ứng dụng của bạn — mọi cuộc gọi API, lỗi và dòng gỡ lỗi đều có thể xuất hiện ở đây. - Bạn có thể phát trực tiếp nhật ký từ API Gateway, Lambda, ECS, EC2, bạn đặt tên cho nó. - Bạn có thể tìm kiếm chúng trong CloudWatch Insights hoặc gửi chúng đến OpenSearch để thực hiện các truy vấn kiểu SQL. - Bạn thậm chí có thể thiết lập cảnh báo khi mọi thứ diễn ra sai.
Nhưng — và đây là một điểm lớn — theo mặc định, CloudWatch ghi lại mọi thứ bạn cung cấp. Nếu bạn gửi mật khẩu, nó sẽ vui vẻ lưu trữ mật khẩu. 🙈

2. Khoảnh khắc “Aha!” của tôi

Chính sách Bảo vệ Dữ liệu CloudWatch
Thay vì viết các script regex lộn xộn hoặc tái cấu trúc middleware ghi lại, AWS giờ đây cung cấp cho chúng ta Chính sách Bảo vệ Dữ liệu cho các nhóm nhật ký.

Hãy nghĩ về nó như một bộ lọc bí mật trên nhật ký của bạn:

  • Bạn chỉ cho CloudWatch biết các mẫu dữ liệu nhạy cảm nào cần tìm.
  • Nó sử dụng các định danh dữ liệu đã quản lý (ví dụ: thẻ tín dụng, khóa AWS, email, v.v.).
  • Khi tìm thấy một sự trùng khớp → nó sẽ tự động được che giấu (như ****).
  • Chỉ những người dùng có quyền logs:Unmask đặc biệt mới có thể thấy các giá trị gốc.

Khi bạn tạo một chính sách bảo vệ dữ liệu trong AWS Console, bạn sẽ đi qua một vài tùy chọn:

Định danh Dữ liệu Quản lý

  • AWS cung cấp một danh sách dài các loại dữ liệu đã cấu hình sẵn (khóa AWS, số tài chính, PII, PHI, v.v.) mà bạn có thể chọn thông qua hộp kiểm.
  • Bạn cũng có thể định nghĩa các định danh dữ liệu tùy chỉnh bằng cách sử dụng regex nếu bạn cần thứ gì đó mà AWS không cung cấp.

Kiểm toán và Che Giấu (Deidentify)

  • Kiểm toán: Phát hiện và ghi lại các phát hiện dữ liệu nhạy cảm mà không làm thay đổi nhật ký. Tuyệt vời cho việc phát hiện — bạn có thể thấy nơi nào bí mật xuất hiện trước khi quyết định che giấu.
  • Che Giấu (Deidentify): Thực sự làm mờ những giá trị đó, để chúng xuất hiện dưới dạng **** ở mọi nơi nhật ký được tiêu thụ. Điều này đảm bảo rằng bí mật không bao giờ tồn tại dưới dạng không được che giấu trong CloudWatch.

Điểm đến của các Phát hiện

  • Nếu bạn chọn Kiểm toán, bạn có thể chỉ định các phát hiện kiểm toán đến một nhóm nhật ký khác, bucket S3 hoặc Kinesis Firehose. Hữu ích cho các báo cáo tuân thủ.
  • Nếu bạn không chỉ định, nó có thể được để trống ({}), có nghĩa là không có điểm đến đặc biệt.

Áp dụng Chính sách

  • Sau khi bạn lưu chính sách, chỉ các nhật ký mới được thu thập sẽ được quét và che giấu. Các nhật ký cũ sẽ không được thay đổi một cách ngược lại.
  • Việc che giấu chỉ hoạt động trên các nhóm nhật ký loại chuẩn.
  • Ngoài ra, các mảng DataIdentifier trong các tuyên bố Kiểm toán và Che Giấu phải khớp chính xác; nếu không, AWS sẽ từ chối chính sách.

Dưới đây là một ví dụ về chính sách kết hợp cả kiểm toán và che giấu:

Copy
{
"Name": "data-protection-policy",
"Description": "",
"Version": "2021-06-01",
"Statement": [
{
"Sid": "audit-policy",
"DataIdentifier": [
"arn:aws:dataprotection::aws:data-identifier/AwsSecretKey",
"arn:aws:dataprotection::aws:data-identifier/BankAccountNumber-FR"
],
"Operation": {
"Audit": {
"FindingsDestination": {}
}
}
},
{
"Sid": "redact-policy",
"DataIdentifier": [
"arn:aws:dataprotection::aws:data-identifier/AwsSecretKey",
"arn:aws:dataprotection::aws:data-identifier/BankAccountNumber-FR"
],
"Operation": {
"Deidentify": {
"MaskConfig": {}
}
}
}
]
}

Trên thực tế, tôi thích bắt đầu với Kiểm toán trước để đo lường nơi dữ liệu nhạy cảm thực sự xuất hiện. Khi tôi tự tin, tôi sẽ bật Che Giấu để đảm bảo rằng những giá trị đó được che giấu ở mọi nơi.

BÙM 💥 — không còn thông tin xác thực dạng văn bản trong nhật ký nữa!

  1. Sử dụng nhật ký sau khi che giấu
    Sau khi nhật ký đã được che giấu, bạn vẫn có thể sử dụng chúng như thường lệ: - CloudWatch Logs Insights → chạy các truy vấn như:
Copy
fields @timestamp, @message
  | filter @message like /ERROR/
  | sort @timestamp desc
  | limit 20
  • OpenSearch SQL → thậm chí còn tinh vi hơn! Bạn có thể kết nối nhóm nhật ký của mình với OpenSearch và truy vấn như:
Copy
SELECT
    requestId,
    httpMethod,
    status,
    message
  FROM apigateway_logs
  WHERE status >= 500
  ORDER BY timestamp DESC
  LIMIT 10;

Các trường đã che giấu vẫn xuất hiện dưới dạng ****, có nghĩa là bạn vẫn giữ được sức mạnh gỡ lỗi mà không tiết lộ bí mật.

✅ Kết Quả

  • Không còn dữ liệu nhạy cảm (mật khẩu, token, PAN) rò rỉ vào nhật ký.
  • Đội ngũ bảo mật và tuân thủ = những người vui vẻ.
  • Các nhà phát triển vẫn nhận được nhật ký hữu ích cho việc khắc phục sự cố.
  • Còn tôi? Tôi ngủ ngon hơn vào ban đêm biết rằng tôi sẽ không tỉnh dậy với một vé tuân thủ.

😂 Kết Luận Thú Vị

Hãy nghĩ về Bảo vệ Dữ liệu CloudWatch như một bộ lọc tự động trên truyền hình trực tiếp. Nhật ký của bạn có thể vẫn đầy kịch tính, nhưng ít nhất chúng được PG-13 thay vì Rated R cho những cơn ác mộng về quy định.

Vì vậy, nếu bạn đang vận hành một API fintech (hoặc thực sự bất kỳ API nào), hãy làm cho mình một ân huệ — để CloudWatch giữ nhật ký, nhưng che giấu các bí mật. Cuối cùng, những gì xảy ra trong nhật ký sản xuất nên được giữ lại trong nhật ký sản xuất... được che giấu an toàn.🥺

Bạn nghĩ sao? Bạn đã thử Bảo vệ Dữ liệu CloudWatch chưa, hay vẫn phải phụ thuộc vào việc che giấu tùy chỉnh? Tôi rất muốn nghe cách bạn xử lý vệ sinh nhật ký trong hệ thống của mình!

Gợi ý câu hỏi phỏng vấn
Không có dữ liệu

Không có dữ liệu

Bài viết được đề xuất
Bài viết cùng tác giả

Bình luận

Chưa có bình luận nào

Chưa có bình luận nào