AWS 模块编辑

这是一个用于 aws 日志的模块。它使用 filebeat s3 输入从带有 SQS 通知或直接轮询 S3 存储桶中 S3 对象列表的 AWS S3 存储桶中获取日志文件。建议使用 SQS 通知:轮询 S3 对象列表在性能和成本方面都很昂贵,并且无法在没有摄取重复的情况下水平扩展,并且最好仅在无法将 SQS 通知附加到 S3 存储桶时才使用。

此模块支持使用 s3access 文件集读取 S3 服务器访问日志、使用 elb 文件集读取 ELB 访问日志、使用 vpcflow 文件集读取 VPC 流量日志以及使用 cloudtrail 文件集读取 CloudTrail 日志。

访问日志包含有关对这些服务发出的请求的详细信息。VPC 流量日志捕获有关进出 AWS VPC 中网络接口的 IP 流量的信息。ELB 访问日志捕获有关发送到负载均衡器的请求的详细信息。CloudTrail 日志包含表示用户、角色或 AWS 服务执行的操作的事件。

aws 模块需要 AWS 凭证配置才能进行 AWS API 调用。用户可以使用 access_key_idsecret_access_key 和/或 session_token,或使用 role_arn AWS IAM 角色,或使用共享的 AWS 凭证文件。

用户可以使用 external_id 来支持在另一个帐户中承担角色,有关使用外部 ID 的更多信息,请参阅AWS 文档

有关更多详细信息,请参阅AWS 凭证选项

阅读快速入门,了解如何配置和运行模块。

模块配置编辑

配置示例

