Amazon Web Services ブログ

AWS Systems Manager documents 共有のベストプラクティス

AWS Systems Manager (SSM) documents は、マネージドノードで実行するアクションを定義するリソースです。Command document、Automation runbook、Session document など、各タイプにはそれぞれ目的があります。ユースケースに応じて、アプリケーションのバックアップ手順を自動化したり、パッケージをインストールしたり、他の DevOps シナリオでノードのフリート全体で使用したりすることができます。SSM documents は、アカウント間で共有することも、AWS コミュニティに公開することもできます。このブログでは、SSM documents をパブリックに共有することに関連する SSM documents のベストプラクティスとガードレールの考慮事項について説明します。

SSM documents をパブリックに共有する機能は、[パブリック共有をブロック] の設定によって制御されます。この設定が有効な場合、SSM documents をパブリックに共有することはできません。この設定はリージョン単位であるため、複数のアカウントで複数のリージョンを運用している場合は、各アカウントと運用リージョンでこの設定を管理する必要があります。

SSM documents のパブリック共有をブロックする

SSM documents のパブリック共有を必要とするユースケースがない限り、[パブリック共有をブロックする] 設定を有効にすることをお勧めします。デフォルトでは、この設定は無効になっています。また、この設定はリージョンごとに設定する必要があります。マルチアカウントのランディングゾーンを運用している場合は、新しいアカウントが作成されるときにこの設定を一元的に管理することをお勧めします。
コンソールまたは AWS CLI を使用して有効にできます。

SSM documents のパブリック共有をブロックするには (コンソール)

  1. AWS Systems Manager のコンソール を開きます。
  2. ナビゲーションペインの [共有リソース] で、[ドキュメント] を選択します。
  3. [詳細設定] を選択します。

Figure 1: Documents page in Systems Manager console
図1:AWS Systems Manager コンソールの [ドキュメント] ページ

  1. [詳細設定] ページで [編集] を選択します。

Figure 2: Preferences page
図 2: [詳細設定] ページ

  1. [パブリック共有設定] で [パブリック共有をブロック] を選択し、[保存] を選択します。

Figure 3: Block public sharing図 3: パブリック共有をブロック

これで、リージョンの設定が有効になりました。

Figure 4: Block public sharing is now set

図 4: パブリック共有をブロックするよう設定されました

SSM documents のパブリック共有をブロックするには (AWS CLI)

  1. AWS CLI 及び AWS アカウントの認証情報が設定済みのコマンドラインを開きます。
  2. 次のコマンドを実行して、SSM documents の public-sharing-permission を無効(「パブリック共有をブロック」を有効)にします。「us-east-1」をお使いのリージョンに置き換えます。
aws ssm update-service-setting  \
    --setting-id /ssm/documents/console/public-sharing-permission \
    --setting-value Disable \
    --region 'us-east-1'
  1. 次のコマンドを実行して、public-sharing-permission が無効(「パブリック共有をブロック」が有効)になっていることを確認します。「us-east-1」をお使いのリージョンに置き換えます。
aws ssm get-service-setting   \
    --setting-id /ssm/documents/console/public-sharing-permission \
    --region 'us-east-1'
  1. 出力結果を次のサンプル出力と比較して、リージョンに対して設定が無効になっていることを確認します。
{
    "ServiceSetting": {
        "SettingId": "/ssm/documents/console/public-sharing-permission",
        "SettingValue": "Disable",
        "LastModifiedDate": "2021-06-02T15:59:15.862000-04:00",
        "LastModifiedUser": "arn:aws:sts::111122223333:assumed-role/devops-admin",
        "ARN": "arn:aws:ssm:us-east-1: 111122223333:servicesetting/ssm/documents/console/public-sharing-permission",
        "Status": "Customized"
    }
}

SSM documents の共有を無効化する

パブリック共有をブロックする設定は、新しい SSM documents が公開されるのを防ぎます。既存の SSM documents のパブリック共有をブロックする場合、SSM documents をチェックして、現在パブリックに共有されている SSM documents を見つけ、パブリックに共有するか、プライベートにするかを判断します。

SSM documents のパブリック共有を削除するには (コンソール)

  1. AWS Systems Manager のコンソールを開きます。
  2. ナビゲーションペインの [共有リソース] で、[ドキュメント] を選択します。
  3. [自己所有] タブを選択し、ドキュメントごとに以下を実行します。
    • ドキュメントを選択します。
    • ドキュメントの[詳細]で、[アクセス許可] セクションを確認して、ドキュメントが共有されている場所を特定します。
    • 必要に応じて、ドキュメントのパブリック共有を無効にします。

