Amazon Web Services ブログ

AWS Systems Manager Distributor による AWS Organizations 管理下のアカウントへのソフトウェアパッケージ配布

ほとんどの組織ではセキュリティが最優先事項であり、セキュリティとコンプライアンスを維持するために、CrowdStrike、TrendMicro、Tennable などのエージェントベースの脆弱性管理ツールを活用しています。AWS Systems Manager Distributor は、単一のシンプルなインターフェイスを介して、ソフトウェアのパッケージ化とクラウド環境の Windows および Linux インスタンス、オンプレミスサーバーへの配信プロセスを自動化します。お客様は、AWS Systems Manager Distributor を利用して、セキュリティエージェントやその他のモニタリングエージェントなどをパッケージ化して管理し、クラウドおよびオンプレミスのインスタンスにも配布できます。

多くのお客様は、アカウントが複数になるにつれて、AWS Organizations によってランディングゾーンを構築します。また、このような大規模な環境全体へのソフトウェアパッケージの管理と配布を一元化および自動化したいと考えます。このブログでは、AWS Systems Manager を使用して、Organizations 内のすべてのメンバーアカウントで、ソフトウェアパッケージの配布を自動化するソリューションについて説明します。活用される Systems Manager の主な機能は、Automation、Distributor、State Manager です。

前提条件

このソリューションをデプロイするには、次の前提条件を満たす必要があります。

  • インストール可能なアセットを ZIP ファイルで準備します。オペレーティングシステムごとに1つの ZIP ファイルが必要で、パッケージを作成するには、少なくとも1つの ZIP ファイルが必要です。
  • JSON マニフェストを作成します。マニフェストには、パッケージコードファイルへのポインタが含まれています。
  • 必要なコードファイルをフォルダまたはディレクトリに追加し、マニフェストに正しい値が入力されたら、Amazon Simple Storage Service (S3) バケットにパッケージをアップロードします。これらは、マニュアル の最初の 3 つのステップで説明されています。

注:最適なパッケージ管理を行うために、パッケージ管理専用のS3バケットを用意することを推奨します。本ブログでは、AWS Organizations 内の管理アカウントを使用していますが、別アカウントを指定することもできます。詳細については、委任管理者の設定をご参照ください。

ソリューション概要

Systems Manager の機能である Distributor は、アカウント内にソフトウェアをパッケージ化するのに役立ちます。このブログで説明する中央集権型のソフトウェアディストリビューター (CSD) ソリューションは、Organizations 内のメンバーアカウント全体でソフトウェアパッケージ管理および配布する機能を提供します。
図 1 に、ソリューションのアーキテクチャを示します。このソリューションでは、Distributor に加え、次の Systems Manager 機能も利用します。

  • Automation でワークフローをオーケストレーションします。
  • State Manager で、ユーザーが定義した頻度でオートメーションランブックを呼び出します。

Figure 1: Solution architecture
図 1: ソリューションアーキテクチャ

ウォークスルー

ソリューションをデプロイするには、Organizations の管理アカウントでこの AWS CloudFormation テンプレートを起動します。

Launch Stack

このテンプレートでは、次のリソースがデプロイされます。

  1. Automation ランブック
      • CSD-AddSoftwarePackageToDistributor:インストール可能なソフトウェア資産をパッケージ化して Distributorに追加するロジックが含まれています。
      • CSD-distributeSoftwarePackage:メンバーアカウント内のすべてのターゲットインスタンスにソフトウェアパッケージを配布するロジックが含まれています。
  2. IAM ロール
      • AWS-SystemsManager-AutomationAdministrationRole
      • AWS-SystemsManager-AutomationExecutionRole
      • CSD-CloudFormationStackSetAdministrationRole
      • CSD-CloudFormationStackSetExecutionRole

テンプレートに次の情報を入力します。

  • CreateCloudFormationStackSetRoles: CloudFormation StackSet IAM ロールをプロビジョニングするかどうかを指定します。これらのロールは、各ターゲットアカウントに AWS-SystemsManager AutomationExecutionRole をデプロイするために利用されます。詳細については、スタックセット操作の前提条件を参照してください。
  • CreateSystemsManagerRoles: 複数のアカウントとリージョンで Automation を実行するために必要な AWS Systems Manager IAM ロールをプロビジョニングするかどうかを指定します。詳細については、複数の AWS リージョンおよびアカウントでの Automation の実行をご参照ください。
  • DeploymentTargets: カンマ区切り形式でこのソリューションの対象となる Organizations の組織単位 (OU) ID (例:ou-abc1-abc12ab1、ou-def2-def12de1)。
  • ManagementAccountId: (必須) Organizations の管理アカウント ID。
  • TargetKey: このソリューションのターゲットにするインスタンスを指定します。許可される値は、ResourceGroup、または tag:、InstanceID (デフォルト) など。詳細については、Target をご参照ください。
  • TargetValues: 上記で指定したターゲットキーの値を指定します。デフォルトは * で、すべてのインスタンスを対象としています。詳細については、Target をご参照ください。
    個々のリソーステンプレートにアクセスするには、GitHub リポジトリにアクセスしてください。

State Manager Associationを使用したソリューションの実行