- module: aws
  cloudtrail:
    enabled: false
    #var.queue_url: https://sqs.myregion.amazonaws.com/123456/myqueue
    #var.bucket_arn: 'arn:aws:s3:::mybucket'
    #var.bucket_list_prefix: 'prefix'
    #var.bucket_list_interval: 300s
    #var.number_of_workers: 5
    #var.shared_credential_file: /etc/filebeat/aws_credentials
    #var.credential_profile_name: fb-aws
    #var.access_key_id: access_key_id
    #var.secret_access_key: secret_access_key
    #var.session_token: session_token
    #var.visibility_timeout: 300s
    #var.api_timeout: 120s
    #var.endpoint: amazonaws.com
    #var.default_region: us-east-1
    #var.role_arn: arn:aws:iam::123456789012:role/test-mb
    #var.proxy_url: http://proxy:8080

  cloudwatch:
    enabled: false
    #var.queue_url: https://sqs.myregion.amazonaws.com/123456/myqueue
    #var.bucket_arn: 'arn:aws:s3:::mybucket'
    #var.bucket_list_prefix: 'prefix'
    #var.bucket_list_interval: 300s
    #var.number_of_workers: 5
    #var.shared_credential_file: /etc/filebeat/aws_credentials
    #var.credential_profile_name: fb-aws
    #var.access_key_id: access_key_id
    #var.secret_access_key: secret_access_key
    #var.session_token: session_token
    #var.visibility_timeout: 300s
    #var.api_timeout: 120s
    #var.endpoint: amazonaws.com
    #var.default_region: us-east-1
    #var.role_arn: arn:aws:iam::123456789012:role/test-mb
    #var.proxy_url: http://proxy:8080

  ec2:
    enabled: false
    #var.queue_url: https://sqs.myregion.amazonaws.com/123456/myqueue
    #var.bucket_arn: 'arn:aws:s3:::mybucket'
    #var.bucket_list_prefix: 'prefix'
    #var.bucket_list_interval: 300s
    #var.number_of_workers: 5
    #var.shared_credential_file: /etc/filebeat/aws_credentials
    #var.credential_profile_name: fb-aws
    #var.access_key_id: access_key_id
    #var.secret_access_key: secret_access_key
    #var.session_token: session_token
    #var.visibility_timeout: 300s
    #var.api_timeout: 120s
    #var.endpoint: amazonaws.com
    #var.default_region: us-east-1
    #var.role_arn: arn:aws:iam::123456789012:role/test-mb
    #var.proxy_url: http://proxy:8080

  elb:
    enabled: false
    #var.queue_url: https://sqs.myregion.amazonaws.com/123456/myqueue
    #var.bucket_arn: 'arn:aws:s3:::mybucket'
    #var.bucket_list_prefix: 'prefix'
    #var.bucket_list_interval: 300s
    #var.number_of_workers: 5
    #var.shared_credential_file: /etc/filebeat/aws_credentials
    #var.credential_profile_name: fb-aws
    #var.access_key_id: access_key_id
    #var.secret_access_key: secret_access_key
    #var.session_token: session_token
    #var.visibility_timeout: 300s
    #var.api_timeout: 120s
    #var.endpoint: amazonaws.com
    #var.default_region: us-east-1
    #var.role_arn: arn:aws:iam::123456789012:role/test-mb
    #var.proxy_url: http://proxy:8080

  s3access:
    enabled: false
    #var.queue_url: https://sqs.myregion.amazonaws.com/123456/myqueue
    #var.bucket_arn: 'arn:aws:s3:::mybucket'
    #var.bucket_list_prefix: 'prefix'
    #var.bucket_list_interval: 300s
    #var.number_of_workers: 5
    #var.shared_credential_file: /etc/filebeat/aws_credentials
    #var.credential_profile_name: fb-aws
    #var.access_key_id: access_key_id
    #var.secret_access_key: secret_access_key
    #var.session_token: session_token
    #var.visibility_timeout: 300s
    #var.api_timeout: 120s
    #var.endpoint: amazonaws.com
    #var.default_region: us-east-1
    #var.role_arn: arn:aws:iam::123456789012:role/test-mb
    #var.proxy_url: http://proxy:8080

  vpcflow:
    enabled: false
    #var.queue_url: https://sqs.myregion.amazonaws.com/123456/myqueue
    #var.bucket_arn: 'arn:aws:s3:::mybucket'
    #var.bucket_list_prefix: 'prefix'
    #var.bucket_list_interval: 300s
    #var.number_of_workers: 5
    #var.shared_credential_file: /etc/filebeat/aws_credentials
    #var.credential_profile_name: fb-aws
    #var.access_key_id: access_key_id
    #var.secret_access_key: secret_access_key
    #var.session_token: session_token
    #var.visibility_timeout: 300s
    #var.api_timeout: 120s
    #var.endpoint: amazonaws.com
    #var.default_region: us-east-1
    #var.role_arn: arn:aws:iam::123456789012:role/test-mb
    #var.proxy_url: http://proxy:8080
var.queue_url
AWS SQS 队列 URL(未设置 var.bucket_arn 时必填)。
var.visibility_timeout
接收到的消息对 ReceiveMessage 请求隐藏的持续时间。默认为 300 秒。
var.api_timeout
AWS API 调用的最大持续时间。如果超过超时时间,AWS API 调用将被中断。默认的 AWS API 超时时间为 120 秒

API 超时时间必须长于 sqs.wait_time 值。

var.bucket_arn
AWS S3 存储桶 ARN(未设置 var.queue_url 时必填)。
var.number_of_workers
将处理列出的 S3 对象的工作线程数(设置了 var.bucket_arn 时必填)。用于垂直扩展输入。
var.bucket_list_interval
完成对 S3 存储桶的列表请求到开始下一个列表请求之间的等待间隔。默认为 120 秒。
var.bucket_list_prefix
要应用于对 S3 存储桶的列表请求的前缀。默认为空。
var.endpoint
用于访问 AWS API 的自定义端点。
var.default_region
未设置其他区域时要查询的默认区域。
var.shared_credential_file
AWS 凭证文件的文件名。
var.credential_profile_name
AWS 凭证配置文件名称。
var.access_key_id
访问密钥的第一部分。
var.secret_access_key
访问密钥的第二部分。
var.session_token
使用临时安全凭证时必填。
var.role_arn
要承担的 AWS IAM 角色。

