Phân tích Azure Audit Logs bằng AWS CloudTrail Lake

Tác giả: Anjani Reddy , Noam Ouaknine và Snehal Nahar

Ngày xuất bản: ngày 11 tháng 4 năm 2025

Danh mục:  Nâng cao (300) , Amazon DynamoDB , AWS CloudTrail , AWS Lambda ,  Learning Levels, Management Tools 

Giới thiệu

Trong thế giới điện toán đám mây không ngừng phát triển, việc duy trì bảo mật và tuân thủ mạnh mẽ là tối quan trọng. Khi việc sử dụng môi trường đa đám mây tăng lên, nhu cầu về các giải pháp giám sát và ghi nhật ký toàn diện trở nên quan trọng hơn. Đó là lúc sự kết hợp giữa Azure Audit LogsAWS CloudTrail Lake phát huy tác dụng – một sự kết hợp mạnh mẽ giúp giám sát toàn diện các môi trường đám mây của bạn.

Azure Audit Logs cung cấp thông tin chi tiết về các hoạt động được thực hiện trong môi trường Azure của bạn, theo dõi các thay đổi và hoạt động để đảm bảo tuân thủ và bảo mật. Mặt khác, AWS CloudTrail Lake cho phép bạn lưu trữ, truy cập và phân tích nhật ký hoạt động đám mây của mình tại một vị trí tập trung, cung cấp khả năng truy vấn nâng caolưu giữ dữ liệu dài hạn.

Trong blog này, chúng tôi sẽ hướng dẫn bạn triển khai giải pháp mẫu để nhập nhật ký hoạt động Azure của bạn vào kho dữ liệu sự kiện CloudTrail Lake và cung cấp các truy vấn SQL mẫu để phân tích dữ liệu và hỗ trợ điều tra bảo mật. Cho dù bạn là kiến ​​trúc sư đám mây, nhà phân tích bảo mật hay quản lý CNTT, hướng dẫn này sẽ trang bị cho bạn kiến ​​thức để khai thác toàn bộ tiềm năng của nhật ký kiểm tra đám mây của bạn.

Điều kiện tiên quyết

Để thực hiện theo hướng dẫn này, bạn phải có những điều sau:

AWS CLI – Cài đặt AWS CLI
SAM CLI – Cài đặt SAM CLI. Serverless Application Model Command Line Interface (SAM CLI) là phần mở rộng của AWS CLI bổ sung chức năng để xây dựng và thử nghiệm các ứng dụng AWS Lambda .
• Python 3.12 trở lên – Cài đặt Python
Tài khoản AWS có vai trò AWS Identity and Access Management (IAM) có đủ quyền truy cập để cung cấp các tài nguyên cần thiết.
• Tài khoản Azure có đủ quyền truy cập để cung cấp các tài nguyên và quyền cần thiết để gửi nhật ký đến AWS.

Thiết lập AWS


1. Kích hoạt CloudTrail Lake bằng cách làm theo các bước trong bài đăng trên blog này.

2.  Tạo bí mật AWS Secrets Manager để lưu trữ chuỗi kết nối cho tài khoản Azure Storage.

Thiết lập Azure 

1.  Tạo tài khoản lưu trữ Azure  Tài khoản lưu trữ Azure chứa tất cả các đối tượng dữ liệu Azure Storage của bạn: blob, tệp, hàng đợi và bảng. Tài khoản lưu trữ cung cấp không gian tên duy nhất cho dữ liệu Azure Storage của bạn, có thể truy cập từ mọi nơi trên thế giới qua HTTP hoặc HTTPS. Để biết thêm thông tin về tài khoản lưu trữ Azure, hãy xem Tổng quan về tài khoản lưu trữ .

2. Đăng ký một ứng dụng client (client application) trong Microsoft Entra ID để truy cập Azure Health Data Services.

3. Cung cấp chuỗi kết nối cho tài khoản lưu trữ Azure, bao gồm các tham số: DefaultEndpointsProtocol, AccountName, AccountKey & EndpointSuffix để triển khai AWS CloudFormation stack.

Hình 1: Sơ đồ kiến ​​trúc giải pháp

