演練:使用資源資料同步來彙總庫存資料 - AWS Systems Manager

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

演練:使用資源資料同步來彙總庫存資料

以下演練會說明如何使用 AWS Command Line Interface (AWS CLI) 來建立 AWS Systems Manager 庫存的資源資料同步組態。資源資料同步會自動將所有受管節點的庫存資料移至中央 Amazon Simple Storage Service (Amazon S3) 儲存貯體。每當搜索到新的庫存資料時,同步就會自動更新中央 Amazon S3 儲存貯體內的資料。

本逐步解說也說明如何使用 Amazon Athena 和亞馬遜QuickSight來查詢和分析彙總的資料。如需使用 AWS Management Console 主控台中的 Systems Manager 建立資源資料同步的相關資訊,請參閱 設定庫存的資源資料同步。如需有關使用 AWS Management Console 中的 Systems Manager 查詢多個 AWS 區域 和帳戶的庫存,請參閱 查詢來自多個區域和帳戶的清查資料

注意

此逐步教學涵蓋的資訊能協助您使用 AWS Key Management Service (AWS KMS) 加密同步作業。庫存並不會收集任何使用者專用、私有或敏感資料,因此加密為選用功能。如需 AWS KMS 的詳細資訊,請參閱《AWS Key Management Service 開發人員指南》。

開始之前

在開始本節中的演練之前,請先檢閱或完成以下任務:

  • 收集受管節點的庫存資料。針對本逐步解說中的 Amazon Athena 和 Amazon QuickSight 各節的目的,我們建議您收集應用程式資料。如需如何收集庫存資料的詳細資訊,請參閱 設定清查收集演練:使用 CLI 將受管節點設定為啟用庫存

  • (選用) 如果庫存資料存放在使用 AWS Key Management Service (AWS KMS) 加密的 Amazon Simple Storage Service (Amazon S3) 儲存貯體中,您還必須設定 IAM 帳戶和 Amazon-GlueServiceRoleForSSM 的服務角色以進行 AWS KMS 加密。如果您未設定 IAM 帳戶和此角色,Systems Manager 會在您選擇主控台上的 Detailed View (詳細檢視) 索引標籤時顯示 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/*" } } } ] }
建立庫存的資源資料同步
  1. 請在 https://console.aws.amazon.com/s3/ 開啟 Amazon Simple Storage Service (Amazon S3) 主控台。

  2. 建立儲存貯體以存放您彙整的清查資料。如需詳細資訊,請參閱 Amazon Simple Storage Service 主控台使用者指南中的建立儲存貯體。請記下儲存貯體名稱以及您建立的所在 AWS 區域。

  3. 建立儲存貯體後,請選擇 Permissions (許可) 索引標籤,接著選擇 Bucket Policy (儲存貯體政策)

  4. 複製下列儲存貯體政策並貼至政策編輯器。使用您建立的 Amazon S3 儲存貯體名稱和有效的 AWS 帳戶 ID,取代 DOC-EXAMPLE-BUCKETaccount-id。新增多個帳戶時,請為每個帳戶新增額外的條件字串和 ARN。新增一個帳戶時,請從範例中移除其他預留位置。或者,您也可以使用 Amazon S3 字首 (子目錄) 取代 bucket-prefix。如果您沒有建立字首,請將 bucket-prefix/ 從政策中的 ARN 移除。

    { "Version": "2012-10-17", "Statement": [ { "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", "aws:SourceAccount": "account-id1" "aws:SourceAccount": "account-id2" "aws:SourceAccount": "account-id3" "aws:SourceAccount": "account-id4" }, "ArnLike": { "aws:SourceArn": "arn:aws:ssm:*:account-id1:resource-data-sync/*" "aws:SourceArn": "arn:aws:ssm:*:account-id2:resource-data-sync/*" "aws:SourceArn": "arn:aws:ssm:*:account-id3:resource-data-sync/*" "aws:SourceArn": "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://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 儲存貯體,建立資源資料同步組態。此命令會從您目前登入的 AWS 區域 建立同步。

    注意

    如果同步與目標 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

    (選用) 您能夠執行下列命令以建立同步,即可使用 AWS KMS 加密同步作業。如果您選擇加密同步,則 AWS 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 (執行查詢)。將 DOC-EXAMPLE-BUCKETbucket_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://DOC-EXAMPLE-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 計數,是在 Amazon Elastic Compute Cloud (Amazon EC2) Linux、macOS 和 Windows Server 執行個體上顯示的 AWS 應用程式。

  7. 分別複製下列陳述式並貼至查詢編輯器,接著將 DOC-EXAMPLE-BUCKET and bucket-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://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

使用亞馬遜中的數據 QuickSight

以下部分提供了在 Amazon 中構建可視化的鏈接的概述QuickSight。

要建立在亞馬遜的可視化 QuickSight
  1. 註冊亞馬遜,QuickSight然後登錄到QuickSight控制台。

  2. 建立來自您所建立之 AWS_Application 資料表和任何其他資料表的資料集。如需詳細資訊,請參閱使用 Amazon Athena 資料建立資料集

  3. 聯結資料表。舉例而言,您可以聯結 AWS_InstanceInformation 中的 instanceid 欄位,因為該欄位與其他庫存資料表中的 resourceid 欄位相符。如需聯結資料表的詳細資訊,請參閱聯結資料表

  4. 建置視覺效果。如需詳細資訊,請參閱使用 Amazon QuickSight 視覺效果