3
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

マルチアカウント構成でのSSM Inventoryによるインベントリ収集方法

Last updated at Posted at 2022-10-15

初めに

今回は、SSM Inventoryを使ったマルチアカウント環境でのInventory情報の収集方法について解説します。

SSM Inventoryとは

SSM AgentがインストールされたEC2やオンプレミスのサーバから、そのサーバのメタデータを収集する機能し、一覧表示する機能です。
詳細はblackbeltをご参照ください。

0-blackbelt.png
(引用元:20200212 AWS Black Belt Online Seminar AWS Systems Managerの35ページ)

収集できるインベントリはこちら。
カスタムインベントリについては別のブログで書きたいと思います。
0-blackbelt2.png

(引用元:20200212 AWS Black Belt Online Seminar AWS Systems Managerの36ページ)

なぜ検証したのか?

複数の部署で異なるシステムを管理しているお客様からの依頼により検証しました。
お客様はそれぞれのシステムでどのようなアプリやWindowsサービスが稼働しているのかを管理するためにエクセルをご利用でした。
それはしんどいということで、運用を簡素化するためにSSM Inventoryが有効かどうかを検証することになりました。

お客様環境の構成

部署ごとにAWSアカウントを持ち、セキュリティやログ管理用に管理者アカウントがある マルチアカウント構成 です。

0-multiaccount.png

SSM Inventoryの構成

構成はとてもシンプルです。
中央アカウント側で S3バケットを作って、中央と部署のアカウントそれぞれで SSM Inventoryの「リソースデータの同期」を作るだけ。

0-simple-gaiyo.png

構築手順

  1. [管理者アカウント]S3バケットを作成
  2. [管理者アカウント]SSM Inventoryの「リソースデータの同期」を作成
  3. [部署アカウント]SSM Inventoryの「リソースデータの同期」を作成

1. [管理者アカウント]S3バケットを作成

S3バケットを作成します。

  • バケット名:任意のバケット名
  • AWSリージョン:アジアパシフィック(東京)ap-northeast-1
  • デフォルトの暗号化:「有効にする」を選択し、SSE-S3とする

image.png

image.png

上記以外はデフォルトの設定とします。

バケットポリシー の設定も必要です。
設定するべきポリシーについては公式ドキュメントに記載がされています。

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

実際は上記記載のバケットポリシーの記載のうちConditionの部分を少し変更しなくてはいけません。
ドキュメントでは StringEqualsArnLike を使っていますが
複数AWSアカウントのSSMから、S3へインベントリデータをputできるよう、集合演算子 「ForAnyValue」 を利用します。


{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "SSMBucketPermissionsCheck",
      "Effect": "Allow",
      "Principal": {
        "Service": "ssm.amazonaws.com"
      },
      "Action": "s3:GetBucketAcl",
      "Resource": "arn:aws:s3:::管理者アカウントのS3バケット名"
    },
    {
      "Sid": " SSMBucketDelivery",
      "Effect": "Allow",
      "Principal": {
        "Service": "ssm.amazonaws.com"
      },
      "Action": "s3:PutObject",
      "Resource": [
        "arn:aws:s3:::管理者アカウントのS3バケット名/*/accountid=部署AアカウントのAWSアカウントID/*",
        "arn:aws:s3:::管理者アカウントのS3バケット名/*/accountid=部署BアカウントのAWSアカウントID/*",
        "arn:aws:s3:::管理者アカウントのS3バケット名/*/accountid=部署CアカウントのAWSアカウントID/*"
      ],
      "Condition": {
        "ForAnyValue:StringEquals": {
          "aws:SourceAccount": [
              "管理者アカウントのAWSアカウントID",
              "部署AアカウントのAWSアカウントID",
              "部署BアカウントのAWSアカウントID",
              "部署CアカウントのAWSアカウントID"
            ],
          "s3:x-amz-acl": "bucket-owner-full-control"
        },
        "ForAnyValue:ArnLike": {
          "aws:SourceArn": [
            "arn:aws:ssm:*:管理者アカウントのAWSアカウントID:resource-data-sync/*",
            "arn:aws:ssm:*:部署AアカウントのAWSアカウントID:resource-data-sync/*",
            "arn:aws:ssm:*:部署BアカウントのAWSアカウントID:resource-data-sync/*",
            "arn:aws:ssm:*:部署CアカウントのAWSアカウントID:resource-data-sync/*"
          ]
        }
      }
    }
  ]
}

特定のリソースデータ同期からのみS3への書き込みを許可したい場合は

"ForAnyValue:ArnLike": {
  "aws:SourceArn": [
    "arn:aws:ssm:${Region}:AWSアカウントID:resource-data-sync/${SyncName}",
    "arn:aws:ssm:${Region}:AWSアカウントID:resource-data-sync/${SyncName}"
  ]
}

と書きます。

2. [管理者アカウント]SSM Inventoryの「リソースデータの同期」を作成

Systems Managerからフリートマネージャーを選択し、
「アカウント管理」から「リソースデータの同期」を選択します。

0-fleetmanager.png
0-sync.png

1-inventory-create.png

任意のリソースデータ同期名と、先ほど設定したS3バケット名を指定します。
リージョンはap-northeast-1を指定します。

S3 prefixは指定した場合としなかった場合との挙動の違いは別のブログで書きたいと思います。

ステータスが[保留中]から[成功]になったらOKです。
image.png

image.png

3. [部署アカウント]SSM Inventoryの「リソースデータの同期」を作成

[管理者アカウント]側で行った手順と同様に、リソースデータ同期を作成します。
リソースデータ同期名は任意の値で結構です。
S3バケットは手順1で作成したバケット名を指定します。

image.png

結果

こちらのように管理者アカウントのS3バケットにインベントリデータが集約されます。

image.png

AWSアカウントIDごとにオブジェクトが作成されていることがわかります。

image.png

インベントリ情報がjsonファイルでS3に出力されていることがわかります。
image.png

管理者アカウントのSSMでも確認しましょう。
Systems Managerの[インベントリ]で[詳細ビュー]を選択します。

image.png

上記で作成したリソース同期を選択します。

image.png

ぐるぐるするのでチョット待ちます。

image.png

取れました。
image.png

プルダウンで好きなインベントリタイプを選択できます。
image.png

なぜこんな簡単な手順のブログを書いたのか

上記の通り、簡単に設定が出来ました。

しかし カスタムインベントリの取得を検証中に凄くトラブりました

恐らく何度もリソースデータ同期の作成・削除を繰り返したからだと思いますが、
根本原因として SSM Inventoryの裏の仕組みを知らなかったから トラブルシュートできなかったのだと思います。

よって次回のブログでSSM Inventoryの裏の仕組みを解説します。

3
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?