Amazon Web Services ブログ
AWS Systems Manager Distributor と AWS Systems Manager State Manager を使用した一元的なパッケージ管理の自動化
このブログは、Kanishk Mahajan (AWS) と Dominic Medsker (Moody’s) が共同寄稿しました。
CrowdStrike、TrendMicro、Tenable などのエージェントベースの脆弱性管理ツールをお客様が活用して、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 で一元的にパッケージ管理を自動化するためのソリューションアーキテクチャ
前提条件
まず、以下の前提条件を満たす必要があります。
- ドキュメントの手順を実行して、メンバーアカウントを StackSet 委任管理者アカウントとして登録します。 管理者権限が委任された AWS メンバーアカウントは、Organization のサービス管理権限を使用して StackSet を作成および管理できます。
- 委任された AWS アカウントで、ドキュメントの手順に従ってサードパーティソフトウェア用のパッケージを作成し、Amazon S3 にアップロードします。なお、メンバーアカウントからアクセスできる必要があるため、必要に応じてバケットポリシーなどを適切に設定します。
- このブログでは、s3-examplepackage-[accountid]-[region] という名前の Amazon S3 バケットを使用します。 このバケットの examplepackage フォルダにアップロードされたサンプルのパッケージを使用します。 examplepackage フォルダには、 JSON マニフェストと 3 つの zip ファイルが含まれています。下図は、S3 にアップロードされたカスタムパッケージを示しています。
図 2. JSON マニフェストと 3 つの zip ファイルを含むサンプルのパッケージがアップロードされた S3 バケット
セットアップ
AWS CloudFormation コンソールに移動し、CloudFormation テンプレートの aws-centralizedssmdistributor-v1 を使用して、ドキュメントの手順に従ってサービス管理アクセス権限を含む StackSet を作成します。
- aws-centralizedssmdistributor-v1 テンプレートを使用すると、 Systems Manager Automation Runbook として Organization の各メンバーアカウントの Distributor コンソールの [自己所有] タブでカスタムパッケージを利用できるようになります。次に、各メンバーアカウントに State Manager 関連付けを作成し、関連付けで指定されたスケジュールとタグに従ってそのアカウントにパッケージをインストールします。
- テンプレートには次のパラメータがあります。
- Action: パッケージをインストールするかアンインストールするかを指定します。 (例: Install)
- AssociationName: 関連付けの名前 (例: SimplePackage-PackageDistributor)
- InstallationType: インストールのタイプを指定します。(例: Uninstall and reinstall)
- OutputS3KeyPrefix: AWS Systems Manager Run Command のアウトプットに使用される S3 キープレフィックス (デフォルトは入力値なし)
- PackageName: パッケージの名前 (例: examplepackage)
- S3PackageBucket: パッケージコンテンツがアップロードされている S3 バケットの名前 (例: s3-examplepackage-[accountid]-[region])
- S3PackageBucketFolder: マニフェストがアップロードされる S3 バケットフォルダの名前 (例: examplepackage)
- S3PackageUrl: パッケージコンテンツがアップロードされるプレフィックスを含むバケットの HTTPS URL (例: https://s3-examplepackage-[accountid]-[region].s3[region].amazonaws.com/examplepackage)
- ScheduleExpression: AWS Systems Manager State Manager association のスケジュール表現。 (例: “rate(30 minutes)”)
- TargetResourceTagKey: ターゲットのタグキー (このタグキーを持つターゲットノードにのみパッケージをインストールする場合は、ここに値を入力してください)
- TargetResourceTagValue: ターゲットのタグ値 (このタグ値を持つターゲットノードにのみパッケージをインストールする場合は、ここに値を入力してください)
- Version: マニフェストファイルにある正確なバージョン名を指定します (例: 1.0.2)
これらのパラメータの値が不明な場合は、テンプレートのデフォルトをそのまま使用してください。
検証
- Organization 内の任意のメンバーアカウントの AWS Systems Manager コンソールに移動し、左側のパネルから [ディストリビューター] を選択します。「自己所有」タブを選択し、examplepackage があることを確認します。 examplepackage を選択し、「詳細」セクションからバージョンを検証します。
- [追加情報] セクションの添付ファイル情報に、カスタムパッケージ (examplepackage) のマニフェストファイルとまったく同じように zip ファイルとハッシュが含まれていることを確認します。 以下は、Distributor でメンバーアカウントの 1 つで利用できるようになったカスタムパッケージ (examplepackage) です。
図 3. メンバーアカウントの Distributor コンソールで「自己所有」タブから利用できるカスタムパッケージ (examplepackage)
- Organization の任意のメンバーアカウントの Systems Manager コンソールで、左側のパネルの [ステートマネージャー] を選択します。 SimplePackage-PackageDistributor (CloudFormation テンプレートのデフォルトの State Manager 関連付けの名前です) を選択します。
- [説明] タブからスケジュール式を検証します。
- [実行履歴] を選択し、任意の実行をクリックし、Runbook の AWS-ConfigureAWSPackage を使用して、State Manager 関連付けがスケジュール表現に従ってカスタムパッケージを実行したことを確認します。
- 下図は、カスタムパッケージを設定するための実行履歴とともに各メンバーアカウントでプロビジョニングされている State Manager 関連付けです。
図 4. 各メンバーアカウントでプロビジョニングされたカスタムパッケージをインストールする State Manager 関連付け
図 5. Runbook の AWS-ConfigureAWSPackage を使用してカスタムパッケージをインストールする State Manager 関連付けの実行履歴
クリーンアップ
この記事で説明したソリューションを試した後でアカウントをクリーンアップし、不要なコスト請求を防ぐには、委任された StackSet 管理者アカウントの AWS CloudFormation コンソールに移動して、次の操作を実行してください。 左側のパネルから [スタックセット] を選択し、CloudFormation テンプレートの aws-centralizedssmdistributor-v1 によって作成された StackSet を選択します。
- StackSet を削除する
- このソリューション用に作成された Amazon S3 バケットの s3-examplepackage-[accountid]-[region] を削除します。
結論
お客様は、サードパーティ製のエージェントベースのパッケージを活用して AWS 環境を保護することがよくあります。AWS は AWS Systems Manager Distributor (Distributor) によるサードパーティエージェントの配布をサポートしていますが、お客様によく見られるチャレンジは、複数の AWS アカウントの複数のリージョンにまたがる数百のノードへのカスタムソフトウェアまたはサードパーティソフトウェアのインストールおよびプロビジョニングを一元化することです。 このブログでは、カスタムパッケージだけでなく、組み込みのサードパーティや AWS が提供するパッケージにも適用でき、Organization 全体にわたりパッケージを一元的に管理する自動化されたソリューションを紹介しました。
著者について:
翻訳はソリューションアーキテクトの村田が担当しました。原文はこちら。