AWS Systems Manager
用户指南
AWS 文档中描述的 AWS 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 AWS 服务入门

演练:使用资源数据同步聚合清单数据

以下演练介绍如何使用 AWS CLI 创建资源数据同步配置。资源数据同步自动将所有托管实例的清单数据传输到中央 Amazon S3 存储桶。当发现新的清单数据时,同步自动更新中央 Amazon S3 存储桶中的数据。此演练还介绍如何使用 Amazon Athena 和 Amazon QuickSight 查询和分析聚合数据。有关使用 Amazon EC2 控制台创建资源数据同步的信息,请参阅配置清单的资源数据同步

注意

本演练包括有关如何使用 AWS Key Management Service (AWS KMS) 加密同步的信息。清单不收集任何用户特定、专有或敏感数据,因此加密是可选的。有关 AWS KMS 的更多信息,请参阅 AWS Key Management Service Developer Guide

开始前的准备工作

在开始本演练之前,您必须从您的托管实例收集清单元数据。对于本演练中的 Amazon Athena 和 Amazon QuickSight,建议您收集应用程序元数据。有关如何收集清单数据的更多信息,请参阅 演练:使用 CLI 配置 Inventory 的托管实例

(可选) 如果要使用 AWS KMS 加密同步,则必须创建包括以下策略的新密钥,或更新现有密钥并向其添加此策略。

{ "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:region:AWS-account-ID:key/KMS-key-id" } ] }

创建清单的资源数据同步

  1. Open the Amazon S3 console at https://console.amazonaws.cn/s3/.

  2. 创建用来存储聚合清单数据的存储桶。有关更多信息,请参阅 Amazon Simple Storage Service Getting Started Guide 中的创建存储桶。请记下存储桶名称和创建此存储桶的 AWS 区域。

  3. 创建存储桶后,选择 Permissions 选项卡,然后选择 Bucket Policy

  4. 将下面的存储桶策略复制并粘贴到策略编辑器中。使用您创建的 Amazon S3 存储桶的名称和有效的 AWS 账户 ID 替换 bucket-nameaccount-id。(可选)使用 Amazon S3 前缀(子目录)的名称替换 bucket-prefix。如果您未创建前缀,则从该策略的 ARN 中删除 bucket-prefix/。

    { "Version": "2012-10-17", "Statement": [ { "Sid": "SSMBucketPermissionsCheck", "Effect": "Allow", "Principal": { "Service": "ssm.amazonaws.com" }, "Action": "s3:GetBucketAcl", "Resource": "arn:aws:s3:::bucket-name" }, { "Sid": " SSMBucketDelivery", "Effect": "Allow", "Principal": { "Service": "ssm.amazonaws.com" }, "Action": "s3:PutObject", "Resource": ["arn:aws:s3:::bucket-name/bucket-prefix/*/accountid=account-id/*"], "Condition": { "StringEquals": { "s3:x-amz-acl": "bucket-owner-full-control" } } } ] }
  5. (可选) 如果要加密同步,则必须将以下策略添加到存储桶。重复上一步骤以向存储桶添加以下策略。

    { "Version":"2012-10-17", "Statement":[ { "Effect":"Allow", "Principal":{ "Service":"ssm.amazonaws.com" }, "Action":"s3:PutObject", "Resource":"arn:aws:s3:::bucket-name/prefix/*", "Condition":{ "StringEquals":{ "s3:x-amz-server-side-encryption":"aws:kms", "s3:x-amz-server-side-encryption-aws-kms-key-id":"arn:aws:kms:region:AWS-account-ID:key/KMS-key-ID" } } } ] }
  6. 安装并配置 AWS CLI(如果尚未执行该操作)。

    有关信息,请参阅安装或升级 AWS CLI

  7. (可选)如果要加密同步,请运行以下命令以验证存储桶策略是否强制执行 KMS 密钥要求。

    aws s3 cp ./A file in the bucket s3://bucket-name/prefix/ --sse aws:kms --sse-kms-key-id "arn:aws:kms:region:AWS-account-ID:key/KMS-key-id" --region region
  8. 运行以下命令,以使用您在此程序开始时创建的 Amazon S3 存储桶创建资源数据同步配置。此命令从您当前已登录的 AWS 区域创建同步。

    注意

    如果同步和目标 Amazon S3 存储桶位于不同区域,您可能需要支付数据传输价格。有关更多信息,请参阅 Amazon S3 定价

    aws ssm create-resource-data-sync --sync-name a name --s3-destination "BucketName=the name of the S3 bucket,Prefix=the name of the prefix, if specified,SyncFormat=JsonSerDe,Region=the region where the S3 bucket was created"

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

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

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

    aws ssm create-resource-data-sync --sync-name sync-name --s3-destination "BucketName=bucket-name,Prefix=prefix,SyncFormat=JsonSerDe,AWSKMSKeyARN=arn:aws:kms:region:AWS-account-ID:key/KMS-key-id,Region=bucket-region" --region region
  9. 运行以下命令查看同步配置的状态。

    aws ssm list-resource-data-sync

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

    aws ssm list-resource-data-sync --region us-west-1
  10. 在成功创建同步配置后,浏览 Amazon S3 中的目标存储桶。清单数据应在几分钟内显示。

