クラウドで、アジリティを手に入れよう。
column

コラム

マルチアカウントで構成管理情報の自動収集を行う(AWS)

  • TAG

    タグ未登録
  • UPDATE

    2021/06/14

はじめに

こんにちは、クラウドCoEの城前です。

今回は「マルチアカウントで構成管理情報の自動収集」をテーマに執筆をしたいと思います。

システム構成図

今回は、複数アカウントのインスタンスから収集されたインベントリデータを管理用アカウントに収集して一元的に確認する方法についてご紹介します。
※AWS Organizationsは使用しません

システム構成は以下のようになります。

Systems Managerのリソースデータの同期(Resource Data Sync)という機能を利用して各アカウント内のマネージドインスタンスから収集したインベントリデータを管理アカウント内のS3バケットに同期させます。

同期後はインベントリデータが収集されると管理アカウントのS3バケット内のデータが自動的に更新されるようになります。
これで管理アカウント内のSystems Managerから他アカウントから収集したインベントリデータを一元的に確認できるようになります。
さらにAmazon Athenaというサービスを組み合わせることで、収集したインベントリデータにクエリを発行し集計や分析を行ったり、Amazon QuickSightというサービスで可視化することも可能となります。
※本記事ではQuickSightの設定方法は対象外となります。

取得できる情報

インベントリを使用して、マネージドインスタンスから収集可能なメタデータは以下の通りです。
※参照元URL:https://docs.aws.amazon.com/ja_jp/systems-manager/latest/userguide/systems-manager-inventory.html

  • アプリケーション: アプリケーション名、発行元、バージョンなど。
  • AWS コンポーネント: EC2 ドライバー、エージェント、バージョンなど。
  • ファイル: 名前、サイズ、バージョン、インストール日、変更および最新アクセス時間など。
  • ネットワーク設定の詳細: IP アドレス、MAC アドレス、DNS、ゲートウェイ、サブネットマスクなど。
  • Windows 更新: Hotfix ID、インストール者、インストール日など。
  • インスタンスの詳細: システム名、オペレーティングシステム (OS) 名、OS バージョン、最終起動、DNS、ドメイン、ワークグループ、OS アーキテクチャなど。
  • サービス: 名前、表示名、ステータス、依存サービス、サービスのタイプ、起動タイプなど。
  • タグ: インスタンスに割り当てられるタグ。
  • Windows レジストリ: レジストリキーのパス、値の名前、値タイプおよび値。
  • Windows ロール: 名前、表示名、パス、機能タイプ、インストール日など。
  • カスタムインベントリ: カスタムインベントリの操作に説明されるようにマネージドインスタンスに割り当てられたメタデータ

設定方法

まずは管理アカウントでインベントリデータ収集用のS3バケットを作成します。バケットポリシーは以下のように設定をおこないます。

${mybucket}は収集用バケット名を、${accountA_id}と${accountB_id}には収集を行いたいアカウントのアカウントIDをそれぞれ記載してください。

※${bucket-prefix}は任意で指定してください

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

次にインベントリデータの収集を行いたいそれぞれのアカウント及び管理アカウントで以下の設定を行います。
「Systems Manager」→「フリートマネージャー」→「アカウント管理」から「リソースデータの同期」を選択

以下の情報を入力しリソースデータの同期の作成を行う。

  • 同期名: (任意)
  • バケット名: ※管理アカウントに作成したインベントリデータ収集用バケットを指定
  • バケットプレフィックス: (任意)
  • バケットのリージョン: ※指定したバケットのリージョンを指定
  • KMS キー ARN: ※指定したバケットがKMSで暗号化されている場合はKMS の ARNを指定

インベントリデータ収集用バケットに以下のようにインベントリデータが格納されていることが確認できれば設定は完了となります。

インベントリデータの確認

管理アカウントから収集したインベントリデータを確認します。

「Systems Manager」→「インベントリ」→「詳細ビュー」タブから作成したリソースデータの同期を選択します。

確認したいインベントリタイプを選択します。

例としてAWSComponentを選択した場合は以下のように表示されます。
複数アカウントのAWSのコンポーネント情報が一元的に確認できることが分かりますね。

さらに、「CSVへエクスポート」でローカルにダウンロードしたCSVファイルから集計を行ったり、「Run Advanced Queries」からAmazon Athenaで直接クエリを行うことも可能です。

以下はAmazon Athenaを活用し「アプリケーション」テーブルからApacheがインストールされているインスタンスとバージョンを確認するためのクエリを実行した例となります。

  • 実行したクエリ
SELECT version,packageid,release,name,resourceid,accountid FROM aws_application WHERE Name='httpd'

以上です。

おわりに

本記事では対象外となりますが集約用S3バケットに保存されたすべてのインベントリデータに対して、Amazon QuickSightを活用することによって集計、可視化を行うことが可能です。
インベントリデータの分析を行う際には、ぜひご活用ください。

 

RECOMMEND

おすすめ記事一覧