チュートリアル: リソースデータの同期を使用してインベントリデータを集約する - AWS Systems Manager

チュートリアル: リソースデータの同期を使用してインベントリデータを集約する

次のチュートリアルでは、AWS Command Line Interface (AWS CLI) を使用して AWS Systems Manager インベントリのリソースデータ同期設定を作成する方法について説明します。リソースデータ同期では、すべてのマネージドノードから中央 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) を使用して同期を暗号化する方法に関する情報が含まれています。インベントリではユーザー固有、独自、または重要なデータが収集されないため、暗号化はオプションです。AWS KMS の詳細については、AWS Key Management Service デベロッパーガイドを参照してください。

始める前に

このセクションのチュートリアルを開始する前に、次のタスクを確認するか完了してください。

  • マネージドノードからインベントリデータを収集します。このチュートリアルの Amazon Athena および Amazon QuickSight セクションでは、アプリケーションデータを収集するようお勧めします。インベントリデータ収集方法の詳細については、「インベントリ収集の設定」または「チュートリアル: CLI を使用したインベントリ用のマネージドノードの設定」を参照してください。

  • (オプション) AWS Key Management Service (AWS KMS) 暗号化を使用する Amazon Simple Storage Service (Amazon S3) バケットにインベントリデータが保存されている場合は、AWS KMS の暗号化が可能になるように IAM アカウントと Amazon-GlueServiceRoleForSSM サービスロールも設定する必要があります。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:role/aws-service-role/ssm.amazonaws.com/AWSServiceRoleForAmazonSSM" } } } ] }

インベントリのリソースデータ同期を作成するには

  1. https://console.aws.amazon.com/s3/ で Amazon S3 コンソールを開きます。

  2. 集計されたインベントリデータを保存するバケットを作成します。詳細については、Amazon Simple Storage Service ユーザーガイド「バケットの作成」を参照してください。バケット名とそれを作成した AWS リージョン を書き留めます。

  3. バケットを作成した後、[Permissions] タブを選択し、[Bucket Policy] を選択します。

  4. 次のバケットポリシーをコピーし、ポリシーエディタに貼り付けます。DOC-EXAMPLE-BUCKETaccount-id を、作成した Amazon S3 バケットの名前と有効な AWS アカウント ID に置き換えます。任意で、bucket-prefix を Amazon S3 プレフィックス (サブディレクトリ) に置き換えます。プレフィックスを作成しなかった場合は、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" } } } ] }
  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. まだ AWS Command Line Interface (AWS CLI) をインストールして設定していない場合は、インストールして設定します。

    詳細については、「AWS コマンドラインツールのインストールまたはアップグレード」を参照してください。

  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 テーブルの横にあるビューアイコンを選択します。

    
                            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

    クエリは、Linux、macOS、および Windows Server 用の Amazon Elastic Compute Cloud (Amazon EC2) インスタンスに存在する AWS アプリケーションである、aws-cfn-bootstrap のさまざまなバージョンの数を返します。

  7. 以下のステートメントを個別にコピーしてクエリエディタに張り付け、DOC-EXAMPLE-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://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. テーブルを結合します。たとえば、instanceidAWS_InstanceInformation 列は、他のインベントリテーブルの resourceid 列と一致するため、結合できます。テーブルの結合に関する詳細については、「テーブルの結合」を参照してください。

  4. 視覚化を構築します。詳細については、「Amazon QuickSight ビジュアルの使用」を参照してください。