

# 将流日志发布到 Amazon Data Firehose
<a name="flow-logs-firehose"></a>

流日志可以将流日志数据直接发布到 Amazon Data Firehose。Amazon Data Firehose 是一项完全托管的服务，可收集、转换实时数据流并将此类数据流传送到各种 Amazon 数据存储和分析服务中。该服务可代表您处理数据摄取任务。

就 VPC 流日志而言，Firehose 非常适用。VPC 流日志可捕获有关在 VPC 中传入和传出网络接口的 IP 流量的信息。此类数据对于安全监控、性能分析和监管合规性至关重要。不过，管理这种持续日志数据流的存储和处理可能是一项复杂的资源密集型任务。

通过将 Firehose 与 VPC 流日志集成，您可以将此类数据传输到首选目标，例如 Amazon S3 或 Amazon Redshift。Firehose 会就处理 VPC 流日志摄取、转换和传输等任务进行扩展，从而减轻您的运营负担，让您可以专注于分析日志和获取洞察，而不必担心底层基础设施。

此外，Firehose 还提供数据转换、压缩和加密等功能，可以提高 VPC 流日志处理管道的效率和安全性。将 Firehose 用于 VPC 流日志可以简化数据管理工作，让您能够从网络流量数据中获得洞察。

流日志数据发布到 Amazon Data Firehose 时，会以纯文本格式发布到 Amazon Data Firehose 传输流。

**定价**  
将收取标准摄取和传输费用。有关更多信息，请打开 **Amazon CloudWatch Pricing**（Amazon CloudWatch 定价），选择 **Logs**（日志），找到 [Vended Logs](https://www.amazonaws.cn/cloudwatch/pricing/)（已出售日志）。

**Topics**
+ [

# 用于跨账户传输的 IAM 角色
](firehose-cross-account-delivery.md)
+ [

# 创建发布到 Amazon Data Firehose 的流日志
](flow-logs-firehose-create-flow-log.md)

# 用于跨账户传输的 IAM 角色
<a name="firehose-cross-account-delivery"></a>

发布到 Amazon Data Firehose 时，您可以选择与要监控的资源位于同一账户（源账户）或不同账户（目的地账户）中的传输流。要启用跨账户将流日志传输到 Amazon Data Firehose，您必须在源账户中创建 IAM 角色，并在目的地账户中创建 IAM 角色。

**Topics**
+ [

## 源账户角色
](#firehose-source-account-role)
+ [

## 目的地账户角色
](#firehose-destination-account-role)

## 源账户角色
<a name="firehose-source-account-role"></a>

在源账户中，创建授予以下权限的角色。在此示例中，角色的名称为 `mySourceRole`，但您也可以为该角色选择其他名称。最后一条语句允许目的地账户中的角色代入该角色。条件语句确保该角色仅传递给日志传输服务，并且仅在监控指定资源时传递。创建策略时，使用条件键 `iam:AssociatedResourceARN` 指定要监控的 VPC、网络接口或子网。

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": "iam:PassRole",
            "Resource": "arn:aws:iam::123456789012:role/mySourceRole",
            "Condition": {
                "StringEquals": {
                    "iam:PassedToService": "delivery.logs.amazonaws.com"
                },
                "StringLike": {
                    "iam:AssociatedResourceARN": [
                        "arn:aws:ec2:us-east-1:123456789012:vpc/vpc-00112233344556677"
                    ]
                }
            }
        },
        {
            "Effect": "Allow",
            "Action": [
                "logs:CreateLogDelivery",
                "logs:DeleteLogDelivery",
                "logs:ListLogDeliveries",
                "logs:GetLogDelivery"
            ],
            "Resource": "*"
        },
        {
            "Effect": "Allow",
            "Action": "sts:AssumeRole",
            "Resource": "arn:aws:iam::111122223333:role/AWSLogDeliveryFirehoseCrossAccountRole"
        }
    ]
}
```

------

确保该角色具有以下信任策略，允许日志传输服务代入该角色。

------
#### [ JSON ]

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Allow",
      "Principal": {
        "Service": "delivery.logs.amazonaws.com"
      },
      "Action": "sts:AssumeRole"
    }
  ]
}
```

------

使用以下步骤从源账户中创建角色。

**创建源账户角色**