Tổng quan về giải pháp

  1. Azure được cấu hình để xuất nhật ký hoạt động và kiểm tra sang vùng chứa lưu trữ blob Azure trong blob có tên PT1H.json. Mỗi blob PT1H.json chứa một đối tượng JSON với các sự kiện từ tệp nhật ký được nhận trong 1 giờ được chỉ định trong URL blob.
  2. Quy tắc lịch trình EventBridge sẽ gọi hàm Lambda được sử dụng để tổng hợp các tệp nhật ký Azure.
  3. Hàm Lambda tổng hợp (aggregator Lambda function) truy vấn bảng DynamoDB để lấy dấu thời gian cho lần cuối cùng các tệp nhật ký Azure được xử lý bởi giải pháp của chúng tôi. Điều này cho phép hàm chỉ truy xuất các tệp nhật ký mới hơn và tránh xử lý các sự kiện trùng lặp.
  4. Hàm tổng hợp Lambda sẽ truy xuất chuỗi kết nối Azure Storage từ bí mật AWS Secrets Manager.
  5. Hàm tổng hợp Lambda kết nối với vùng chứa lưu trữ blob Azure và thu thập đường dẫn của bất kỳ tệp nhật ký nào được sửa đổi sau dấu thời gian thu được ở bước ba.
  6. Các đường dẫn tệp nhật ký được thu thập ở bước trước được xếp vào hàng đợi SQS để xử lý thêm bởi hàm Lambda chịu trách nhiệm xử lý tệp nhật ký.
  7. Hàm Lambda xử lý được tự động gọi bằng ánh xạ nguồn sự kiện khi đường dẫn tệp nhật ký Azure được xếp hàng vào hàng đợi SQS ở bước trước đó.
  8. Hàm Lambda xử lý (Lambda Processor) sẽ truy xuất chuỗi kết nối Azure Storage từ bí mật AWS Secrets Manager.
  9. Hàm Lambda xử lý (Lambda Processor) sẽ lấy ra (dequeues) một lô (batch) tối đa mười đường dẫn tệp nhật ký từ hàng đợi SQS và tải xuống từng tệp nhật ký từ vùng chứa lưu trữ blob Azure.
  10. Hàm Lambda xử lý (Lambda Processor) lặp lại qua từng tệp nhật ký, phân tích từng sự kiện và chuyển đổi để khớp với lược đồ sự kiện tùy chỉnh (customer event schema) của CloudTrail Lake. Sau đó, mỗi sự kiện được đưa vào kho dữ liệu sự kiện CloudTrail Lake bằng lệnh gọi API PutAuditEvents.
  11. Nếu bất kỳ sự kiện nào không thể phân tích cú pháp hoặc chuyển đổi thành lược đồ sự kiện tùy chỉnh của CloudTrail Lake hoặc nếu bất kỳ lệnh gọi nào đến API PutAuditEvents không thành công, thì hàm Lambda xử lý sẽ xếp hàng các sự kiện tương ứng vào hàng đợi SQS thứ hai có thể được sử dụng để điều tra nguyên nhân gây ra lỗi.

Triển khai giải pháp

1. Sử dụng git để sao chép kho lưu trữ này vào thư mục làm việc (workspace) của bạn. SAM CLI phải được cấu hình bằng thông tin xác thực AWS từ tài khoản AWS nơi bạn dự định triển khai ví dụ. Chạy các lệnh sau trong shell của bạn để bắt đầu quy trình triển khai SAM được hướng dẫn:

git clone https://github.com/aws-samples/aws-cloudtrail-lake-analyze-azure-audit-logs.git
cd aws-cloudtrail-lake-analyze-azure-audit-logs/SAM
sam build
sam deploy --guided

2. Cung cấp giá trị cho các tham số của CloudFormation stack.

a. CloudTrailEventDataStoreArn(Tùy chọn) – ARN của kho dữ liệu sự kiện sẽ được sử dụng để thu thập các sự kiện hoạt động Azure. Nếu không cung cấp ARN, kho dữ liệu sự kiện mới sẽ được tạo trong vùng mục tiêu.

Lưu ý: Xin lưu ý rằng có hạn ngạch về số lượng kho dữ liệu sự kiện có thể được tạo cho mỗi vùng. Xem Quotas in AWS CloudTrail để biết thêm chi tiết. Ngoài ra, sau khi bạn xóa kho dữ liệu sự kiện, kho dữ liệu đó vẫn ở trạng thái PENDING_DELETION trong bảy ngày trước khi bị xóa vĩnh viễn và tiếp tục được tính vào hạn ngạch của bạn trong thời gian đó. Xem Quản lý vòng đời kho dữ liệu sự kiện để biết thêm chi tiết.

b. CloudTrailEventRetentionPeriod– Số ngày lưu giữ các sự kiện được đưa vào CloudTrail. Tối thiểu là 7 ngày và tối đa là 2.557 ngày. Mặc định là 7 ngày.

