

• AWS Systems Manager CloudWatch 控制面板在 2026 年 4 月 30 日之后将不再可用。客户可以像现在一样继续使用 Amazon CloudWatch 控制台来查看、创建和管理其 Amazon CloudWatch 控制面板。有关更多信息，请参阅 [Amazon CloudWatch 控制面板文档](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/CloudWatch_Dashboards.html)。

# 演练：使用资源数据同步聚合清单数据
<a name="inventory-resource-data-sync"></a>

以下演练介绍了如何使用 AWS Command Line Interface (AWS CLI) 为 AWS Systems Manager Inventory 创建资源数据同步配置。资源数据同步可将所有托管式节点中的清单数据自动移植到中央 Amazon Simple Storage Service (Amazon S3) 存储桶。每当发现新的清单数据时，同步操作会自动更新中央 Amazon S3 存储桶中的数据。

此演练还介绍了如何使用 Amazon Athena 和 Amazon Quick 查询及分析聚合数据。有关在 AWS 管理控制台 中使用 Systems Manager 创建资源数据同步的信息，请参阅 [演练：使用资源数据同步聚合清单数据](#inventory-resource-data-sync)。有关在 AWS 管理控制台 中使用 Systems Manager 从多个 AWS 区域 和账户中查询清单的信息，请参阅 [查询多个区域和账户的清单数据](systems-manager-inventory-query.md)。

**注意**  
本演练包括有关如何使用 AWS Key Management Service (AWS KMS) 加密同步的信息。Inventory 不收集任何用户特定、专有或敏感数据，因此加密是可选的。有关 AWS KMS 的更多信息，请参阅 [AWS Key Management Service Developer Guide](https://docs.aws.amazon.com/kms/latest/developerguide/)。

**开始前的准备工作**  
在开始本节中的演练之前，请审核或完成以下任务：
+ 从托管式节点收集清单数据。对于本演练中的 Amazon Athena 和 Amazon Quick 章节，我们建议您采集应用程序数据。有关如何收集清单数据的更多信息，请参阅 [配置清单收集](inventory-collection.md) 或 [使用 AWS CLI 配置清单数据收集](inventory-collection-cli.md)。
+ （可选）如果清单数据存储在使用 AWS Key Management Service (AWS KMS) 加密的 Amazon Simple Storage Service (Amazon S3) 存储桶中，您还必须配置 IAM 账户和 `Amazon-GlueServiceRoleForSSM` 服务角色，以便进行 AWS KMS 加密。如果您没有配置 IAM 账户和此角色，则当您选择控制台中的 **Detailed View (详细视图)** 选项卡时，Systems Manager 将显示 `Cannot load Glue tables`。有关更多信息，请参阅 [（可选）配置查看 AWS KMS 加密数据的权限](systems-manager-inventory-query.md#systems-manager-inventory-query-kms)。
+ （可选）如果希望使用 AWS KMS 来加密资源数据同步，则您必须创建包含以下策略的新密钥，或者必须更新现有密钥并向其添加此策略。

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

****  

  ```
  {
      "Version":"2012-10-17",		 	 	 
      "Id": "ssm-access-policy",
      "Statement": [
          {
              "Sid": "ssm-access-policy-statement",
              "Action": [
                  "kms:GenerateDataKey"
              ],
              "Effect": "Allow",
              "Principal": {
                  "Service": "ssm.amazonaws.com"
              },
              "Resource": "arn:aws:kms:us-east-1:123456789012:key/KMS_key_id",
              "Condition": {
                  "StringLike": {
                      "aws:SourceAccount": "123456789012"
                  },
                  "ArnLike": {
                      "aws:SourceArn": "arn:aws:ssm:*:123456789012:resource-data-sync/*"
                  }
              }
          }
      ]
  }
  ```

------

**为 Inventory 创建资源数据同步**

1. 通过以下网址打开 Amazon S3 控制台：[https://console.aws.amazon.com/s3/](https://console.aws.amazon.com/s3/)。

1. 创建用来存储聚合清单数据的存储桶。有关更多信息，请参阅 *Amazon Simple Storage Service 用户指南*中的[创建存储桶](https://docs.aws.amazon.com/AmazonS3/latest/userguide/create-bucket-overview.html)。请记下存储桶名称和创建此存储桶的 AWS 区域。

1. 创建存储桶后，选择 **Permissions** 选项卡，然后选择 **Bucket Policy**。

1. 将下面的存储桶策略复制并粘贴到策略编辑器中。将 amzn-s3-demo-bucket 和 *account-id* 分别替换为您创建的 Amazon S3 存储桶的名称和有效的 AWS 账户 ID。添加多个账户时，请为每个账户添加一个附加条件字符串和 ARN。添加一个账户时，请从示例中删除附加占位符。或者，将 *bucket-prefix* 替换为 Amazon S3 前缀（子目录）的名称。如果您未创建前缀，则从该策略的 ARN 中删除 *bucket-prefix/*。

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

****  

   ```
   {
       "Version":"2012-10-17",		 	 	 
       "Statement": [
           {
               "Sid": " SSMBucketDelivery",
               "Effect": "Allow",
               "Principal": {
                   "Service": "ssm.amazonaws.com"
               },
               "Action": "s3:PutObject",
               "Resource": [
                   "arn:aws:s3:::amzn-s3-demo-bucket/bucket-prefix/*/accountid=111122223333/*"
               ],
               "Condition": {
                   "StringEquals": {
                       "s3:x-amz-acl": "bucket-owner-full-control",
                       "aws:SourceAccount": [
                           "111122223333",
                           "444455556666",
                           "123456789012",
                           "777788889999"
                       ]
                   },
                   "ArnLike": {
                       "aws:SourceArn": [
                           "arn:aws:ssm:*:111122223333:resource-data-sync/*",
                           "arn:aws:ssm:*:444455556666:resource-data-sync/*",
                           "arn:aws:ssm:*:123456789012:resource-data-sync/*",
                           "arn:aws:ssm:*:777788889999:resource-data-sync/*"
                       ]
                   }
               }
           }
       ]
   }
   ```

------

1. （可选）如果要加密同步，则必须将以下条件添加到上一步中列出的策略中。将这些内容添加在 `StringEquals` 部分中。

   ```
   "s3:x-amz-server-side-encryption":"aws:kms",
   "s3:x-amz-server-side-encryption-aws-kms-key-id":"arn:aws:kms:region:account_ID:key/KMS_key_ID"
   ```

   示例如下：

   ```
   "StringEquals": {
             "s3:x-amz-acl": "bucket-owner-full-control",
             "aws:SourceAccount": "account-id",
             "s3:x-amz-server-side-encryption":"aws:kms",
             "s3:x-amz-server-side-encryption-aws-kms-key-id":"arn:aws:kms:region:account_ID:key/KMS_key_ID"
           }
   ```

1. 安装并配置 AWS Command Line Interface（AWS CLI）（如果尚未执行该操作）。

   有关更多信息，请参阅[安装或更新 AWS CLI 的最新版本](https://docs.aws.amazon.com/cli/latest/userguide/getting-started-install.html)。

1. （可选）如果要加密同步，请运行以下命令，以验证存储桶策略是否强制执行 AWS KMS 密钥要求。将每个*示例资源占位符*替换为您自己的信息。

------
#### [ Linux & macOS ]

   ```
   aws s3 cp ./A_file_in_the_bucket s3://amzn-s3-demo-bucket/prefix/ \
   --sse aws:kms \
   --sse-kms-key-id "arn:aws:kms:region:account_ID:key/KMS_key_id" \
   --region region, for example, us-east-2
   ```

------
#### [ Windows ]

   ```
   aws s3 cp ./A_file_in_the_bucket s3://amzn-s3-demo-bucket/prefix/ ^ 
       --sse aws:kms ^
       --sse-kms-key-id "arn:aws:kms:region:account_ID:key/KMS_key_id" ^
       --region region, for example, us-east-2
   ```

------

1. 运行以下命令，以使用您在此过程开始时创建的 Amazon S3 存储桶创建资源数据同步配置。此命令从您登录的 AWS 区域创建同步。
**注意**  
如果同步和目标 Amazon S3 存储桶位于不同区域中，您可能需要支付数据传输费用。有关更多信息，请参阅 [Amazon S3 定价](https://aws.amazon.com/s3/pricing/)。

------
#### [ Linux & macOS ]

   ```
   aws ssm create-resource-data-sync \
   --sync-name a_name \
   --s3-destination "BucketName=amzn-s3-demo-bucket,Prefix=prefix_name, if_specified,SyncFormat=JsonSerDe,Region=bucket_region"
   ```

------
#### [ Windows ]

   ```
   aws ssm create-resource-data-sync ^
   --sync-name a_name ^
   --s3-destination "BucketName=amzn-s3-demo-bucket,Prefix=prefix_name, if_specified,SyncFormat=JsonSerDe,Region=bucket_region"
   ```

------

   您可以使用 `region` 参数指定创建同步配置的位置。在下例中，来自 us-west-1 区域的清单数据将同步到 us-west-2 区域内的 Amazon S3 存储桶中。

------
#### [ Linux & macOS ]

   ```
   aws ssm create-resource-data-sync \
       --sync-name InventoryDataWest \
       --s3-destination "BucketName=amzn-s3-demo-bucket,Prefix=HybridEnv,SyncFormat=JsonSerDe,Region=us-west-2" 
       --region us-west-1
   ```

------
#### [ Windows ]

   ```
   aws ssm create-resource-data-sync ^ 
   --sync-name InventoryDataWest ^
   --s3-destination "BucketName=amzn-s3-demo-bucket,Prefix=HybridEnv,SyncFormat=JsonSerDe,Region=us-west-2" ^ --region us-west-1
   ```

------

   （可选）如果要使用 AWS KMS 加密同步，请运行以下命令创建同步。如果您加密同步，则 AWS KMS 密钥和 Amazon S3 存储桶必须位于同一区域中。

------
#### [ Linux & macOS ]

   ```
   aws ssm create-resource-data-sync \
   --sync-name sync_name \
   --s3-destination "BucketName=amzn-s3-demo-bucket,Prefix=prefix_name, if_specified,SyncFormat=JsonSerDe,AWSKMSKeyARN=arn:aws:kms:region:account_ID:key/KMS_key_ID,Region=bucket_region" \
   --region region
   ```

------
#### [ Windows ]

   ```
   aws ssm create-resource-data-sync ^
   --sync-name sync_name ^
   --s3-destination "BucketName=amzn-s3-demo-bucket,Prefix=prefix_name, if_specified,SyncFormat=JsonSerDe,AWSKMSKeyARN=arn:aws:kms:region:account_ID:key/KMS_key_ID,Region=bucket_region" ^
   --region region
   ```

------

1. 运行以下命令查看同步配置的状态。

   ```
   aws ssm list-resource-data-sync 
   ```

   如果您在其他区域中创建了同步配置，则必须指定 `region` 参数，如下例所示。

   ```
   aws ssm list-resource-data-sync --region us-west-1
   ```

1. 在成功创建同步配置后，检查 Amazon S3 中的目标存储桶。清单数据应在几分钟内显示。

**使用 Amazon Athena 中的数据**

以下部分介绍如何在 Amazon Athena 中查看和查询数据。在开始之前，我们建议您首先了解 Athena。有关更多信息，请参阅 *Amazon Athena 用户指南*中的[什么是 Amazon Athena？](https://docs.aws.amazon.com/athena/latest/ug/what-is.html)和[使用数据](https://docs.aws.amazon.com/athena/latest/ug/work-with-data.html)。

**在 Amazon Athena 中查看和查询数据**

1. 从 [https://console.aws.amazon.com/athena/](https://console.aws.amazon.com/athena/home) 打开 Athena 控制台。

1. 将以下语句复制并粘贴到查询编辑器中，然后选择 **Run Query**。

   ```
   CREATE DATABASE ssminventory
   ```

   系统将创建一个名为 ssminventory 的数据库。

1. 将以下语句复制并粘贴到查询编辑器中，然后选择 **Run Query**。将 amzn-s3-demo-bucket 和 *bucket\$1prefix* 分别替换为 Amazon S3 目标的名称和前缀。

   ```
   CREATE EXTERNAL TABLE IF NOT EXISTS ssminventory.AWS_Application (
   Name string,
   ResourceId string,
   ApplicationType string,
   Publisher string,
   Version string,
   InstalledTime string,
   Architecture string,
   URL string,
   Summary string,
   PackageId string
   ) 
   PARTITIONED BY (AccountId string, Region string, ResourceType string)
   ROW FORMAT SERDE 'org.openx.data.jsonserde.JsonSerDe'
   WITH SERDEPROPERTIES (
     'serialization.format' = '1'
   ) LOCATION 's3://amzn-s3-demo-bucket/bucket_prefix/AWS:Application/'
   ```

1. 将以下语句复制并粘贴到查询编辑器中，然后选择 **Run Query**。

   ```
   MSCK REPAIR TABLE ssminventory.AWS_Application
   ```

   系统将对表进行分区。
**注意**  
如果您从其他 AWS 区域或 AWS 账户中创建资源数据同步，则必须再次运行此命令以更新分区。您可能还需要更新 Amazon S3 存储桶策略。

1. 要预览数据，请选择 `AWS_Application` 表旁边的视图图标。  
![\[Amazon Athena 中的预览数据图标。\]](http://docs.aws.amazon.com/zh_cn/systems-manager/latest/userguide/images/sysman-inventory-resource-data-sync-walk.png)

1. 将以下语句复制并粘贴到查询编辑器中，然后选择 **Run Query**。

   ```
   SELECT a.name, a.version, count( a.version) frequency 
   from aws_application a where
   a.name = 'aws-cfn-bootstrap'
   group by a.name, a.version
   order  by frequency desc
   ```

   该查询将返回不同版本的 `aws-cfn-bootstrap`（它是 Linux、macOS 和 Windows Server 的 Amazon Elastic Compute Cloud (Amazon EC2) 实例上出现的 AWS 应用程序）的计数。

1. 分别将以下语句复制并粘贴到查询编辑器中，将 amzn-s3-demo-bucket 和 *bucket-prefix* 分别替换为 Amazon S3 的相应信息，然后选择**运行查询**。这些语句将在 Athena 中设置其他清单表。

   ```
   CREATE EXTERNAL TABLE IF NOT EXISTS ssminventory.AWS_AWSComponent (
    `ResourceId` string,
     `Name` string,
     `ApplicationType` string,
     `Publisher` string,
     `Version` string,
     `InstalledTime` string,
     `Architecture` string,
     `URL` string
   )
   PARTITIONED BY (AccountId string, Region string, ResourceType string)
   ROW FORMAT SERDE 'org.openx.data.jsonserde.JsonSerDe'
   WITH SERDEPROPERTIES (
     'serialization.format' = '1'
   ) LOCATION 's3://amzn-s3-demo-bucket/bucket-prefix/AWS:AWSComponent/'
   ```

   ```
   MSCK REPAIR TABLE ssminventory.AWS_AWSComponent
   ```

   ```
   CREATE EXTERNAL TABLE IF NOT EXISTS ssminventory.AWS_WindowsUpdate (
     `ResourceId` string,
     `HotFixId` string,
     `Description` string,
     `InstalledTime` string,
     `InstalledBy` string
   )
   PARTITIONED BY (AccountId string, Region string, ResourceType string)
   ROW FORMAT SERDE 'org.openx.data.jsonserde.JsonSerDe'
   WITH SERDEPROPERTIES (
     'serialization.format' = '1'
   ) LOCATION 's3://amzn-s3-demo-bucket/bucket-prefix/AWS:WindowsUpdate/'
   ```

   ```
   MSCK REPAIR TABLE ssminventory.AWS_WindowsUpdate
   ```

   ```
   CREATE EXTERNAL TABLE IF NOT EXISTS ssminventory.AWS_InstanceInformation (
     `AgentType` string,
     `AgentVersion` string,
     `ComputerName` string,
     `IamRole` string,
     `InstanceId` string,
     `IpAddress` string,
     `PlatformName` string,
     `PlatformType` string,
     `PlatformVersion` string
   )
   PARTITIONED BY (AccountId string, Region string, ResourceType string)
   ROW FORMAT SERDE 'org.openx.data.jsonserde.JsonSerDe'
   WITH SERDEPROPERTIES (
     'serialization.format' = '1'
   ) LOCATION 's3://amzn-s3-demo-bucket/bucket-prefix/AWS:InstanceInformation/'
   ```

   ```
   MSCK REPAIR TABLE ssminventory.AWS_InstanceInformation
   ```

   ```
   CREATE EXTERNAL TABLE IF NOT EXISTS ssminventory.AWS_Network (
     `ResourceId` string,
     `Name` string,
     `SubnetMask` string,
     `Gateway` string,
     `DHCPServer` string,
     `DNSServer` string,
     `MacAddress` string,
     `IPV4` string,
     `IPV6` string
   )
   PARTITIONED BY (AccountId string, Region string, ResourceType string)
   ROW FORMAT SERDE 'org.openx.data.jsonserde.JsonSerDe'
   WITH SERDEPROPERTIES (
     'serialization.format' = '1'
   ) LOCATION 's3://amzn-s3-demo-bucket/bucket-prefix/AWS:Network/'
   ```

   ```
   MSCK REPAIR TABLE ssminventory.AWS_Network
   ```

   ```
   CREATE EXTERNAL TABLE IF NOT EXISTS ssminventory.AWS_PatchSummary (
     `ResourceId` string,
     `PatchGroup` string,
     `BaselineId` string,
     `SnapshotId` string,
     `OwnerInformation` string,
     `InstalledCount` int,
     `InstalledOtherCount` int,
     `NotApplicableCount` int,
     `MissingCount` int,
     `FailedCount` int,
     `OperationType` string,
     `OperationStartTime` string,
     `OperationEndTime` string
   )
   PARTITIONED BY (AccountId string, Region string, ResourceType string)
   ROW FORMAT SERDE 'org.openx.data.jsonserde.JsonSerDe'
   WITH SERDEPROPERTIES (
     'serialization.format' = '1'
   ) LOCATION 's3://amzn-s3-demo-bucket/bucket-prefix/AWS:PatchSummary/'
   ```

   ```
   MSCK REPAIR TABLE ssminventory.AWS_PatchSummary
   ```

**使用 Amazon Quick 中的数据**

以下部分进行了概述，并包含用于在 Amazon Quick 中构建可视化内容的链接。

**在 Amazon Quick 中构建可视化内容**

1. 注册 [Amazon Quick](https://quicksight.aws/)，然后登录到 Quick 控制台。

1. 从 `AWS_Application` 表和您创建的任何其他表创建数据集。有关更多信息，请参阅《Amazon Quick 用户指南》中的 [Creating a dataset using Amazon Athena data](https://docs.aws.amazon.com/quicksuite/latest/userguide/create-a-data-set-athena.html)**。

1. 联接表。例如，您可以联接 `AWS_InstanceInformation` 中的 `instanceid` 列，因为它与其他清单表中的 `resourceid` 列匹配。有关联表的更多信息，请参阅《Amazon Quick 用户指南》中的 [Joining data](https://docs.aws.amazon.com/quicksuite/latest/userguide/joining-data.html)**。

1. 构建可视化内容。有关更多信息，请参阅《Amazon Quick 用户指南》**中的 [Analyses and reports: Visualizing data in Amazon Quick Sight](https://docs.aws.amazon.com/quicksuite/latest/userguide/working-with-visuals.html)。