1. 打开 IAM 控制台：[https://console.aws.amazon.com/iam/](https://console.amazonaws.cn/iam/)。

1. 在导航窗格中，选择**策略**。

1. 选择**创建策略**。

1. 在**创建策略**页面上，执行以下操作：

   1. 选择 **JSON**。

   1. 将此窗口的内容替换为此部分开头的权限策略。

   1. 选择**下一步**。

   1. 输入您的策略名称以及可选的描述和标签，然后选择**创建策略**。

1. 在导航窗格中，选择**角色**。

1. 选择**创建角色**。

1. 对于 **Trusted entity type**（可信实体类型），选择 **Custom trust policy**（自定义信任策略）。对于 **Custom trust policy**（自定义信任策略），将 `"Principal": {},` 替换为以下内容，以指定日志传输服务。选择**下一步**。

   ```
   "Principal": {
      "Service": "delivery.logs.amazonaws.com"
   },
   ```

1. 在 **Add permissions**（添加权限）页面上，选中您在此过程中先前创建的策略复选框，然后选择 **Next**（下一步）。

1. 输入您的角色的名称，并且可以选择提供描述。

1. 选择**Create role（创建角色）**。

## 目的地账户角色
<a name="firehose-destination-account-role"></a>

在目的地账户中，创建名称以 **AWSLogDeliveryFirehoseCrossAccountRole** 开头的角色。该角色必须授予以下权限。

------
#### [ JSON ]

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
          "iam:CreateServiceLinkedRole",
          "firehose:TagDeliveryStream"
      ],
      "Resource": "*"
    }
  ]
}
```

------

确保该角色具有以下信任策略，允许您在源账户中创建的角色代入该角色。

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Principal": {
                "AWS": "arn:aws:iam::111122223333:role/mySourceRole"
            },
            "Action": "sts:AssumeRole"
        }
    ]
}
```

------

使用以下步骤从目的地账户中创建角色。

**创建目的地账户角色**

