使用 Ansible 监控您的 AWS 环境
使用 Ansible 监控您的 AWS 环境
在云模型中,环境的安全性和合规性成为最终用户和云提供商的共同责任。这就是我们所说的共享责任模型,其中云的每个部分,包括硬件、数据、配置、访问权限和操作系统,都受到保护。根据当地法律法规以及处理数据的来源(例如 HIPAA、欧洲的 GDPR 或加州的 CCPA 等法律),您可能需要在您的环境中实施严格的规则并记录事件以进行审计。AWS CloudTrail 将帮助您实现此目标。该服务可以收集和记录来自您环境的任何类型的信息,并将事件存储或发送到目标位置进行审计。除了安全性和合规性之外,此服务还有助于跟踪资源消耗。
Ansible 的 CloudTrail 模块用于利用 CloudTrail 服务的各种功能来监控和审计 AWS 环境中的用户活动和 API 调用。跟踪是一种配置,它允许我们描述事件过滤器并决定应将匹配的条目发送到哪里。Amazon.aws 集合的最新 5.0.0 版本附带了一个新的 Cloudtrail 模块。此模块有助于创建、配置和删除跟踪。跟踪的最终目标可以是 S3 存储桶或 CloudWatch 日志。我们还将 cloudtrail 模块与 cloudtrail_info 模块配对,后者有助于收集所有或特定跟踪的信息。
在本博文中,我们将介绍一些配置用例,并展示如何使用 Ansible 的 CloudTrail 模块来自动化这些用例。
要下载 amazon.aws 集合,您可以从以下位置下载:
- Ansible Galaxy - 社区
- Ansible 自动化中心 - 完全支持并使用您的 Red Hat 订阅进行签名
用例 1 - 获取最大可见性
除非跟踪用于特定区域中的特定活动,否则最好为所有区域启用 CloudTrail。通过这样做,我们可以最大化 AWS 环境的可见性,因此不会有任何弱点(未监控的区域)可被攻击者利用。这还将确保我们接收 AWS 未来在任何新区域启动的事件历史记录。
- name: create multi-region trail amazon.aws.cloudtrail: state: present name: myCloudTrail s3_bucket_name: mylogbucket region: us-east-1 is_multi_region_trail: true tags: environment: dev
cloudtrail_info 模块可用于获取有关特定跟踪或所有现有跟踪的所有信息。如果未将跟踪名称作为输入提供给此模块,则默认情况下,此模块将获取所有跟踪(包括影子跟踪)的信息。可以通过将 [include_shadow_trails] 设置为 [False] 来跳过影子跟踪。
# Gather information about the multi-region trail - amazon.aws.cloudtrail_info: trail_names: - arn:aws:cloudtrail:us-east-1:123456789012:trail/myCloudTrail include_shadow_trails: False register: trail_info trail_info : "trail_list": [ { "has_custom_event_selectors": false, "has_insight_selectors": false, "home_region": "us-east-1", "include_global_service_events": true, "is_logging": true, "is_multi_region_trail": true, "is_organization_trail": false, "latest_delivery_attempt_succeeded": "", "latest_delivery_attempt_time": "", "latest_notification_attempt_succeeded": "", "latest_notification_attempt_time": "", "log_file_validation_enabled": false, "name": "myCloudTrail", "resource_id": "arn:aws:cloudtrail:us-east-1:123456789012:trail/myCloudTrail", "s3_bucket_name": "mylogbucket", "start_logging_time": "2022-09-29T11:41:41.752000-04:00", "tags": {"environment": "dev"}, "time_logging_started": "2022-09-29T15:41:41Z", "time_logging_stopped": "", "trail_arn": "arn:aws:cloudtrail:us-east-1:123456789012:trail/myCloudTrail" } ]
用例 2 - 管理对 S3 存储桶的访问
对于此用例,我们将管理授予存储跟踪日志的 S3 存储桶的访问权限。如前所述,共享责任包括共享资源的安全责任。S3 存储桶容易出现配置错误,并且是数据泄露的主要来源。配置为公开访问的 S3 存储桶允许互联网上的任何人都可以访问数据。Ansible 的 s3_bucket 模块可用于设置 CloudTrail 的 S3 存储桶权限和策略。此 S3 存储桶可以传递给 CloudTrail 模块,该模块将用作跟踪生成日志的目标。
- amazon.aws.s3_bucket: name: mys3bucket state: present public_access: block_public_acls: true ignore_public_acls: true block_public_policy: false restrict_public_buckets: false - name: Create trail with secured s3 bucket amazon.aws.cloudtrail: state: present name: myCloudTrail s3_bucket_name: mys3bucket region: us-east-1 tags: environment: dev
用例 3 - 维护 CloudTrail 日志完整性
收集 CloudTrail 日志以验证 AWS 环境的合规性和安全性。攻击者始终有可能获得访问权限并篡改这些日志以掩盖其存在。通过启用日志文件验证,将生成日志文件的数字签名,该签名用于检查日志文件是否有效且未被篡改。
- name: create a trail with log file validation amazon.aws.cloudtrail: state: present name: myCloudTrail s3_bucket_name: mylogbucket region: us-east-1 log_file_validation_enabled: true tags: environment: dev # Gather information about the trail - amazon.aws.cloudtrail_info: trail_names: - arn:aws:cloudtrail:us-east-1:123456789012:trail/myCloudTrail include_shadow_trails: False register: trail_info trail_info : "trail_list": [ { "has_custom_event_selectors": false, "has_insight_selectors": false, "home_region": "us-east-1", "include_global_service_events": true, "is_logging": true, "is_multi_region_trail": fail, "is_organization_trail": false, "latest_delivery_attempt_succeeded": "", "latest_delivery_attempt_time": "", "latest_notification_attempt_succeeded": "", "latest_notification_attempt_time": "", "log_file_validation_enabled": true, "name": "myCloudTrail", "resource_id": "arn:aws:cloudtrail:us-east-1:123456789012:trail/myCloudTrail", "s3_bucket_name": "mylogbucket", "start_logging_time": "2022-09-29T11:41:41.752000-04:00", "tags": {"environment": "dev"}, "time_logging_started": "2022-09-29T15:41:41Z", "time_logging_stopped": "", "trail_arn": "arn:aws:cloudtrail:us-east-1:123456789012:trail/myCloudTrail" } ]
用例 4 - 加密日志
默认情况下,S3 存储桶受 A[mazon 服务器端加密方法和 Amazon S3 托管加密密钥保护。为了增加一层安全保护,您可以使用 AWS 密钥管理服务。这可以直接管理,并有助于保护日志文件免受任何攻击者对环境的调查。
- name: Create an LMS key using lookup for policy JSON amazon.aws.kms_key: alias: my-kms-key policy: "{{ lookup('template', 'kms_iam_policy_template.json.j2') }}" state: present register: kms_key_for_logs - name: Create a CloudTrail with kms_key for encryption amazon.aws.cloudtrail: state: present name: myCloudTrail s3_bucket_name: mylogbucket kms_key_id: "{{ kms_key_for_logs.key_id }}"
与上面提到的用例类似,许多参数允许 CloudTrail 日志安全、合规且易于管理。要获取有关如何配置 CloudTrail 以及获取现有跟踪的配置信息的更多信息,请参阅 amazon.aws.cloudtrail 和 amazon.aws.cloudtrail_info。
现在您可以看到 Red Hat Ansible Automation Platform 和 CloudTrail 的四个很棒的用例,以及它们如何轻松无缝地协同工作以完成云自动化任务。如果您希望获得更多有关 Ansible 和 AWS 的博客,请告诉我们!