c. AzureStorageContainerName– Tên của vùng chứa Azure Storage nơi lưu trữ các sự kiện hoạt động Azure.

d. AzureStorageConnectionStringSecret– Tên của bí mật Secrets Manager chứa chuỗi kết nối Azure Storage.

3. Sau khi SAM triển khai thành công ví dụ, hãy kiểm tra các output và ghi lại giá trị EventDataStoreId được trả về. EventDataStoreId này sẽ cần thiết để truy vấn kho dữ liệu sự kiện CloudTrail Lake.

Hình 2: Đầu ra triển khai SAM thành công

4. Hàm Lambda chịu trách nhiệm tổng hợp sẽ có một trình kích hoạt theo lịch trình được đính kèm để gọi hàm sau mỗi 1 giờ. Sau khi CloudFormation stack được triển khai thành công, hàm sẽ tự động được gọi bằng quy tắc theo lịch trình của EventBridge lần đầu tiên trong vòng 1 giờ kể từ khi triển khai.

Bạn có thể xác minh rằng một hàm Lambda đã được gọi ít nhất một lần bằng cách điều hướng đến AWS Lambda Console và xem biểu đồ Invocations trên tab Monitoring. Để biết thêm chi tiết, hãy xem Monitoring functions on the Lambda console . Bạn cũng có thể gọi hàm theo cách thủ công để thu thập sự kiện ngay lập tức. Để biết thêm chi tiết, hãy xem Understanding Lambda function invocation methods .

Sau khi hàm lambda tổng hợp được gọi, nó sẽ truy vấn bảng Amazon DynamoDB để lấy dấu thời gian cho lần xử lý tệp nhật ký gần nhất. Sau đó, hàm sẽ tìm kiếm vùng chứa lưu trữ Azure để có thể lọc các tệp nhật ký mới kể từ thời điểm đó. Nếu không có dấu thời gian, hàm sẽ tổng hợp tất cả các tệp nhật ký hiện tại. Sau đó, hàm sẽ xếp hàng đường dẫn tệp của từng tệp nhật ký trong phạm vi vào hàng đợi SQS.

5. Khi đường dẫn tệp nhật ký được xếp hàng, hàm Processor Lambda sẽ tự động được hàng đợi SQS kích hoạt và sẽ tải xuống từng tệp nhật ký được xếp hàng từ vùng chứa lưu trữ Azure. Mỗi tệp nhật ký sẽ được phân tích cú pháp cho từng sự kiện riêng lẻ, mỗi sự kiện sẽ được định dạng để tuân thủ lược đồ CloudTrail Lake cho các sự kiện tùy chỉnh (customer events). Xem lược đồ sự kiện tích hợp CloudTrail Lake để biết thêm chi tiết.

Hàm Processor Lambda sẽ cố gắng đưa từng sự kiện đã định dạng vào kho dữ liệu sự kiện CloudTrail Lake. Bất kỳ sự kiện nào không thể nhập thành công vào CloudTrail Lake sẽ được đưa vào hàng đợi SQS riêng cho các sự kiện không thành công.

6. Sau khi sự kiện nhật ký Azure được đưa thành công vào kho dữ liệu sự kiện CloudTrail Lake, bạn có thể làm theo các bước dưới đây để phân tích nhật ký hoạt động Azure của mình bằng các truy vấn mẫu dựa trên SQL của CloudTrail Lake.

Xin lưu ý rằng CloudTrail thường cung cấp các sự kiện trong vòng trung bình khoảng 5 phút sau khi gọi API, mặc dù thời gian này không được đảm bảo. Do đó, sau khi hàm Lambda được gọi, có thể có thêm độ trễ khoảng 5 phút trước khi có thể truy vấn các sự kiện trong CloudTrail Lake.

Lưu ý: Trong trường hợp hàm Lambda gặp bất kỳ sự cố nào trong quá trình thực thi, bạn có thể kiểm tra nhật ký CloudWatch cho hàm đó. Để biết thêm thông tin, hãy xem Truy cập nhật ký Amazon CloudWatch cho AWS Lambda .

Phân tích dữ liệu

Phân tích một ví dụ về Sự cố bảo mật:

Để xác minh xem nhật ký kiểm tra Azure có khả dụng trong kho dữ liệu AWS CloudTrail Lake hay không, hãy sử dụng truy vấn mẫu bên dưới để truy vấn kho dữ liệu sự kiện CloudTrail Lake của bạn theo các hướng dẫn sau:  Chạy truy vấn và lưu kết quả truy vấn