SSM documents のパブリック共有を削除するには (AWS CLI)

  1. AWS CLI 及び AWS アカウントの認証情報が設定済みのコマンドラインを開きます。
  2. 対象の SSM documents がある AWS アカウント、リージョンで  list-documents コマンドを実行します。
aws ssm list-documents \
    --filters Key=Owner,Values=Self
  1. SSM document ごとに次のコマンドを実行して、ドキュメントが共有されている場所を特定します。ここで YourDocumentNameHere を list-documents から返された各 SSM document に置き換えます。
aws ssm describe-document-permission \
    --name YourDocumentNameHere \
    --permission-type Share
  1. パブリック共有が構成されている SSM document のアクセス権を変更するには、次のコマンドを実行します。ここで YourDocumentNameHere を SSM document 名に置き換えてください。
aws ssm modify-document-permission \
    --name YourDocumentNameHere \
    --permission-type Share \
    --account-ids-to-remove All

ガバナンスに関する考慮事項

組織はガバナンスとガードレールを使用して、どの IAM プリンシパルが [パブリック共有をブロック] 設定を変更できるかを制御し、設定が不正に変更されていないかを監視する必要があります。次のサービスコントロールポリシー (SCP) は、ガードレールの例です。組織はこれを使用して、設定の変更を認めないようにすることができます。ポリシーを拡張して、オートメーションサービスロールを統制の対象から除外し、他の不正なプリンシパルが設定を変更できないようにすることができます。

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "DenySSMDocPublicSharingSetting",
      "Effect": "Deny",
      "Action": [ "ssm:UpdateServiceSetting", "ssm:ResetServiceSetting" ],
      "Resource": "arn:aws:ssm:*:*:servicesetting/ssm/documents/console/public-sharing-permission"
    }
  ]
}

前述の SCP は予防的なガードレールであり、「パブリック共有をブロック」設定への変更を防ぐことが出来ますが、AWS Config を発見的なガードレールとして使用できます。AWS Config は、[パブリック共有をブロック] 設定の変更を検出し、必要に応じて修正できます。この設定の変更を検出するには、AWS Config カスタムルールを実装する必要があります。必要に応じて、[パブリック共有をブロック] 設定の修復アクションを実装できます。

SSM documents 共有のベストプラクティス

SSM documents をパブリックに共有する必要な場合、従うべきベストプラクティスを以下に示します。

SSM documents の共有方法を制御する

[パブリック共有をブロック] 設定を無効にすると、ユーザーは SSM documents をパブリックに共有できます。ガードレールを導入し、公開可能と判断された一連の文書のみを、許可されたプリンシパルによってのみパブリックに共有できるようにします。これらのガードレールは、ModifyDocumentPermission アクションを許可する IAM ポリシーによって実装することができます。

識別情報と機密情報を削除する

鍵、パスワード、ユーザー名などの機密情報が適切に処理され、動的に取得、またはパラメータ化されていることを常に確認します。SSM documents には機密情報を含めないでください。
SSM documents 内にリソースの識別子を格納しないでください。代わりに、これらのタイプの値にはパラメータを使用してください。これには、リソース ARN やその他識別子など、環境に関する情報を開示する可能性のあるものが含まれます。
もし、共有されている SSM documents で、削除する必要のある情報を見つけた場合、SSM documents はバージョン管理されているため、以前のバージョンはすべて履歴に残っていることに注意してください。その場合は、該当する SSM documents を削除し、代わりの SSM documents を作成します。

内部プロセス用 SSM documents の非公開

複数のアカウントを運用している場合、一部の SSM documents (バックアップやデプロイなどの内部プロセスに使用されるものなど) を、信頼できるアカウントと共有することが適切な場合があります。これらの SSM documents には、内部プロセスやインフラストラクチャに関する機密情報が開示される可能性があります。ベストプラクティスとして、バックアップやデプロイなどの内部プロセスに関連するドキュメントをパブリックに共有したり、信頼できないアカウントと共有したりすることは避けてください。

まとめ

このブログでは、SSM documents のパブリック共有にガバナンスとガードレールを適用して、組織のセキュリティ体制を整備するための手順、ベストプラクティス、およびいくつかのアイデアを共有しました。
次のステップとして、AWS アカウントを見直し、SSM documents のパブリック共有が組織のセキュリティ体制に準拠していることを確認する時間を作ってください。そして、ここで説明したベストプラクティスを適用してください。詳細については、AWS Systems Manager ユーザーガイドの「Best practices for shared SSM documents」を参照してください。

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