配置行为编辑

请注意,如果 var.queue_urlvar.bucket_arn 均未设置,则不会因配置验证错误而无法启动 Filebeat,只会停止特定的文件集输入并打印警告

2021-08-26T14:33:03.661-0600 WARN [aws-s3] awss3/config.go:54 neither queue_url nor bucket_arn were provided, input aws-s3 will stop
2021-08-26T14:33:10.668-0600 INFO [input.aws-s3] compat/compat.go:111 Input aws-s3 starting {"id": "29F3565F5B2A7070"}
2021-08-26T14:33:10.668-0600 INFO [input.aws-s3] compat/compat.go:124 Input 'aws-s3' stopped {"id": "29F3565F5B2A7070"}

此行为是为了减少对未定义所有 AWS 模块文件集且将在下一个主要版本中更改的现有 Filebeat 设置的破坏而必需的。

在未使用的文件集中设置 enabled: false 将消除警告,这是建议的设置。例如(假设 cloudtrail 为未使用的文件集)

- module: aws
  cloudtrail:
    enabled: false

cloudtrail 文件集编辑

CloudTrail 监控帐户的事件。如果用户创建了跟踪,它会将这些事件作为日志文件传递到特定的 Amazon S3 存储桶。cloudtrail 文件集不会读取在启用日志文件完整性时传递到 S3 存储桶的 CloudTrail 摘要文件,它只读取 CloudTrail 日志。

filebeat aws cloudtrail

cloudwatch 文件集编辑

用户可以使用 Amazon CloudWatch Logs 来监控、存储和访问来自不同来源的日志文件。将日志从日志组导出到已设置 SQS 通知功能的 Amazon S3 存储桶。此文件集将解析这些日志,并将 timestampmessage 字段提取出来。

ec2 文件集编辑

此文件集专门用于存储在 AWS CloudWatch 中的 EC2 日志。将日志从日志组导出到已设置 SQS 通知功能的 Amazon S3 存储桶。使用此文件集,EC2 日志将被解析为 ipprogram_name 等字段。对于来自其他服务的日志,请使用 cloudwatch 文件集。

elb 文件集编辑

Elastic Load Balancing 提供访问日志,这些日志捕获有关发送到负载均衡器的请求的详细信息。每个日志都包含诸如请求接收时间、客户端的 IP 地址、延迟、请求路径和服务器响应等信息。用户可以使用这些访问日志来分析流量模式和排除故障。

要将 Classic ELB 访问日志发送到 S3 存储桶,请按照启用经典负载均衡器的访问日志中的说明进行操作。对于应用程序负载均衡器,请按照启用应用程序负载均衡器的访问日志中的说明进行操作。对于网络负载均衡器,请按照启用网络负载均衡器的访问日志中的说明进行操作。

此文件集附带预定义的仪表板

filebeat aws elb overview

s3access 文件集编辑

服务器访问日志记录提供对向存储桶发出的请求的详细记录。服务器访问日志对许多应用程序都很有用。例如,访问日志信息在安全和访问审计中非常有用。它还可以帮助您了解客户群并理解 Amazon S3 账单。

要将服务器访问日志发送到 S3 存储桶,请按照如何启用服务器访问日志记录中的说明进行操作。

此文件集附带预定义的仪表板

filebeat aws s3access overview

vpcflow 文件集编辑

VPC Flow Logs 是 AWS 中的一项功能,使用户能够捕获有关进出 VPC 中网络接口的 IP 流量的信息。流量日志数据需要发布到 Amazon S3,以便 vpcflow 文件集进行检索。流量日志可以帮助用户监控到达每个实例的流量,并确定进出网络接口的流量方向。

此文件集附带预定义的仪表板

filebeat aws vpcflow overview

