リモートおよびセッション管理
Remote and Session Management には、Run Command、Fleet Manager、Session Manager などの機能が含まれています。
リモート管理
AWS Systems Manager のツールである Run Command を使用すると、マネージドノードの設定をリモートかつ安全に管理できます。Run Command を使用することで、一般的な管理タスクを自動化し、大規模な 1 回限りの設定変更を実行できます。Run Command は、AWS Management Console、AWS Command Line Interface (AWS CLI)、AWS Tools for Windows PowerShell、または AWS SDK から使用できます。

run コマンドの一般 的なユースケースには以下が含まれます。
- ブートストラップノード: すべてのノードまたは特定のノードにアプリケーションをインストールまたはブートストラップできます。
- 構成管理: Systems Manager は、Ansible、Salt States、PowerShell DSC など、さまざまなドメイン固有言語 (DSL) をサポートしています。
- ドメインへの参加: ノードを Windows ドメインに参加させます。
- その他の Amazon エージェントのデプロイ: エージェント設定を Parameter Store に保存します。
コンポジットコマンドドキュメント
これらの Systems Manager ドキュメントは、マネージドノードで実行するアクションを定義します。Systems Manager は、さまざまな事前定義済みのパブリックドキュメントを提供するとともに、ドキュメントをカスタマイズする機能も備えています。設定の一部としてコンポジットドキュメントを実行することができます。コンポジットドキュメントは、1 つ以上のセカンダリドキュメントを実行するタスクを実行します。
コンポジットコマンドドキュメントを活用する際に留意すべき点として、順次操作のみがサポートされており、分岐はできません。Systems Manager、プライベートまたはパブリックの GitHub、あるいは Amazon S3 に保存されているドキュメントを実行するために、AWS-RunDocument を通じてこれを有効にすることができます。これは aws:downloadContent および aws:runDocument プラグインを使用することで実現されます。aws:runDocument プラグインは、Systems Manager またはローカルパスに存在するドキュメントを実行します。この例として AWS-RunPatchBaselineWithHooks が挙げられます。
Run Command の制限
IAM ユーザー/ロールを通じて、セッション内でユーザーが実行できるコマンドを制限できます。ドキュメントでは、ユーザーがセッションを開始したときに実行されるコマンドと、ユーザーがコマンドに提供できるパラメータを定義します。ssm:SendCommand、ドキュメント名またはプレ フィックス、リソースタグ、およびリソース ID に基づいてアクセスを制限できます。また、SAML セッションタグを使用して ABAC ポリシーを適用することもできます。

- 例えば、AWS Identity and Access Management (IAM) ユーザーが所属する部門に基づいて、特定のマネージドノードへのアクセスを許可することができます。
- Alice と Bob は、外部 Identity Provider (IdP) を使用してAWS Management Console にフェデレーションします。フェデレーションされた両ユーザーは、それぞれの「department」メンバーシップ(Amber および Blue)に基づいて、Session Manager を使用して特定の EC2 インスタンスにアクセスする必要があります。
マルチアカウントおよびマルチリージョン Run Command
- Run Command 自体はアカウント/リージョンごとです
- Automation を使用して、アカウント/リージョン間で呼び出します
AWS Systems Manager のツールである Automation は、一般的なメンテナ ンス、デプロイ、および修復タスクを簡素化します。複数のアカウントやリージョンをターゲットにするために活用できます。マルチアカウント/マルチリージョンの自動化では、子アカウントをターゲットにする場合、コマンドドキュメントがターゲットアカウント/リージョンに存在している必要があります。CloudFormation または Terraform を使用してコマンドドキュメントをデプロイできます。Systems Manager サービスが自動化アクションを実行できるように、必要なアクセス許可を設定しておく必要があります。詳細については、Automation セクションを参照してください。

AWS Systems Manager State Manager アソシエーションを通じた Run Command のスケジューリング
State Manager は、AWS 上、オンプレミス、またはマルチクラウド上のマネージドノードを望ましい状態に保つプロセスを自動化するのに役立ちます。State Manager では、アソシエーションとは、ドキュメント内で表現された設定と、一貫した状態を確保するために特定のスケジュールで実行されるターゲットのセットとの間のバインディングです。ランブックを使用して State Manager アソシエーションを作成することで、オートメーションを開始できます。設定に関連付けられた Command ドキュメントは、すべてのターゲットアカウント/リージョンに存在する必要があります。

エラー、終了、および再起動コードの処理
デフォルトでは、スクリプト内で最後に実行されたコマンドの終了コードが、スクリプト全体の終了コードとして報告されます。
Exit 0ステータスは次のようになります。SuccessExit 1またはその他の場合*、ステータスは次のようになります。Failed- 特定の終了コードを含めることで、エラーをより迅速に特定できます。
- 再起動コード:
- Windows:
exit 3010 - Linux:
exit 194
- Windows:

