{SystemsManager}インベントリ収集の設定

 


https://dev.classmethod.jp/articles/show-installed-appilications-by-ssm-inventory/

https://docs.aws.amazon.com/ja_jp/systems-manager/latest/userguide/systems-manager-inventory.html
https://docs.aws.amazon.com/ja_jp/systems-manager/latest/userguide/sysman-inventory-cliwalk.html

 

インベントリ収集の設定を開始するには、AWS Systems Manager State Manager の関連付けを作成します。
関連付けが実行されると、Systems Manager はインベントリデータを収集します。

 

-- 1. コマンド等のインストール

-- 1.1 aws cli version 2 インストール

curl "https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip" -o "awscliv2.zip"
unzip awscliv2.zip
sudo ./aws/install
aws --version

-- 1.2 jqインストール
sudo yum -y install jq

 


-- 2. S3 バケットを作成する

aws s3 ls

aws s3 mb s3://bucket123

 


-- 3. バケットポリシーの設定

vim b.json

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

 


aws s3api put-bucket-policy \
--bucket bucket123 \
--policy file://b.json


aws s3api get-bucket-policy \
--bucket bucket123

 

 

-- 4. IAMロール作成
vim role01.json

{
    "Version": "2012-10-17",
    "Statement": [
      {
        "Effect": "Allow",
        "Principal": {
          "Service": "ec2.amazonaws.com"
        },
        "Action": "sts:AssumeRole"
      }
    ]
}

 

aws iam create-role \
--role-name role01 \
--assume-role-policy-document file://role01.json


-- 5. ポリシーをロールにアタッチ

aws iam attach-role-policy \
--policy-arn arn:aws:iam::aws:policy/AmazonSSMManagedInstanceCore \
--role-name role01

 

-- 6. インスタンスプロファイルを作成

aws iam create-instance-profile --instance-profile-name profile01

aws iam list-instance-profiles | grep InstanceProfileName

-- 7. インスタンスプロファイルにロールを追加
aws iam add-role-to-instance-profile --instance-profile-name profile01 --role-name role01

aws iam list-instance-profiles-for-role --role-name role01

 


-- 8. IAM ロールを使用したEC2インスタンス起動

aws ec2 run-instances \
--image-id ami-0404778e217f54308 \
--instance-type t3.nano \
--key-name key1 \
--tag-specifications 'ResourceType=instance,Tags=[{Key=Name,Value=instance01}]' \
--instance-market-options '{"MarketType": "spot","SpotOptions": {"SpotInstanceType": "one-time"}}' \
--iam-instance-profile Name="profile01"

aws ec2 describe-instances


-- 9. State Manager の関連付けを作成


aws ssm create-association \
--name "AWS-GatherSoftwareInventory" \
--parameters "networkConfig=Enabled,awsComponents=Enabled,applications=Enabled" \
--targets "Key=instanceids,Values=i-11111111111111111" \
--schedule-expression "rate(30 minutes)" \
--association-name inventory01

 

 

aws ssm describe-instance-associations-status \
--instance-id i-11111111111111111


aws ssm list-associations

aws ssm describe-association \
--association-id 11111111-2222-3333-4444-555555555555

 

 

-- 10. インベントリ確認


aws ssm list-inventory-entries \
--output table \
--instance-id i-11111111111111111 \
--type-name "AWS:Application" \
--max-results 3

 

aws ssm list-inventory-entries \
--output yaml \
--instance-id i-11111111111111111 \
--type-name "AWS:Application" \
--filters Key=Name,Values=sudo,Type=Equal

 

 

-- 11. インベントリリソースデータ同期の作成

aws ssm create-resource-data-sync \
--sync-name sync01 \
--sync-type SyncToDestination \
--s3-destination "BucketName=bucket123,SyncFormat=JsonSerDe,Region=ap-northeast-1" 

aws ssm list-resource-data-sync

 

-- 12. 動作確認

aws s3 ls s3://bucket123 --recursive

aws s3 cp s3://bucket123/AWS:Application/accountid=999999999999/region=ap-northeast-1/resourcetype=ManagedInstanceInventory/i-11111111111111111.json - | jq -r .

 

 

-- 13. クリーンアップ


-- インベントリリソースデータ同期の削除

aws ssm list-resource-data-sync


aws ssm delete-resource-data-sync \
--sync-name sync01

 

 


-- State Manager の関連付けの削除


aws ssm list-associations

aws ssm describe-association \
--association-id 11111111-2222-3333-4444-555555555555

aws ssm delete-association \
--association-id 11111111-2222-3333-4444-555555555555

 

 


-- EC2インスタンスの削除

aws ec2 describe-instances

aws ec2 terminate-instances --instance-ids i-11111111111111111


-- インスタンスプロファイルの削除

aws iam remove-role-from-instance-profile --instance-profile-name profile01 --role-name role01


aws iam delete-instance-profile --instance-profile-name profile01

aws iam list-instance-profiles | grep InstanceProfileName

 

-- IAMロールの削除
aws iam list-roles | grep role01

aws iam detach-role-policy \
--role-name role01 \
--policy-arn arn:aws:iam::aws:policy/AmazonSSMManagedInstanceCore

aws iam delete-role --role-name role01

 


-- バケットの削除

aws s3 ls

aws s3 rb s3://bucket123 --force