AWS 凭证配置编辑

要配置 AWS 凭证,请将凭证放入 Filebeat 配置中,或使用共享凭证文件,如下例所示。

配置参数编辑

  • access_key_id:访问密钥的第一部分。
  • secret_access_key:访问密钥的第二部分。
  • session_token:使用临时安全凭证时必填。
  • credential_profile_name:共享凭证文件中的配置文件名称。
  • shared_credential_file:共享凭证文件的目录。
  • role_arn:要承担的 AWS IAM 角色。
  • external_id:在另一个帐户中承担角色时使用的外部 ID,有关使用外部 ID 的更多信息,请参阅AWS 文档
  • proxy_url:用于连接到 AWS Web 服务的代理的 URL。语法为 http(s)://<IP/主机名>:<端口>
  • fips_enabled:启用此选项将指示 Filebeat 使用服务的 FIPS 端点。Filebeat 使用的所有服务都兼容 FIPS,但 tagging 除外,但只有某些区域兼容 FIPS。有关 FIPS 端点和区域的完整列表,请参阅 https://aws.amazon.com/compliance/fips/ 或相应的服务页面 https://docs.aws.amazon.com/general/latest/gr/aws-service-information.html
  • ssl:这指定 SSL/TLS 配置。如果缺少 ssl 部分,则主机的 CA 将用于 HTTPS 连接。有关更多信息,请参阅 SSL
  • default_region:如果未设置其他区域,则查询默认区域。大多数 AWS 服务都提供可用于发出请求的区域端点。某些服务(例如 IAM)不支持区域。如果未通过任何其他方式(环境变量、凭据或实例配置文件)提供区域,则将使用此处设置的值。
  • assume_role.duration:请求的 Assume Role 会话的持续时间。如果未设置,则默认为 15 分钟。AWS 允许的最大会话持续时间在 1 小时到 12 小时之间,具体取决于您的最大会话持续时间策略。
  • assume_role.expiry_window:expiry_window 将允许在会话到期之前刷新会话。这有助于防止令牌过期导致请求因 ExpiredTokenException 而失败。

支持的格式编辑

本节中的示例指的是 Metricbeat,但用于通过 AWS 进行身份验证的凭据选项相同,无论使用哪个 Beat。

  • 使用 access_key_idsecret_access_key 和/或 session_token

用户可以将凭据放入 Metricbeat 模块配置中,也可以使用环境变量 AWS_ACCESS_KEY_IDAWS_SECRET_ACCESS_KEY 和/或 AWS_SESSION_TOKEN

如果在 Docker 上运行,则应将这些环境变量添加为 docker 命令的一部分。例如,使用 Metricbeat

$ docker run -e AWS_ACCESS_KEY_ID=abcd -e AWS_SECRET_ACCESS_KEY=abcd -d --name=metricbeat --user=root --volume="$(pwd)/metricbeat.aws.yml:/usr/share/metricbeat/metricbeat.yml:ro" docker.elastic.co/beats/metricbeat:7.11.1 metricbeat -e -E cloud.auth=elastic:1234 -E cloud.id=test-aws:1234

示例 metricbeat.aws.yml 如下所示

metricbeat.modules:
- module: aws
  period: 5m
  access_key_id: ${AWS_ACCESS_KEY_ID}
  secret_access_key: ${AWS_SECRET_ACCESS_KEY}
  session_token: ${AWS_SESSION_TOKEN}
  metricsets:
    - ec2

也可以通过文件添加环境变量。例如

$ cat env.list
AWS_ACCESS_KEY_ID=abcd
AWS_SECRET_ACCESS_KEY=abcd

$ docker run --env-file env.list -d --name=metricbeat --user=root --volume="$(pwd)/metricbeat.aws.yml:/usr/share/metricbeat/metricbeat.yml:ro" docker.elastic.co/beats/metricbeat:7.11.1 metricbeat -e -E cloud.auth=elastic:1234 -E cloud.id=test-aws:1234
  • 使用 credential_profile_name 和/或 shared_credential_file

