

# HashiCorp Vault 的来源配置
<a name="hashicorp-vault-source-config"></a>

## 与 HashiCorp Vault 集成
<a name="hashicorp-vault-integration"></a>

HashiCorp Vault 集成使用 Amazon S3 和 Amazon SQS 来将日志数据摄取到 CloudWatch 管线中。Vault 产生两种日志类型：审计日志（所有 API 请求和响应的详细 JSON 记录）和操作日志（服务器运行状况和性能）。Fluent Bit 从 Vault 主机收集这两种日志类型，并将其传送到 Amazon S3 存储桶。当新的日志对象到达时，Amazon SQS 通知会提醒管线。

## 先决条件
<a name="hashicorp-vault-prerequisites"></a>
+ 有权创建 Amazon S3 存储桶、Amazon SQS 队列和 IAM 角色的 Amazon Web Services 账户
+ 具有管理访问权限的 HashiCorp Vault 服务器（自托管）
+ 安装了 Fluent Bit 的 Linux 主机（可以是与 Vault 相同的主机）
+ Vault 主机与 Amazon 之间的网络连接

## 日志转发设置
<a name="hashicorp-vault-log-forwarding"></a>

可以使用 Vault 文件审计设备和 Fluent Bit 将 HashiCorp Vault 审计日志转发到 Amazon S3。Vault 支持三种审计设备类型：**文件**、**套接字**和**系统日志**。我们推荐使用**文件**审计设备以获得最高可靠性。

## Amazon S3 与 Amazon SQS 设置说明
<a name="hashicorp-vault-s3-sqs-setup"></a>

请完成下面的步骤，为 HashiCorp Vault 日志摄取配置 Amazon S3 和 Amazon SQS 基础设施。

### 步骤 1：创建 Amazon S3 存储桶
<a name="hashicorp-vault-step1"></a>

创建一个 Amazon S3 存储桶来存储 HashiCorp Vault 日志。存储桶必须位于您计划创建 CloudWatch 管线的同一 Amazon 区域中。

### 步骤 2：创建 Amazon SQS 队列
<a name="hashicorp-vault-step2"></a>

Amazon SQS 队列必须与您的 Amazon S3 存储桶位于同一 Amazon 区域。当新的日志文件添加到存储桶时，此队列会收到通知。

### 步骤 3：将 Amazon S3 连接至 Amazon SQS
<a name="hashicorp-vault-step3"></a>

配置 Amazon S3 存储桶，将 `s3:ObjectCreated:*` 事件的事件通知发送到 Amazon SQS 队列。

### 步骤 4：配置 Amazon SQS 队列策略
<a name="hashicorp-vault-step4"></a>

配置 Amazon SQS 队列策略，允许 Amazon S3 存储桶将消息发送至队列。将以下策略应用于 Amazon SQS 队列：

```
{
  "Version": "2012-10-17",
  "Id": "AllowS3ToSQS",
  "Statement": [
    {
      "Sid": "AllowS3BucketNotification",
      "Effect": "Allow",
      "Principal": {
        "Service": "s3.amazonaws.com"
      },
      "Action": "sqs:SendMessage",
      "Resource": "arn:aws:sqs:<region>:<account-id>:<queue-name>",
      "Condition": {
        "ArnEquals": {
          "aws:SourceArn": "arn:aws:s3:::<YOUR-BUCKET>"
        },
        "StringEquals": {
          "aws:SourceAccount": "<account-id>"
        }
      }
    }
  ]
}
```

### 步骤 5：配置 Vault 日志导出和 Fluent Bit
<a name="hashicorp-vault-step5"></a>

启用 Vault 文件审计设备以写入审计日志：

```
vault audit enable file file_path=/var/log/vault/audit.log
```

在 Vault 服务器配置文件中配置 JSON 操作日志（`vault.hcl`）：

```
log_level = "info"
log_format = "json"
```

配置 Fluent Bit，以收集审计和操作日志并将其传送至 Amazon S3：

```
########################################
# SERVICE SECTION
########################################
[SERVICE]
    Flush        5
    Daemon       Off
    Log_Level    info
    storage.path /etc/fluent-bit/db/storage
    storage.sync normal
    storage.checksum off
    storage.backlog.mem_limit 10M

########################################
# INPUT SECTION
########################################
[INPUT]
    Name             tail
    Path             /var/log/vault/audit.log
    Tag              vault.audit
    Parser           json
    Read_from_Head   False
    DB               /etc/fluent-bit/db/vault-audit.db
    DB.Sync          Normal
    storage.type     filesystem
    Rotate_Wait      30
    Refresh_Interval 60

[INPUT]
    Name             tail
    Path             /var/log/vault/vault.log
    Tag              vault.operational
    Parser           json
    Read_from_Head   False
    DB               /etc/fluent-bit/db/vault-operational.db
    DB.Sync          Normal
    storage.type     filesystem
    Rotate_Wait      30
    Refresh_Interval 60

########################################
# OUTPUT SECTION
########################################
[OUTPUT]
    Name                 s3
    Match                vault.*
    bucket               <YOUR-BUCKET>
    region               <region>
    s3_key_format        /hashicorp-vault/%Y/%m/%d/%H/%M/%S.log.gz
    compression          gzip
    use_put_object       On
    store_dir            /etc/fluent-bit/db/s3
    total_file_size      1M
    log_key              log
    upload_timeout       60
```

### 步骤 6：IAM 权限
<a name="hashicorp-vault-step6"></a>

为 Fluent Bit 主机创建具有以下权限的 IAM 策略，以让其向 Amazon S3 存储桶写入对象：

```
{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "FluentBitS3Write",
      "Effect": "Allow",
      "Action": [
        "s3:PutObject",
        "s3:GetBucketLocation",
        "s3:ListBucket",
        "s3:ListMultipartUploadParts",
        "s3:AbortMultipartUpload",
        "s3:CreateMultipartUpload",
        "s3:CompleteMultipartUpload"
      ],
      "Resource": [
        "arn:aws:s3:::<YOUR-BUCKET>",
        "arn:aws:s3:::<YOUR-BUCKET>/hashicorp-vault/*"
      ]
    }
  ]
}
```

### 步骤 7：验证
<a name="hashicorp-vault-step7"></a>

通过确认日志文件出现在 Amazon S3 存储桶中以及正在生成 Amazon SQS 通知来验证设置。检查 Amazon SQS 队列中是否存在指示新对象创建事件的消息。

## 配置 CloudWatch 管线
<a name="hashicorp-vault-pipeline-config"></a>
+ 创建管线时，请选择 HashiCorp Vault 作为数据来源。
+ 提供 Amazon SQS 队列 URL 和 IAM 角色 ARN。
+ 选择目标 CloudWatch Logs 日志组。
+ 创建管线后，数据将在选定的日志组中可用。

## 支持的开放式网络安全架构框架事件类
<a name="hashicorp-vault-ocsf-support"></a>

此集成支持 OCSF 架构版本 v1.5.0。下表显示了 HashiCorp Vault 日志类型与 OCSF 事件类之间的映射。未映射的事件会作为原始日志转发。


| 事件名称 | OCSF 事件类 | 
| --- | --- | 
| 审核 | API 活动 [6003] | 
| 正常运行 | 不适用（原始直通） | 