1. 打开 IAM 控制台：[https://console.aws.amazon.com/iam/](https://console.amazonaws.cn/iam/)。

1. 在导航窗格中，选择**策略**。

1. 选择**创建策略**。

1. 在**创建策略**页面上，执行以下操作：

   1. 选择 **JSON**。

   1. 将此窗口的内容替换为此部分开头的权限策略。

   1. 选择**下一步**。

   1. 输入以 **AWSLogDeliveryFirehoseCrossAccountRole** 为开头的策略名称，然后选择 **Create policy**（创建策略）。

1. 在导航窗格中，选择**角色**。

1. 选择**创建角色**。

1. 对于 **Trusted entity type**（可信实体类型），选择 **Custom trust policy**（自定义信任策略）。对于 **Custom trust policy**（自定义信任策略），将 `"Principal": {},` 替换为以下内容，以指定源账户角色。选择**下一步**。

   ```
   "Principal": {
      "AWS": "arn:aws:iam::source-account:role/mySourceRole"
   },
   ```

1. 在 **Add permissions**（添加权限）页面上，选中您在此过程中先前创建的策略复选框，然后选择 **Next**（下一步）。

1. 输入您的角色的名称，并且可以选择提供描述。

1. 选择**Create role（创建角色）**。

# 创建发布到 Amazon Data Firehose 的流日志
<a name="flow-logs-firehose-create-flow-log"></a>

您可以为 VPC、子网或网络接口创建流日志。

**先决条件**
+ 创建目的地 Amazon Data Firehose 传输流。使用 **Direct Put** 作为来源。有关更多信息，请参阅[创建 Amazon Data Firehose 传输流](https://docs.amazonaws.cn/firehose/latest/dev/basic-create.html)。
+ 创建流日志的账户使用的 IAM 角色必须授予下列权限，以将流日志发布到 Amazon Data Firehose。

------
#### [ JSON ]

****  

  ```
  {
      "Version":"2012-10-17",		 	 	 
      "Statement": [
          {
              "Effect": "Allow",
              "Action": [
                  "logs:CreateLogDelivery",
                  "logs:DeleteLogDelivery",
                  "iam:CreateServiceLinkedRole",
                  "firehose:TagDeliveryStream"
              ],
              "Resource": "*"
          }
      ]
  }
  ```

------
+ 要将流日志发布到不同账户，请创建所需的 IAM 角色，如 [用于跨账户传输的 IAM 角色](firehose-cross-account-delivery.md) 中所述。

**创建发布到 Amazon Data Firehose 的流日志**

1. 请执行以下操作之一：
   + 通过以下网址打开 Amazon EC2 控制台：[https://console.aws.amazon.com/ec2/](https://console.amazonaws.cn/ec2/)。在导航窗格中，选择**网络接口**。选中该网络接口的复选框。
   + 通过 [https://console.aws.amazon.com/vpc/](https://console.amazonaws.cn/vpc/) 打开 Amazon VPC 控制台。在导航窗格中，选择 **Your VPCs**(您的 VPC)。选中该 VPC 的复选框。
   + 通过 [https://console.aws.amazon.com/vpc/](https://console.amazonaws.cn/vpc/) 打开 Amazon VPC 控制台。在导航窗格中，选择 **Subnets**(子网)。选中子网的复选框。

1. 选择 **Actions**（操作）、**Create flow log**（创建流日志）。

1. 对于**Filter（筛选条件）**，指定要记录的流量的类型。
   + **Accepted**（已接受）– 仅记录接受的流量
   + **Rejected**（已拒绝）– 仅记录拒绝的流量
   + **All**（所有流量）– 记录接受和拒绝的流量

1. 对于 **Maximum aggregation interval（最大聚合时间间隔）**，选择捕获流并聚合到一个流日志记录中的最大时间段。

1. 对于 **Destination**（目的地），请选择下列选项之一：
   + **发送到同一个账户中的 Amazon Data Firehose** – 传输流和要监控的资源位于同一账户中。
   + **发送到不同账户中的 Amazon Data Firehose** – 传输流和要监控的资源位于不同账户中。

1. 对于 **Amazon Data Firehose** 流名称，选择您创建的传输流。

1. [仅限跨账户传输] 对于**服务访问**，请选择具有发布日志权限的现有 [IAM 服务角色进行跨账户传输](firehose-cross-account-delivery.md)，或者选择**设置权限**以打开 IAM 控制台并创建服务角色。

1. 对于 **Log record format（日志记录格式）**，选定流日志记录的格式。
   + 要使用默认流日志记录格式，请选择 **Amazon default format（亚马逊云科技默认格式）**。
   + 要创建自定义格式，请选择**Custom format**（自定义格式）。对于**Log format**（日志行格式），选择要包括在流日志记录中的字段。

1. 对于**其他元数据**，选择是否要以日志格式包含来自 Amazon ECS 的元数据。

1. （可选）选择**添加标签**以将标签应用于流日志。

1. 选择 **Create flow log（创建流日志）**。

**使用命令行创建发布到 Amazon Data Firehose 的流日志**

使用以下命令之一：
+ [create-flow-logs](https://docs.amazonaws.cn/cli/latest/reference/ec2/create-flow-logs.html)（Amazon CLI）
+ [New-EC2FlowLog](https://docs.amazonaws.cn/powershell/latest/reference/items/New-EC2FlowLog.html)（Amazon Tools for Windows PowerShell）

以下 Amazon CLI 示例将创建流日志，用于捕获指定 VPC 的所有流量，并将流日志传输到同一账户中的指定 Amazon Data Firehose 传输流。

```
aws ec2 create-flow-logs --traffic-type ALL \
  --resource-type VPC \
  --resource-ids vpc-00112233344556677 \
  --log-destination-type kinesis-data-firehose \
  --log-destination arn:aws:firehose:us-east-1:123456789012:deliverystream/flowlogs_stream
```

以下 Amazon CLI 示例将创建流日志，用于捕获指定 VPC 的所有流量，并将流日志传输到不同账户中的指定 Amazon Data Firehose 传输流。

```
aws ec2 create-flow-logs --traffic-type ALL \
  --resource-type VPC \
  --resource-ids vpc-00112233344556677 \
  --log-destination-type kinesis-data-firehose \
  --log-destination arn:aws:firehose:us-east-1:123456789012:deliverystream/flowlogs_stream \
  --deliver-logs-permission-arn arn:aws:iam::source-account:role/mySourceRole \ 
  --deliver-cross-account-role arn:aws:iam::destination-account:role/AWSLogDeliveryFirehoseCrossAccountRole
```

由于创建了流日志，您可以从为传输流配置的目标获取流日志数据。