如果未提供 access_key_idsecret_access_keyrole_arn,则 filebeat 将检查 credential_profile_name。如果您对不同的工具或应用程序使用不同的凭据,则可以使用配置文件在同一个配置文件中配置多个访问密钥。如果没有给出 credential_profile_name,则将使用默认配置文件。

shared_credential_file 是可选的,用于指定共享凭据文件的目录。如果为空,则使用默认目录。在 Windows 中,共享凭据文件位于 C:\Users\<yourUserName>\.aws\credentials。对于 Linux、macOS 或 Unix,该文件位于 ~/.aws/credentials。作为服务运行时,主路径取决于管理服务的用户的路径,因此可以使用 shared_credential_file 参数来避免歧义。有关更多详细信息,请参阅 创建共享凭据文件

  • 使用 role_arn

role_arn 用于指定要承担哪个 AWS IAM 角色来生成临时凭据。如果给出了 role_arn,filebeat 将检查是否给出了访问密钥。如果没有,filebeat 将检查凭据配置文件名称。如果两者都没有给出,则将使用默认凭据配置文件。请确保在凭据配置文件或访问密钥下提供凭据。

如果在 Docker 上运行,则需要通过卷挂载提供凭据文件。例如,使用 Metricbeat

docker run -d --name=metricbeat --user=root --volume="$(pwd)/metricbeat.aws.yml:/usr/share/metricbeat/metricbeat.yml:ro" --volume="/Users/foo/.aws/credentials:/usr/share/metricbeat/credentials:ro" docker.elastic.co/beats/metricbeat:7.11.1 metricbeat -e -E cloud.auth=elastic:1234 -E cloud.id=test-aws:1234

示例 metricbeat.aws.yml 如下所示

metricbeat.modules:
- module: aws
  period: 5m
  credential_profile_name: elastic-beats
  shared_credential_file: /usr/share/metricbeat/credentials
  metricsets:
    - ec2
  • 在 Filebeat 配置中使用 AWS 凭据

    filebeat.inputs:
    - type: aws-s3
      queue_url: https://sqs.us-east-1.amazonaws.com/123/test-queue
      access_key_id: '<access_key_id>'
      secret_access_key: '<secret_access_key>'
      session_token: '<session_token>'

    filebeat.inputs:
    - type: aws-s3
      queue_url: https://sqs.us-east-1.amazonaws.com/123/test-queue
      access_key_id: '${AWS_ACCESS_KEY_ID:""}'
      secret_access_key: '${AWS_SECRET_ACCESS_KEY:""}'
      session_token: '${AWS_SESSION_TOKEN:""}'
  • 使用 IAM 角色 ARN

    filebeat.inputs:
    - type: aws-s3
      queue_url: https://sqs.us-east-1.amazonaws.com/123/test-queue
      role_arn: arn:aws:iam::123456789012:role/test-mb
  • 使用共享的 AWS 凭据文件

    filebeat.inputs:
    - type: aws-s3
      queue_url: https://sqs.us-east-1.amazonaws.com/123/test-queue
      credential_profile_name: test-fb

AWS 凭据类型编辑

可以使用两种不同类型的 AWS 凭据:访问密钥和临时安全凭据。

  • 访问密钥

AWS_ACCESS_KEY_IDAWS_SECRET_ACCESS_KEY 是访问密钥的两个部分。它们是 IAM 用户或 AWS 账户根用户的长期凭据。有关更多详细信息,请参阅 AWS 访问密钥和秘密访问密钥

  • IAM 角色 ARN

IAM 角色是您可以在账户中创建的 IAM 身份,它具有特定的权限,用于确定该身份在 AWS 中可以做什么和不能做什么。角色没有关联的标准长期凭据,例如密码或访问密钥。相反,当您承担角色时,它会为您提供角色会话的临时安全凭据。IAM 角色 Amazon 资源名称 (ARN) 可用于指定要承担哪个 AWS IAM 角色来生成临时凭据。有关更多详细信息,请参阅 AssumeRole API 文档