State Manager Association は、マネージドインスタンスに割り当てる設定です。この設定によって、インスタンスで維持する状態が定義されます。
太文字になっている以下のパラメータをを更新し、Organizations の管理アカウントでこのコマンドを実行します。

  • TARGET_ACCOUNTS: 配布するターゲットインスタンスを持つ AWS アカウント ID および/または Organizations の組織単位 ID (ou-abcd-1qwert43、123456789123 など) 。
  • TARGTE_REGIONS: ターゲットインスタンスが実行されているすべての AWS リージョン (us-east-1 など)。
  • MAX_CONCURRENCY および MAX_ERRORS: AWS Systems Manager API リファレンスの TargetLocation で説明されているアカウント数とエラーしきい値に基づいて、これらの値を指定します。
  • ACTION: Install か Uninstall を指定します。
  • INSTALLATION_TYPE: インストールの種類を指定します。Uninstall and reinstall : 再インストールプロセスが完了するまで、アプリケーションはオフラインになります。In-place update : 新しいファイルまたは更新されたファイルがインストールに追加されている間、アプリケーションを使用できます。
  • PACKAGE_NAME: インストール/アンインストールする Distributor のパッケージ名。
  • VERSION: インストール/アンインストールする Distributor のパッケージバージョン。バージョンを指定しない場合、デフォルトで最新の公開バージョンがインストールされます。システムは、現在インストールされているバージョンのみをアンインストールしようとします。パッケージのバージョンがインストールされていない場合は、エラーが返されます。
  • ADDITIONAL_ARGUMENTS: インストール、アンインストール、またはアップデートスクリプトに提供する追加パラメータ。
  • S3_BUCKET_NAME: パッケージがデプロイされた S3 バケット名を指定します。このバケットは、パッケージとそのマニフェストファイルのみで構成する必要があります。
  • S3_BUCKET_PREFIX: パッケージアセットが保存される S3 プレフィックス (使用する場合) を指定します。
  • AUTOMATION_ROLE_ARN: AWS システムマネージャーの Automation 管理ロールの ARN。

aws ssm create-association \
--association-name "csd-association" \
--name "CSD-AddSoftwarePackageToDistributor" \
--parameters '{"targetAccounts":["TARGET_ACCOUNTS"],"targetRegions":["TARGET_REGIONS"],"maxConcurrency":["MAX_CONCURRENCY"],"maxErrors":["MAX_ERRORS"],"action":["ACTION"],"installationType":["INSTALLATION_TYPE"],"name":["PACKAGE_NAME"],"version":["VERSION"],"additionalArguments":["{ADDITIONAL_ARGUMENTS}"],"AutomationAssumeRole":["AUTOMATION_ROLE_ARN"],"bucketName":["S3_BUCKET_NAME"],"bucketPrefix":["S3_BUCKET_PREFIX"]}' \
--no-apply-only-at-cron-interval

このコマンドは、State Manager Association を作成し、1 回だけ実行します。—schedule-expression を使用してスケジュールベースで実行されるように更新するには、AWS CLI コマンドリファレンスの create-association を参照してください。

実行結果の確認

関連付けによって Automation がトリガーされたら、Systems Manager コンソールを開き、左側のナビゲーションペインから [Automation] を選択します。Automation の実行では、図 2 に示すように、CSD-AddSoftwarePackageToDistributor と CSD-DistributeSoftwarePackage の両方の最新の実行が表示されます。

Figure 2: Automation executions (management account)

図 2: Automation executions (管理アカウント)

各 execute をクリックして、正常終了したかどうかを検証します。
このソリューションを実行するリージョン、アカウント、インスタンスの数に応じて、CSD-DistributeSoftwarePackage の実行詳細で正常に実行された結果は次のようになります。

Figure 3: CSD-DistributeSoftwarePackage execution detail (management account)

図 3: CSD-DistributeSoftwarePackage の execution 詳細 (管理アカウント)

パッケージが対象のターゲットインスタンスにデプロイされたことを確認するには、メンバーアカウントの Systems Manager ダッシュボードに移動し、左側のペインで [Run Command] を選択します。[コマンド履歴] で、すべての呼び出しとそのステータスを確認できます。

Figure 4: Run command history (member account)

図 4: Run command のコマンド履歴 (メンバーアカウント)

任意のコマンド ID をクリックし、ターゲットと出力のインスタンス ID を選択します。両方のステップについて、Output セクションを確認してください。正常に完了すると、図 5 に示すようなメッセージが出力されます。

Figure 5: Run Command output (member account)

図 5: Run Command の出力 (メンバーアカウント)

新しいアカウント、OU、リージョンの追加

このソリューションは、CloudFormation テンプレートを最初にデプロイしたときに指定した OU 配下で新規にプロビジョニングした新しいアカウントにも自動的にデプロイされます。新しいアカウントまたは OU の追加には、以下に説明するように CloudFormation と State Manager Association の両方を更新する必要があります。新しいリージョンを追加するには、State Manager Association を更新するだけで済みます。

  • CloudFormation (AWS-SystemsManager-Automation* ロールをプロビジョニングした場合のみ、これらのステップを完了してください):
    1. CloudFormation コンソールで、デプロイした元のテンプレートを選択し、[Update] を選択します。
    2. [現在のテンプレートを使用] オプションは選択されたままにします。
    3. オートメーションの詳細で、STACKSET_TARGETS を更新します。

結論

このブログでは、Systems Manager Distributor やその他の機能を活用して、Organization 内のすべての AWS アカウントとリージョンにわたって一元化されたソフトウェアパッケージ配布ソリューションを構築する方法を紹介しました。一貫性と信頼性の高いパッケージ管理と配布のフレームワークを導入することで、AWS だけでなくオンプレミスのインフラストラクチャ全体にわたってセキュリティとコンプライアンスの体制を維持できます。

著者について

Praveen Bhat

Praveen Bhat

Praveen Bhat は、テクノロジー業界で数年の経験を持つエンタープライズソリューションアーキテクトです。Praveen は、テクノロジーとビジネスのギャップを埋めるという情熱をもって、銀行、保険、製造、政府、賭博、メディア業界のビジネス目標の達成を支援してきました。

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