我们希望听到您的声音!帮助我们深入了解 Ansible 生态系统现状。
参与 2024 年 Ansible 项目调查

使用 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 集合,您可以从以下位置下载:

用例 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.cloudtrailamazon.aws.cloudtrail_info

现在您可以看到 Red Hat Ansible Automation Platform 和 CloudTrail 的四个很棒的用例,以及它们如何轻松无缝地协同工作以完成云自动化任务。如果您希望获得更多有关 Ansible 和 AWS 的博客,请告诉我们!