在 Amazon Athena 中处理数据

以下部分介绍如何在 Amazon Athena 中查看和查询数据。在开始之前,我们建议您首先了解 Athena。有关更多信息,请参阅 Amazon Athena User Guide 中的什么是 Amazon Athena?使用数据

在 Amazon Athena 中查看和查询数据

  1. Open the Athena console at https://console.amazonaws.cn/athena/.

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

    CREATE DATABASE ssminventory

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

  3. 将以下语句复制并粘贴到查询编辑器中,然后选择 Run Query。使用 Amazon S3 目标的名称和前缀替换 bucket-namebucket-prefix

    CREATE EXTERNAL TABLE IF NOT EXISTS ssminventory.AWS_Application ( Name 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://bucket-name/bucket-prefix/AWS:Application/'
  4. 将以下语句复制并粘贴到查询编辑器中,然后选择 Run Query

    MSCK REPAIR TABLE ssminventory.AWS_Application

    系统将对表进行分区。

    注意

    如果您从其他 AWS 区域或账户创建资源数据同步,则必须再次运行该命令,以更新分区。您可能还需要更新您的 Amazon S3 存储桶策略。

  5. 要预览数据,请选择 AWS_Application 表旁边的视图图标。

    
                            alt-text
  6. 将以下语句复制并粘贴到查询编辑器中,然后选择 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 的计数,这是 Amazon EC2 Linux 和 Windows 实例上出现的 AWS 应用程序。

  7. 将以下语句分别复制并粘贴到查询编辑器中,将 bucket-namebucket-prefix 替换为有关 Amazon S3 的信息,然后选择 Run Query (运行查询)。这些语句在 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://bucket-name/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://bucket-name/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://bucket-name/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://bucket-name/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://bucket-name/bucket-prefix/AWS:PatchSummary/' MSCK REPAIR TABLE ssminventory.AWS_PatchSummary

在 Amazon QuickSight 中处理数据

以下部分提供概述,包含用于在 Amazon QuickSight 中构建可视化内容的链接。

在 Amazon QuickSight 中构建可视化内容

  1. 注册 Amazon QuickSight,然后登录 QuickSight 控制台。

  2. 从 AWS_Application 表和您创建的任何其他表创建数据集。有关更多信息,请参阅使用 Amazon Athena 数据创建数据集

  3. 联接表。例如,您可以联接 AWS_InstanceInformation 中的 instanceid 列,因为它与其他清单表中的 resourceid 列匹配。有关联接表的更多信息,请参阅联接表

  4. 构建可视化内容。有关更多信息,请参阅处理 Amazon QuickSight 视觉对象