演练:使用资源数据同步聚合清单数据 - AWS Systems Manager

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

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

此演练还介绍了如何使用 Amazon Athena 和 Amazon QuickSight 查询及分析聚合数据。有关在 AWS Management Console 中使用 Systems Manager 创建资源数据同步的信息,请参阅 演练:使用资源数据同步聚合清单数据。有关在 AWS Management Console 中使用 Systems Manager 从多个 AWS 区域 和账户中查询清单的信息,请参阅 查询多个区域和账户的清单数据

注意

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

开始前的准备工作

在开始本节中的演练之前,请审核或完成以下任务:

  • 从托管式节点收集清单数据。根据本演练中的 Amazon Athena 和 Amazon QuickSight 两节的目的,我们建议您收集应用程序数据。有关如何收集清单数据的更多信息,请参阅 配置清单收集使用 AWS CLI 配置清单数据收集

  • (可选)如果清单数据存储在使用 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 加密数据的权限

  • (可选)如果希望使用 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:us-east-2: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/

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

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

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

    { "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=account-id/*" ], "Condition": { "StringEquals": { "s3:x-amz-acl": "bucket-owner-full-control", "aws:SourceAccount": [ "account-id1", "account-id2", "account-id3", "account-id4" ] }, "ArnLike": { "aws:SourceArn": [ "arn:aws:ssm:*:account-id1:resource-data-sync/*", "arn:aws:ssm:*:account-id2:resource-data-sync/*", "arn:aws:ssm:*:account-id3:resource-data-sync/*", "arn:aws:ssm:*:account-id4:resource-data-sync/*" ] } } } ] }
  5. (可选)如果要加密同步,则必须将以下条件添加到上一步中列出的策略中。将这些内容添加在 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" }
  6. 安装并配置 AWS Command Line Interface(AWS CLI)(如果尚未执行该操作)。

    有关更多信息,请参阅安装或更新 AWS CLI 的最新版本

  7. (可选)如果要加密同步,请运行以下命令,以验证存储桶策略是否强制执行 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
  8. 运行以下命令,以使用您在此过程开始时创建的 Amazon S3 存储桶创建资源数据同步配置。此命令从您登录的 AWS 区域创建同步。

    注意

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

    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
  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。将 amzn-s3-demo-bucket 和 bucket_prefix 分别替换为 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/'
  4. 将以下语句复制并粘贴到查询编辑器中,然后选择 Run Query

    MSCK REPAIR TABLE ssminventory.AWS_Application

    系统将对表进行分区。

    注意

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

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

    Amazon Athena 中的预览数据图标。
  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(它是 Linux、macOS 和 Windows Server 的 Amazon Elastic Compute Cloud (Amazon EC2) 实例上出现的 AWS 应用程序)的计数。

  7. 分别将以下语句复制并粘贴到查询编辑器中,将 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 QuickSight 中的数据

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

在 Amazon QuickSight 中构建可视化内容
  1. 注册 Amazon QuickSight,然后登录到 QuickSight 控制台。

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

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

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