System Manager インベントリを利用してみる

System Manager インベントリは、SSM Agent経由でOSのメタデータを収集してきてくれるサービスです。ちょっとした資産管理ツールみたいなもの、て感じです。

収集されるメタデータ

収集されるメタデータは、以下の公式ページで紹介されています。

インベントリによって収集されたメタデータ

指定したPath上にあるファイルや、Windowsの場合レジストリ内の指定Keyの値も収集してきてくれます。

インベントリの収集

メタデータ収集設定の方法は、 AWS-GatherSoftwareInventory ドキュメントを実行するステートマネージャの関連付けを実施するのみとなります。参考マニュアルページ。

マネージドインスタンスでインベントリを手動設定する (CLI)

具体的コマンドはこちら。

$ aws ssm create-association \
--name "AWS-GatherSoftwareInventory" \
--targets "Key=tag:SSM-Inventory,Values=sample" \
--schedule-expression "cron(0 0 23 ? * SUN *)" \
--output-location "S3Location={OutputS3BucketName=s3-bucket-sample,OutputS3KeyPrefix=inventory/}" \
--compliance-severity "MEDIUM" \
--parameters "applications=Enabled,awsComponents=Enabled,billingInfo=Enabled,customInventory=Enabled,instanceDetailedInformation=Enabled,networkConfig=Enabled,services=Enabled,windowsRoles=Enabled,windowsUpdates=Enabled"

aws ssm create-association

リソースデータの同期

ステートマネージャで収集してくると、System Managerコンソールに用意されたDashboard画面にて情報が表示されるようなります。しかしながら、 Resource Data Sync という機能を利用することで、収集してきたメタデータをS3上ファイルに同期してくれるようなり、そのファイルを利用して、さらなる詳細な分析が可能となります。

インベントリのリソースデータの同期の設定

まず、メタデータの同期先となるS3BucketのBucket Policyに、以下のようなポリシーを書きます。SSMのサービスがS3Bucketにアクセス可能とするポリシーとなります。

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "SSMBucketPermissionsCheck",
            "Effect": "Allow",
            "Principal": {
                "Service": "ssm.amazonaws.com"
            },
            "Action": "s3:GetBucketAcl",
            "Resource": "arn:aws:s3:::s3-bucket-name"
        },
        {
            "Sid": "SSMBucketDelivery",
            "Effect": "Allow",
            "Principal": {
                "Service": "ssm.amazonaws.com"
            },
            "Action": "s3:PutObject",
            "Resource": [
                "arn:aws:s3:::s3-bucket-name/prefix-name/*/accountid=aws-account-no/*"
            ],
            "Condition": {
                "StringEquals": {
                    "s3:x-amz-acl": "bucket-owner-full-control"
                }
            }
        }
    ]
}

次に create-resource-data-sync コマンドを実行することで、現在収集されているメタデータがS3Bucket側に同期されるようになります。コマンド実行後、同期処理が始まるので、初期同期が完了するのはちょっとだけかかります。

$ aws ssm create-resource-data-sync \
--sync-name "sample-resource-data-sync" \
--s3-destination "BucketName=s3-bucket-name,Prefix=prefix-name/,Region=ap-northeast-1,SyncFormat=JsonSerDe"

aws ssm create-resource-data-sync

同期が完了してしまえば、ファイルがS3上にある訳で、後はAthenaなりQuickSightなりで好きにしてね、ということですね。