チュートリアル: リソースデータの同期を使用してインベントリデータを集計する
次のチュートリアルでは、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 セクションでは、アプリケーションデータを収集するようお勧めします。インベントリデータ収集方法の詳細については、「インベントリ収集の設定」または「AWS 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
:resource-data-sync/*" } } } ] }
インベントリのリソースデータ同期を作成するには
Amazon S3 コンソール (https://console.aws.amazon.com/s3/
) を開きます。 -
集計されたインベントリデータを保存するバケットを作成します。詳細については、Amazon Simple Storage Service ユーザーガイドの「バケットの作成」を参照してください。バケット名とそれを作成した AWS リージョン を書き留めます。
-
バケットを作成した後、[Permissions] タブを選択し、[Bucket Policy] を選択します。
-
次のバケットポリシーをコピーし、ポリシーエディタに貼り付けます。amzn-s3-demo-bucket と
account-id
を、作成した Amazon S3 バケットの名前と有効な AWS アカウント ID に置き換えます。複数のアカウントを追加する場合は、各アカウントの条件文字列と ARN をさらに追加します。1 個のアカウントを追加する場合は、例から追加のプレースホルダーを削除します。任意で、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:::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/*" ] } } } ] } -
(オプション) 同期を暗号化する場合は、前のステップでリストされたポリシーに以下の条件を追加する必要があります。これらは、
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
" } まだ AWS Command Line Interface (AWS CLI) をインストールして設定していない場合は、インストールして設定します。
詳細については、「AWS CLI の最新バージョンをインストールまたは更新します。」を参照してください。
-
(オプション) 同期を暗号化する場合は、次のコマンドを実行して、バケットポリシーが AWS KMS のキー要件を実行していることを確認します。各
リソースプレースホルダーの例
をユーザー自身の情報に置き換えます。 -
次のコマンドを実行して、この手順の最初に作成した Amazon S3 バケットを使用したリソースデータ同期設定を作成します。このコマンドは、ログインしている AWS リージョン からの同期を作成します。
注記
同期とターゲット Amazon S3 バケットが異なるリージョンにある場合は、データ転送料金が発生する場合があります。詳細については、Amazon S3 の料金
を参照してください。 region
パラメータを使用して、同期設定をどこに作成するかを指定します。次の例では、us-west-1 リージョンからのインベントリデータが us-west-2 リージョンの Amazon S3 バケットに同期されます。(オプション) AWS KMS を使用して同期を暗号化する場合は、次のコマンドを実行して同期を作成します。同期を暗号化する場合、AWS KMS キーおよび Amazon S3 バケットが同じリージョンにある必要があります。
-
以下のコマンドを実行して、同期設定のステータスを表示します。
aws ssm list-resource-data-sync
別のリージョンに同期設定を作成する場合は、次の例のように
region
パラメータを指定する必要があります。aws ssm list-resource-data-sync --region us-west-1
-
同期設定が正常に作成されたら、Amazon S3 のターゲットバケットを確認します。インベントリデータが数分で表示されます。
Amazon Athena でデータを使用する
以下のセクションでは、Amazon Athena でデータをクエリおよび表示する方法について説明します。開始する前に、Athena について学ぶことをお勧めします。詳細については、Amazon Athena ユーザーガイドの「Amazon Athenaとは」および「データの使用」を参照してください。
Amazon Athena でデータを表示およびクエリするには
https://console.aws.amazon.com/athena/
で Athena コンソールを開きます。 -
次のステートメントをクエリエディタにコピーして貼り付け、[Run Query] を選択します。
CREATE DATABASE ssminventory
システムによって、ssminventory というデータベースが作成されます。
-
次のステートメントをクエリエディタにコピーして貼り付け、[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/' -
次のステートメントをクエリエディタにコピーして貼り付け、[Run Query] を選択します。
MSCK REPAIR TABLE ssminventory.AWS_Application
システムによってテーブルが分割されます。
注記
他の AWS リージョン または AWS アカウント からリソースデータ同期を作成する場合、このコマンドを再度実行してパーティションを更新する必要があります。また、Amazon S3 バケットポリシーも更新する必要があります。
-
データをプレビューするには、
AWS_Application
テーブルの横にあるビューアイコンを選択します。 -
次のステートメントをクエリエディタにコピーして貼り付け、[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
のさまざまなバージョンの数を返します。 -
以下のステートメントを個別にコピーしてクエリエディタに張り付け、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 で可視性を高めるには
-
Amazon QuickSight
にサインアップして、QuickSight コンソールにログインします。 -
AWS_Application
テーブルおよび作成済みの他のテーブルからのデータセットを作成します。詳細については、「Amazon Athena データを使用したデータセットの作成」を参照してください。 -
テーブルを結合します。たとえば、
instanceid
のAWS_InstanceInformation
列は、他のインベントリテーブルのresourceid
列と一致するため、結合できます。テーブルの結合に関する詳細については、「テーブルの結合」を参照してください。 -
視覚化を構築します。詳細については、「Amazon QuickSight ビジュアルの使用」を参照してください。