以下是使用 AWS CLI 为 Metricbeat 设置 IAM 角色的步骤。请将 123456789012 替换为您自己的账户 ID。

步骤 1. 创建 example-policy.json 文件以包含所有权限

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "VisualEditor0",
            "Effect": "Allow",
            "Action": [
                "s3:GetObject",
                "sqs:ReceiveMessage"
            ],
            "Resource": "*"
        },
        {
            "Sid": "VisualEditor1",
            "Effect": "Allow",
            "Action": "sqs:ChangeMessageVisibility",
            "Resource": "arn:aws:sqs:us-east-1:123456789012:test-fb-ks"
        },
        {
            "Sid": "VisualEditor2",
            "Effect": "Allow",
            "Action": "sqs:DeleteMessage",
            "Resource": "arn:aws:sqs:us-east-1:123456789012:test-fb-ks"
        },
        {
            "Sid": "VisualEditor3",
            "Effect": "Allow",
            "Action": [
                "sts:AssumeRole",
                "sqs:ListQueues",
                "tag:GetResources",
                "ec2:DescribeInstances",
                "cloudwatch:GetMetricData",
                "ec2:DescribeRegions",
                "iam:ListAccountAliases",
                "sts:GetCallerIdentity",
                "cloudwatch:ListMetrics"
            ],
            "Resource": "*"
        }
    ]
}

步骤 2. 使用 aws iam create-policy 命令创建 IAM 策略

$ aws iam create-policy --policy-name example-policy --policy-document file://example-policy.json

步骤 3. 创建 JSON 文件 example-role-trust-policy.json,该文件定义 IAM 角色的信任关系

{
    "Version": "2012-10-17",
    "Statement": {
        "Effect": "Allow",
        "Principal": { "AWS": "arn:aws:iam::123456789012:root" },
        "Action": "sts:AssumeRole"
    }
}

步骤 4. 创建 IAM 角色并附加策略

$ aws iam create-role --role-name example-role --assume-role-policy-document file://example-role-trust-policy.json
$ aws iam attach-role-policy --role-name example-role --policy-arn "arn:aws:iam::123456789012:policy/example-policy"

完成这些步骤后,IAM 角色 ARN 可用于 Metricbeat aws 模块中的身份验证。

  • 临时安全凭据

临时安全凭据的生命周期有限,由访问密钥 ID、秘密访问密钥和通常从 GetSessionToken 返回的安全令牌组成。启用 MFA 的 IAM 用户在调用 GetSessionToken 时需要提交 MFA 代码。有关更多详细信息,请参阅 临时安全凭据sts get-session-token AWS CLI 可用于生成临时凭据。例如。启用 MFA 的情况下

aws> sts get-session-token --serial-number arn:aws:iam::1234:mfa/[email protected] --token-code 456789 --duration-seconds 129600

由于临时安全凭据是短期的,因此在它们过期后,用户需要生成新的凭据并使用新凭据修改 aws.yml 配置文件。除非为 Metricbeat 启用了实时重新加载功能,否则用户需要在更新配置文件后手动重新启动 Metricbeat 才能继续收集 Cloudwatch 指标。如果在旧凭据过期之前未更新配置文件以包含新凭据,这将导致数据丢失。对于 Metricbeat,我们建议用户在配置文件中使用访问密钥来启用 aws 模块发出 AWS api 调用,而无需频繁生成新的临时凭据和更新配置。

IAM 策略是一个实体,用于定义对 AWS 环境中对象的权限。需要将特定权限添加到 IAM 用户的策略中,以授权 Metricbeat 收集 AWS 监控指标。有关所需权限,请参阅每个指标集下的文档。

字段编辑

有关模块中每个字段的描述,请参阅导出字段部分。