Amazon Web Services ブログ

AWS Systems Manager Distributor と AWS Systems Manager State Manager を使用した一元的なパッケージ管理の自動化

このブログは、Kanishk Mahajan (AWS) と Dominic Medsker (Moody’s) が共同寄稿しました。

CrowdStrikeTrendMicroTenable などのエージェントベースの脆弱性管理ツールをお客様が活用して、AWS 環境を保護していることがよくあります。AWS では、AWS Systems Manager Distributor (Distributor) により、例に挙げたようなサードパーティエージェントの配布をサポートしています。 Distributor は、お客様の所有するソフトウェアをパッケージ化したり、Amazon CloudWatch Agent などの AWS 提供のエージェントソフトウェアパッケージを見つけて、AWS Systems Manager のマネージドノードにインストールできます。

お客様にとってよくあるチャレンジは、複数の AWS アカウントの複数のリージョンにまたがる数百のノードに対するカスタムソフトウェアまたはサードパーティソフトウェアの公開やパッケージ化の一元管理です。このブログでは、AWS 上でカスタムパッケージだけでなく、組み込みのサードパーティや AWS が提供するパッケージにも適用でき、AWS Organizations で管理する Organization 内で一元的なパッケージ管理ができる自動化されたソリューションを提供します。 このソリューションでは、一元化されたインターフェースから、 AWS Organizations のメンバーアカウントとリージョン全体の AWS ノードへのパッケージインストールとプロビジョニングの両方を自動化できます。

ソリューション概要

このソリューションは、Organization 内の任意のメンバーアカウントを委任アカウントとして選択し、そこから AWS CloudFormation StackSets を使用して実行できます。 このアカウントは、パッケージのインストールとプロビジョニングを一元的に管理する StackSet 委任管理者アカウントです。

この一元化されたアカウントからソリューションを実行すると、各メンバーアカウントの Systems Manager Distributor の [自己所有] タブで、カスタムパッケージを Organization 全体で利用できるようになります。 パッケージがメンバーアカウントにインストールされると、ソリューションが Organization のメンバーアカウントのターゲット (つまり、Systems Manager のマネージドノード) に AWS Systems Manager State Manager 関連付けを作成します。 その後、各メンバーアカウントのマネージドノードにカスタムパッケージをプロビジョニングします。プロビジョニングのタイミングとターゲットの範囲は、State Manager 関連付けで指定したスケジュールとタグによって自動的に決定されます。

このソリューションを実装する CloudFormation テンプレートは、ここからダウンロードできます。 下図は、このソリューションのアーキテクチャを示します。

ソリューションアーキテクチャ
図 1. Distributor、State Manager、CloudFormation StackSets を使用して AWS で一元的にパッケージ管理を自動化するためのソリューションアーキテクチャ

前提条件

まず、以下の前提条件を満たす必要があります。

  1. ドキュメントの手順を実行して、メンバーアカウントを StackSet 委任管理者アカウントとして登録します。 管理者権限が委任された AWS メンバーアカウントは、Organization のサービス管理権限を使用して StackSet を作成および管理できます。
  2. 委任された AWS アカウントで、ドキュメントの手順に従ってサードパーティソフトウェア用のパッケージを作成し、Amazon S3 にアップロードします。なお、メンバーアカウントからアクセスできる必要があるため、必要に応じてバケットポリシーなどを適切に設定します。
    1. このブログでは、s3-examplepackage-[accountid]-[region] という名前の Amazon S3 バケットを使用します。 このバケットの examplepackage フォルダにアップロードされたサンプルのパッケージを使用します。 examplepackage フォルダには、 JSON マニフェストと 3 つの zip ファイルが含まれています。下図は、S3 にアップロードされたカスタムパッケージを示しています。

S3 バケット
図 2. JSON マニフェストと 3 つの zip ファイルを含むサンプルのパッケージがアップロードされた S3 バケット

セットアップ