Đảm bảo bạn thay thế <EventDataStoreID> bằng Id của kho dữ liệu sự kiện, có thể tìm thấy trong Đầu ra được trả về sau khi triển khai thành công với SAM.

Cuối cùng, hãy đảm bảo các ngày được cập nhật để bao gồm khoảng thời gian sau khi triển khai chức năng Lambda.

1. Liệt kê tất cả các tài khoản lưu trữ trong môi trường Azure bằng truy vấn bên dưới và thay thế <EventDataStoreID> dành riêng cho Tài khoản AWS của bạn

select * from <EventDataStoreID> where eventData.eventName Like 'MICROSOFT.STORAGE/STORAGEACCOUNTS%' limit 10

2. Danh sách các thao tác được thực hiện trên Tài khoản lưu trữ.

SELECT
eventData.uid,
eventData.eventName,
eventData.sourceipaddress,
eventData.recipientaccountid,
eventData.eventtime
FROM
<EventDataStoreID>
WHERE
eventData.eventSource = 'MICROSOFT.STORAGE'
AND eventData.eventName LIKE 'MICROSOFT.STORAGE/STORAGEACCOUNTS%'
AND eventData.uid IS NOT NULL
limit 10

Người dùng nào đã xóa bộ nhớ lưu trữ (storage)?

select * from <EventDataStoreID> where eventData.eventName = 'MICROSOFT.STORAGE/STORAGEACCOUNTS/BLOBSERVICES/CONTAINERS/DELETE' and eventTime > '2024-12-10 00:00:00’

Dọn dẹp

Bạn có thể sử dụng SAM CLI để xóa các tài nguyên đã triển khai và đảm bảo rằng bạn không tiếp tục phải chịu phí. Để xóa các tài nguyên, hãy chạy lệnh sau từ shell của bạn và thay thế <stack-name> bằng tên stack mà bạn đã cung cấp cho SAM khi chạy sam deploy. Làm theo lời nhắc để xác nhận việc xóa tài nguyên.

sam delete --stack-name <stack-name>

Hình 3: Dọn dẹp giải pháp bằng SAM CLI

Phần kết luận

Trong bài đăng này, chúng tôi đã trình bày cách tích hợp Azure Audit Logs với Amazon CloudTrail Lake, cho phép quản trị viên đám mây phân tích nhật ký và giám sát các sự kiện bảo mật trên khắp các môi trường đám mây từ một vị trí tập trung. Sự tích hợp này, kết hợp với tính năng tự động hóa được hiển thị trong giải pháp, tinh giản (streamline) các cuộc điều tra bảo mật bằng cách cung cấp một nền tảng thống nhất để tìm kiếm và phân tích dữ liệu hoạt động từ nhiều nguồn đám mây, giúp phản hồi và điều tra các sự cố bảo mật tiềm ẩn dễ dàng hơn.

THẺ: Amazon DynamoDB , Amazon Lambda , AWS CloudTrail , AWS Cloudtrail Lake

Về các tác giả

Anjani Reddy

Anjani là Chuyên viên Quản lý Tài khoản Kỹ thuật Chuyên biệt tại AWS. Cô làm việc với các khách hàng doanh nghiệp để cung cấp hướng dẫn vận hành, giúp họ đổi mới và xây dựng một nền tảng đám mây an toàn, có khả năng mở rộng trên AWS. Ngoài công việc, cô là một vũ công cổ điển Ấn Độ và salsa, thích đi du lịch và tham gia tình nguyện cho Hội Chữ thập đỏ Mỹ và Hands on Atlanta.

Noam Ouaknine

Noam Ouaknine là Quản lý Tài khoản Kỹ thuật (Technical Account Manager) tại AWS và có trụ sở tại Florida. Ông giúp khách hàng doanh nghiệp phát triển và đạt được chiến lược dài hạn của họ thông qua hướng dẫn kỹ thuật và lập kế hoạch chủ động.

Snehal Nahar

Snehal Nahar là Quản lý Tài khoản Kỹ thuật Cấp cao tại AWS. Cô chuyên về Vận hành Đám mây và Bảo mật. Cô đam mê xây dựng các giải pháp sáng tạo bằng cách sử dụng các dịch vụ AWS để giúp khách hàng đạt được mục tiêu kinh doanh của họ. Ngoài ra, cô thích dành thời gian cho gia đình và bạn bè, chơi board game và xem TV.

.