

本文属于机器翻译版本。若本译文内容与英语原文存在差异，则一律以英文原文为准。

# 使用创建仪表板 AWS CLI
<a name="lake-dashboard-cli-create"></a>

本节介绍了如何使用 `create-dashboard` 命令创建自定义控制面板或“要点”控制面板。

使用时 AWS CLI，请记住您的命令在 AWS 区域 配置文件中运行。如果您想要在不同的区域中运行命令，可以为配置文件更改默认区域，或者与命令一起使用 `--region` 参数。

 CloudTrail 在手动或计划刷新期间运行查询以填充仪表板的小组件。 CloudTrail 必须获得在与仪表板小组件关联的每个事件数据存储上运行`StartQuery`操作的权限。要提供权限，请运行`put-resource-policy`命令将基于资源的策略附加到每个事件数据存储，或者在 CloudTrail 控制台上编辑事件数据存储的策略。有关策略示例，请参阅 [示例：允许 CloudTrail 运行查询以刷新仪表板](security_iam_resource-based-policy-examples.md#security_iam_resource-based-policy-examples-eds-dashboard)。

 要设置刷新计划， CloudTrail 必须获得运行`StartDashboardRefresh`操作的权限才能代表您刷新仪表板。要提供权限，请运行`put-resource-policy`操作将基于资源的策略附加到仪表板，或者在 CloudTrail 控制台上编辑仪表板的策略。有关策略示例，请参阅 [控制面板的基于资源的策略示例](security_iam_resource-based-policy-examples.md#security_iam_resource-based-policy-examples-dashboards)。

**Topics**
+ [使用创建自定义仪表板 AWS CLI](#lake-dashboard-cli-create-custom)
+ [使用启用 “亮点” 仪表板 AWS CLI](#lake-dashboard-cli-create-highlights)
+ [查看小组件的属性](lake-widget-properties.md)

## 使用创建自定义仪表板 AWS CLI
<a name="lake-dashboard-cli-create-custom"></a>

以下过程介绍了如何创建自定义控制面板、如何将所需的基于资源的策略附加到事件数据存储和控制面板，以及如何更新控制面板以设置和启用刷新计划。

1. 运行 `create-dashboard` 来创建控制面板。

   创建自定义控制面板时，您可以传入一个最多包含 10 个小组件的数组。小组件以图形方式呈现查询的结果。每个小组件都包含 `ViewProperties`、`QueryStatement` 和 `QueryParameters`。
   + `ViewProperties`：指定视图类型的属性。有关更多信息，请参阅 [查看小组件的属性](lake-widget-properties.md)。
   + `QueryStatement`— 当仪表板刷新时，查询就会 CloudTrail 运行。只要您的账户中存在事件数据存储，您就可以跨多个事件数据存储进行查询。
   + `QueryParameters`：自定义控制面板支持以下 `QueryParameters` 值：`$Period$`、`$StartTime$` 和 `$EndTime$`。要使用`?`在要替换参数的`QueryStatement`位置`QueryParameters`放置 a。 CloudTrail 将在运行查询时填写参数。

   以下示例创建了一个包含四个小组件（每种视图类型一个）的控制面板。
**注意**  
在此示例中，`?` 用单引号括起来，因为它与 `eventTime` 一起使用。根据您运行的操作系统，您可能需要用转义引号将单引号括起来。有关更多信息，请参阅[在 AWS CLI中将引号和文本与字符串结合使用](https://docs.aws.amazon.com/cli/v1/userguide/cli-usage-parameters-quoting-strings.html)。

   ```
   aws cloudtrail create-dashboard --name AccountActivityDashboard \
   --widgets '[
       {
         "ViewProperties": {
           "Height": "2",
           "Width": "4",
           "Title": "TopErrors",
           "View": "Table"
         },
         "QueryStatement": "SELECT errorCode, COUNT(*) AS eventCount FROM eds WHERE eventTime > '?' AND eventTime < '?' AND (errorCode is not null) GROUP BY errorCode ORDER BY eventCount DESC LIMIT 100",
         "QueryParameters": ["$StartTime$", "$EndTime$"]
       },
       {
         "ViewProperties": {
           "Height": "2",
           "Width": "4",
           "Title": "MostActiveRegions",
           "View": "PieChart",
           "LabelColumn": "awsRegion",
           "ValueColumn": "eventCount",
           "FilterColumn": "awsRegion"
         },
         "QueryStatement": "SELECT awsRegion, COUNT(*) AS eventCount FROM eds where eventTime > '?' and eventTime < '?' GROUP BY awsRegion ORDER BY eventCount LIMIT 100",
         "QueryParameters": ["$StartTime$", "$EndTime$"]
       },
       {
         "ViewProperties": {
           "Height": "2",
           "Width": "4",
           "Title": "AccountActivity",
           "View": "LineChart",
           "YAxisColumn": "eventCount",
           "XAxisColumn": "eventDate",
           "FilterColumn": "readOnly"
         },
         "QueryStatement": "SELECT DATE_TRUNC('?', eventTime) AS eventDate, IF(readOnly, 'read', 'write') AS readOnly, COUNT(*) as eventCount FROM eds WHERE eventTime > '?' AND eventTime < '?' GROUP BY DATE_TRUNC('?', eventTime), readOnly ORDER BY DATE_TRUNC('?', eventTime), readOnly",
         "QueryParameters": ["$Period$", "$StartTime$", "$EndTime$", "$Period$", "$Period$"]
       },
       {
         "ViewProperties": {
           "Height": "2",
           "Width": "4",
           "Title": "TopServices",
           "View": "BarChart",
           "LabelColumn": "service",
           "ValueColumn": "eventCount",
           "FilterColumn": "service",
           "Orientation": "Horizontal"
         },
         "QueryStatement": "SELECT REPLACE(eventSource, '.amazonaws.com') AS service, COUNT(*) AS eventCount FROM eds WHERE eventTime > '?' AND eventTime < '?' GROUP BY eventSource ORDER BY eventCount DESC LIMIT 100",
         "QueryParameters": ["$StartTime$", "$EndTime$"]
       }
     ]'
   ```

1. 创建一个单独的文件，其中包含小组件的 `QueryStatement` 中包含的每个事件数据存储所需的资源策略。使用以下示例策略声明命名该文件*policy.json*：

    *123456789012*用您的账户 ID 替换为控制面板的 ARN。*arn:aws:cloudtrail:us-east-1:123456789012:dashboard/exampleDashboard*

   有关控制面板的基于资源的策略的更多信息，请参阅[示例：允许 CloudTrail 运行查询以刷新仪表板](security_iam_resource-based-policy-examples.md#security_iam_resource-based-policy-examples-eds-dashboard)。

1. 运行 `put-resource-policy` 命令来附加策略。您也可以在 CloudTrail 控制台上更新事件数据存储的基于资源的策略。

   以下示例会将基于资源的策略附加到事件数据存储。

   ```
   aws cloudtrail put-resource-policy \
   --resource-arn eds-arn \
   --resource-policy file://policy.json
   ```

1. 运行 `put-resource-policy` 命令将基于资源的策略附加到控制面板。有关策略示例，请参阅 [控制面板的基于资源的策略示例](security_iam_resource-based-policy-examples.md#security_iam_resource-based-policy-examples-dashboards)。

   以下示例会将基于资源的策略附加到控制面板。*account-id*替换为您的账户 ID *dashboard-arn* 和控制面板的 ARN。

   ```
   aws cloudtrail put-resource-policy \
   --resource-arn dashboard-arn \
   --resource-policy '{"Version": "2012-10-17",		 	 	  "Statement": [{"Sid": "DashboardPolicy", "Effect": "Allow", "Principal": { "Service": "cloudtrail.amazonaws.com" }, "Action": "cloudtrail:StartDashboardRefresh", "Condition": { "StringEquals": { "AWS:SourceArn": "dashboard-arn", "AWS:SourceAccount": "account-id"}}}]}'
   ```

1. 运行 `update-dashboard` 命令通过配置 `--refresh-schedule` 参数来设置和启用刷新计划。

   `--refresh-schedule` 由以下可选参数组成：
   + `Frequency`：计划的 `Unit` 和 `Value`。

     对于自定义控制面板，单位可以是 `HOURS` 或 `DAYS`。

      对于自定义控制面板，当单位为 `HOURS` 时，以下值有效：`1`、`6`、`12`、`24`

     对于自定义控制面板，当单位为 `DAYS` 时，唯一有效值为 `1`。
   + `Status`：指定是否启用刷新计划。请将值设置为 `ENABLED` 以启用刷新计划，或将值设置为 `DISABLED` 以关闭刷新计划。
   + `TimeOfDay `：一天中运行计划的时间（UTC）；对于仅每小时，则指分钟；默认值为 00:00。

   以下示例设置了每六个小时刷新计划并启用该计划。

   ```
   aws cloudtrail update-dashboard --dashboard-id AccountActivityDashboard \
   --refresh-schedule '{"Frequency": {"Unit": "HOURS", "Value": 6}, "Status": "ENABLED"}'
   ```

## 使用启用 “亮点” 仪表板 AWS CLI
<a name="lake-dashboard-cli-create-highlights"></a>

以下过程介绍了如何创建“要点”控制面板、如何将所需的基于资源的策略附加到事件数据存储和控制面板，以及如何更新控制面板以设置和启用刷新计划。

1. 运行 `create-dashboard` 命令来创建“要点”控制面板。要创建此控制面板，`--name` 必须是 `AWSCloudTrail-Highlights`。

   ```
   aws cloudtrail create-dashboard --name AWSCloudTrail-Highlights
   ```

1. 对于您账户中的每个事件数据存储，请运行 `put-resource-policy` 命令来将基于资源的策略附加到事件数据存储。您也可以在 CloudTrail 控制台上更新事件数据存储的基于资源的策略。有关策略示例，请参阅 [示例：允许 CloudTrail 运行查询以刷新仪表板](security_iam_resource-based-policy-examples.md#security_iam_resource-based-policy-examples-eds-dashboard)。

   以下示例会将基于资源的策略附加到事件数据存储。*account-id*替换为您的账户 ID、*eds-arn*事件数据存储的 ARN 以及控制面板*dashboard-arn*的 ARN。

   ```
   aws cloudtrail put-resource-policy \
   --resource-arn eds-arn \
   --resource-policy '{"Version": "2012-10-17",		 	 	  "Statement": [{"Sid": "EDSPolicy", "Effect": "Allow", "Principal": { "Service": "cloudtrail.amazonaws.com" }, "Action": "cloudtrail:StartQuery", "Condition": { "StringEquals": { "AWS:SourceArn": "dashboard-arn", "AWS:SourceAccount": "account-id"}}} ]}'
   ```

1. 运行 `put-resource-policy` 命令将基于资源的策略附加到控制面板。有关策略示例，请参阅 [控制面板的基于资源的策略示例](security_iam_resource-based-policy-examples.md#security_iam_resource-based-policy-examples-dashboards)。

   以下示例会将基于资源的策略附加到控制面板。*account-id*替换为您的账户 ID *dashboard-arn* 和控制面板的 ARN。

   ```
   aws cloudtrail put-resource-policy \
   --resource-arn dashboard-arn \
   --resource-policy '{"Version": "2012-10-17",		 	 	  "Statement": [{"Sid": "DashboardPolicy", "Effect": "Allow", "Principal": { "Service": "cloudtrail.amazonaws.com" }, "Action": "cloudtrail:StartDashboardRefresh", "Condition": { "StringEquals": { "AWS:SourceArn": "dashboard-arn", "AWS:SourceAccount": "account-id"}}}]}'
   ```

1. 运行 `update-dashboard` 命令通过配置 `--refresh-schedule` 参数来设置和启用刷新计划。对于“要点”控制面板，唯一有效的 `UNIT` 是 `HOURS`，唯一有效的 `Value` 是 `6`。

   ```
   aws cloudtrail update-dashboard --dashboard-id AWSCloudTrail-Highlights \
   --refresh-schedule '{"Frequency": {"Unit": "HOURS", "Value": 6}, "Status": "ENABLED"}'
   ```