AWS CloudFormation コンソールに移動し、CloudFormation テンプレートの aws-centralizedssmdistributor-v1 を使用して、ドキュメントの手順に従ってサービス管理アクセス権限を含む StackSet を作成します。

  1. aws-centralizedssmdistributor-v1 テンプレートを使用すると、 Systems Manager Automation Runbook として Organization の各メンバーアカウントの Distributor コンソールの [自己所有] タブでカスタムパッケージを利用できるようになります。次に、各メンバーアカウントに State Manager 関連付けを作成し、関連付けで指定されたスケジュールとタグに従ってそのアカウントにパッケージをインストールします。
  2. テンプレートには次のパラメータがあります。
    1. Action: パッケージをインストールするかアンインストールするかを指定します。 (例: Install)
    2. AssociationName: 関連付けの名前 (例: SimplePackage-PackageDistributor)
    3. InstallationType: インストールのタイプを指定します。(例: Uninstall and reinstall)
    4. OutputS3KeyPrefix: AWS Systems Manager Run Command のアウトプットに使用される S3 キープレフィックス (デフォルトは入力値なし)
    5. PackageName: パッケージの名前 (例: examplepackage)
    6. S3PackageBucket: パッケージコンテンツがアップロードされている S3 バケットの名前 (例: s3-examplepackage-[accountid]-[region])
    7. S3PackageBucketFolder: マニフェストがアップロードされる S3 バケットフォルダの名前 (例: examplepackage)
    8. S3PackageUrl: パッケージコンテンツがアップロードされるプレフィックスを含むバケットの HTTPS URL (例: https://s3-examplepackage-[accountid]-[region].s3[region].amazonaws.com/examplepackage)
    9. ScheduleExpression: AWS Systems Manager State Manager association のスケジュール表現。 (例: “rate(30 minutes)”)
    10. TargetResourceTagKey: ターゲットのタグキー (このタグキーを持つターゲットノードにのみパッケージをインストールする場合は、ここに値を入力してください)
    11. TargetResourceTagValue: ターゲットのタグ値 (このタグ値を持つターゲットノードにのみパッケージをインストールする場合は、ここに値を入力してください)
    12. Version: マニフェストファイルにある正確なバージョン名を指定します (例: 1.0.2)

これらのパラメータの値が不明な場合は、テンプレートのデフォルトをそのまま使用してください。

検証

  1. Organization 内の任意のメンバーアカウントの AWS Systems Manager コンソールに移動し、左側のパネルから [ディストリビューター] を選択します。「自己所有」タブを選択し、examplepackage があることを確認します。 examplepackage を選択し、「詳細」セクションからバージョンを検証します。
    1. [追加情報] セクションの添付ファイル情報に、カスタムパッケージ (examplepackage) のマニフェストファイルとまったく同じように zip ファイルとハッシュが含まれていることを確認します。 以下は、Distributor でメンバーアカウントの 1 つで利用できるようになったカスタムパッケージ (examplepackage) です。

カスタムパッケージ
図 3. メンバーアカウントの Distributor コンソールで「自己所有」タブから利用できるカスタムパッケージ (examplepackage)

  1. Organization の任意のメンバーアカウントの Systems Manager コンソールで、左側のパネルの [ステートマネージャー] を選択します。 SimplePackage-PackageDistributor (CloudFormation テンプレートのデフォルトの State Manager 関連付けの名前です) を選択します。
    1. [説明] タブからスケジュール式を検証します。
    2. [実行履歴] を選択し、任意の実行をクリックし、Runbook の AWS-ConfigureAWSPackage を使用して、State Manager 関連付けがスケジュール表現に従ってカスタムパッケージを実行したことを確認します。
    3. 下図は、カスタムパッケージを設定するための実行履歴とともに各メンバーアカウントでプロビジョニングされている State Manager 関連付けです。

State Manager 関連付け
図 4. 各メンバーアカウントでプロビジョニングされたカスタムパッケージをインストールする State Manager 関連付け

State Manager 関連付けの実行履歴
図 5. Runbook の AWS-ConfigureAWSPackage を使用してカスタムパッケージをインストールする State Manager 関連付けの実行履歴

クリーンアップ

この記事で説明したソリューションを試した後でアカウントをクリーンアップし、不要なコスト請求を防ぐには、委任された StackSet 管理者アカウントの AWS CloudFormation コンソールに移動して、次の操作を実行してください。 左側のパネルから [スタックセット] を選択し、CloudFormation テンプレートの aws-centralizedssmdistributor-v1 によって作成された StackSet を選択します。

  1. StackSet を削除する
  2. このソリューション用に作成された Amazon S3 バケットの s3-examplepackage-[accountid]-[region] を削除します。

結論

お客様は、サードパーティ製のエージェントベースのパッケージを活用して AWS 環境を保護することがよくあります。AWS は AWS Systems Manager Distributor (Distributor) によるサードパーティエージェントの配布をサポートしていますが、お客様によく見られるチャレンジは、複数の AWS アカウントの複数のリージョンにまたがる数百のノードへのカスタムソフトウェアまたはサードパーティソフトウェアのインストールおよびプロビジョニングを一元化することです。 このブログでは、カスタムパッケージだけでなく、組み込みのサードパーティや AWS が提供するパッケージにも適用でき、Organization 全体にわたりパッケージを一元的に管理する自動化されたソリューションを紹介しました。

著者について:

Kanishk Mahajan

Kanishk Mahajan は AWS のプリンシパル、クロスサービスソリューションアーキテクトです。 AWS のパートナーやお客様向けのクラウド変革とソリューションアーキテクチャを統率しています。 Kanishk は、クラウド運用、移行と近代化、レジリエンス、セキュリティ、コンプライアンスを専門としています。 彼は AWS の各ドメインの Technical Field Community (TFC) のメンバーです。

Dominic Medsker

Dominic Medsker は Moody のシニアクラウドエンジニアです。 Dominic は、クラウドサービスの利用に関連して、セルフサービス、ビジネス支援、高価値の提供、市場投入までの時間の短縮に重点を置いています。 彼は技術コンセプトを簡略化してより身近なものにすることに情熱を注いでいます。

翻訳はソリューションアーキテクトの村田が担当しました。原文はこちら