Amazon CloudWatch を使用した Run Command のモニタリング
AWS Systems Manager は、Run Command コマンドのステータスに関するメトリクスを CloudWatch に発行し、それらのメトリクスに基づいてアラームを設定できるようにします。Systems Manager が CloudWatch にプッシュするコマンド関連の特定のメトリクスとして、Delivery Time Out(配信タイムアウト)になったコマンド数、Failed(失敗)したコマンド数、Successful(成功)したコマンド数などがあります。
Run Command のモニタリングの詳細については、Amazon CloudWatch を使用した Run Command メトリクスのモニタリングを参照してください。
セッション管理
AWS Session Manager は、フルマネージドの AWS Systems Manager ツールです。インタラクティブなワンクリックのブラウザベースシェル、または AWS Command Line Interface (AWS CLI) のいずれかを使用して、マネージドノードを操作できます。Session Manager は、インバウンドポートを開いたり、踏み台ホストを維持したり、SSH キーを管理したりすることなく、安全なノード管理を提供します。マネージドノードへの制御されたアクセス、厳格なセキュリティプラクティス、ノードアクセス詳細を含むログを必要とする企業ポリシーに準拠しつつ、エンドユーザーにはマネージドノードへのシンプルなワンクリックのクロスプラットフォームアクセスを提供できます。
ガバナンス

-
ユーザーをデータから分離する: Cloud Ops の重要な原則は、可能な限りユーザーをデータから分離することです。Session Manager は、認証情報を持つ誰もがサーバーにアクセスして設定を変更できる可能性のあるインバウンドネットワークポートを閉じます。Session Manager はさらに進んで、インタラクティブなセッションを一切持たずに、ユーザーを個々のコマンドの実行と結果の表示のみに制限することもできます。
-
アクセスを一元管理する: クラウドオペレーションでは、環境に対する変更が伸縮自在かつ絶え間なく発生する可能性があります。各サーバー上で誰が各サーバーにアクセスできるかを維持管理する代わりに、Session Manager は Identity Access Management と統合され、誰がどのノ ードにアクセスできるかを一元的に定義できます。
-
ワークロードとコンポーネントへのアクセスを制御する: 組織は IAM を使用して、ワークロードやロールに応じてノードへのアクセスを制御できます。例えば、データベース管理者は「Component: Database」とタグ付けされた任意のインスタンスにリモートアクセスでき、アプリケーション開発者は「Environment: Development」とタグ付けされた任意のインスタンスにリモートアクセスできる、といった具合です。この属性ベースのアクセス制御により、プロジェクトチームはビジネスへの価値提供に必要なだけ迅速に作業できる一方で、組織は定義されたガードレールの範囲内で運用されているという安心感を得られます。
-
特定のロールにコマンドを制限する: 「ユーザーをデータから分離する」で述べたように、ロールに対してそのロールに必要な特定のコマンドセットのみの実行を許可することが可能です。例えば、アプリケーション開発者は、本番環境へのインタラクティブなアクセスを持たず、またその必要もなく、本番環境にあるアプリケーションのログファイルを「tail」できる、といったことが考えられます。
-
ビジネス上の理由で一時的なアクセスを付与する: オープンソースおよび商用の一時的な権限昇格ソリューションが提供する追加機能を使用すると、サーバーにアクセスする正当なビジネス上の理由がない限り、すべてのオペレーターのリモートアクセスを拒否することさえ可能です。例えば、本番環境のアプリケーションサーバーはリモートアクセスでき ないようにしておきます。しかし、インシデント発生時には、オペレーターがインシデントを調査するためにサーバーへの一時的なアクセスを要求し、付与を受けることができます。このアクセスは記録された理由に関連付けられ、別のオペレーターによって承認され、作業に必要な期間だけに限定されます。
オブザーバビリティとコンプライアンス
- VM およびコンテナのセッションアクティビティのロギングと、マネージドノードのアクセス・アクティビティのモニタリング: Session Manager を使用して AWS コンソールからターミナルセッションを開始すると、セッションのすべてのコマンドとその結果を S3 および CloudWatch ロググループに記録できます。これにより、インタラクティブセッション中に行われたすべての変更の監査証跡を提供できます。また、CloudTrail イベントを使用して、ノードへの成功・失敗したリモートセッションをモニタリング(必要に応じてアラート発報)することもできます。例えば、定義された変更ウィンドウ外で実施されたリモートセッションを、当該ユーザーとそのマネージャーにアラートすることができます。