演练:使用资源数据同步聚合清单数据 - Amazon Web Services Systems Manager
AWS 文档中描述的 AWS 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 AWS 服务入门

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

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

以下演练介绍如何为创建资源数据同步配置Amazon Web Services Systems Manager通过使用Amazon命令行界面 (AmazonCLI)。资源数据同步自动将所有托管实例的清单数据传输到中央 Amazon Simple Storage Service (Amazon S3) 存储桶。每当发现新的清单数据时,同步操作会自动更新中央 Amazon S3 存储桶中的数据。此演练还介绍如何使用 Amazon Athena 和 Amazon QuickSight (Amazon QuickSight) 查询和分析聚合数据。有关使用 Systems Manager 创建资源数据同步的信息,Amazon Web Services Management Console,请参阅为 Inventory 配置资源数据同步

注意

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

开始前的准备工作

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

(可选) 如果要使用 Amazon 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:account_ID:key/KMS_key_id" } ] }

为 Inventory 创建资源数据同步

  1. 通过以下网址打开 Amazon S3 控制台:https://console.aws.amazon.com/s3/

  2. 创建用来存储聚合清单数据的存储桶。有关更多信息,请参阅 。创建存储桶《Amazon Simple Storage Service 入门指南》。记下存储桶名称和Amazon Web Services 区域创建它的位置。

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

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

    { "Version": "2012-10-17", "Statement": [ { "Sid": "SSMBucketPermissionsCheck", "Effect": "Allow", "Principal": { "Service": "ssm.amazonaws.com" }, "Action": "s3:GetBucketAcl", "Resource": "arn:aws:s3:::DOC-EXAMPLE-BUCKET" }, { "Sid": " SSMBucketDelivery", "Effect": "Allow", "Principal": { "Service": "ssm.amazonaws.com" }, "Action": "s3:PutObject", "Resource": ["arn:aws:s3:::DOC-EXAMPLE-BUCKET/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:::DOC-EXAMPLE-BUCKET/bucket-prefix/*/accountid=*/*", "Condition":{ "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" } } } ] }
  6. 安装和配置Amazon命令行界面 (AmazonCLI)(如果尚未执行该操作)。

    想要了解有关信息,请参阅安装或升级Amazon命令行工具

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

    Linux & macOS
    aws s3 cp ./A_file_in_the_bucket s3://DOC-EXAMPLE-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://DOC-EXAMPLE-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
  8. 运行以下命令,以使用您在此程序开始时创建的 Amazon S3 存储桶创建资源数据同步配置。此命令从Amazon Web Services 区域您当前已登录。

    注意

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

    Linux & macOS
    aws ssm create-resource-data-sync \ --sync-name a_name \ --s3-destination "BucketName=DOC-EXAMPLE-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=DOC-EXAMPLE-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=DOC-EXAMPLE-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=DOC-EXAMPLE-BUCKET,Prefix=HybridEnv,SyncFormat=JsonSerDe,Region=us-west-2" ^ --region us-west-1

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

    Linux & macOS
    aws ssm create-resource-data-sync \ --sync-name sync_name \ --s3-destination "BucketName=DOC-EXAMPLE-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=DOC-EXAMPLE-BUCKET,Prefix=prefix_name, if_specified,SyncFormat=JsonSerDe,AWSKMSKeyARN=arn:aws:kms:region: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?使用数据中的Amazon Athena 用户指南

在 Amazon Athena 中查看和查询数据

  1. https://console.aws.amazon.com/athena/ 打开 Athena 控制台。

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

    CREATE DATABASE ssminventory

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

  3. 将以下语句复制并粘贴到查询编辑器中,然后选择 Run Query。Replace文档示例存储桶存储段前缀使用 Amazon S3 目标的名称和前缀。

    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://DOC-EXAMPLE-BUCKET/bucket_prefix/AWS:Application/'
  4. 将以下语句复制并粘贴到查询编辑器中,然后选择 Run Query

    MSCK REPAIR TABLE ssminventory.AWS_Application

    系统将对表进行分区。

    注意

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

  5. 要预览数据,请选择AWS_Application表。

  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应用程序存在于适用于 Linux 的 Amazon Elastic Compute Cloud (Amazon EC2) 实例上,macOS, 和Windows Server。

  7. 将以下语句分别复制并粘贴到查询编辑器中,将文档示例存储桶存储桶前缀,然后选择 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://DOC-EXAMPLE-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://DOC-EXAMPLE-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://DOC-EXAMPLE-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://DOC-EXAMPLE-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://DOC-EXAMPLE-BUCKET/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 视觉对象