

• AWS Systems Manager CloudWatch ダッシュボードは、2026 年 4 月 30 日以降は利用できなくなります。お客様は、これまでと同様に Amazon CloudWatch コンソールを使用して、Amazon CloudWatch ダッシュボードの表示、作成、管理を継続できます。詳細については、「[Amazon CloudWatch ダッシュボードのドキュメント](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/CloudWatch_Dashboards.html)」を参照してください。

# Session Manager を設定する
<a name="session-manager-getting-started"></a>

AWS Systems Manager の Session Manager を使ってアカウント内のマネージドノードに接続する前に、以下のトピックの手順を完了してください。

**Topics**
+ [ステップ 1: Session Manager の前提条件を満たす](session-manager-prerequisites.md)
+ [ステップ 2: Session Manager のインスタンスのアクセス権限の確認または追加](session-manager-getting-started-instance-profile.md)
+ [ステップ 3: マネージドノードへのセッションアクセスを制御](session-manager-getting-started-restrict-access.md)
+ [ステップ 4: セッション設定を構成する](session-manager-getting-started-configure-preferences.md)
+ [ステップ 5: (オプション) セッションでのコマンドへのアクセスを制限する](session-manager-restrict-command-access.md)
+ [ステップ 6: (オプション) AWS PrivateLink を使用して Session Manager の VPC エンドポイントを設定する](session-manager-getting-started-privatelink.md)
+ [ステップ 7: (オプション) ssm-user アカウントの管理アクセス許可を有効または無効にする](session-manager-getting-started-ssm-user-permissions.md)
+ [ステップ 8: (オプション) Session Manager を通して SSH 接続のアクセス許可を付与および制御する](session-manager-getting-started-enable-ssh-connections.md)

# ステップ 1: Session Manager の前提条件を満たす
<a name="session-manager-prerequisites"></a>

Session Manager を使用する前に、環境が以下の要件を満たしていることを確認します。


**Session Manager の前提条件**  

| 要件 | 説明 | 
| --- | --- | 
|  サポートされるオペレーティングシステム  |  Session Manager はアドバンストインスタンス層を使用する[ハイブリッドおよびマルチクラウド](operating-systems-and-machine-types.md#supported-machine-types)環境内の非 EC2 マシンに加え、Amazon Elastic Compute Cloud (Amazon EC2) インスタンスへの接続もサポートします。 Session Manager では、次のオペレーティングシステムのバージョンがサポートされています。  Session Manager はアドバンストインスタンス層を使用する[ハイブリッドおよびマルチクラウド](operating-systems-and-machine-types.md#supported-machine-types)環境内の EC2 インスタンス、エッジデバイス、オンプレミスサーバー、仮想マシン (VM) をサポートします。アドバンストインスタンスの詳細については、「[インスタンス層の設定](fleet-manager-configure-instance-tiers.md)」を参照してください。   **Linux および **macOS****  Session Manager は、AWS Systems Manager でサポートされている Linux および macOS のすべてのバージョンをサポートしています。詳細については、「[サポートされているオペレーティングシステムとマシンタイプ](operating-systems-and-machine-types.md)」を参照してください。  ** Windows **  Session Manager は Windows Server 2012 以降のバージョンをサポートしています。  Microsoft Windows Server 2016 Nano はサポートされていません。   | 
|  SSM Agent  |  少なくとも、セッションを介して接続するマネージドノードに AWS Systems Manager の SSM Agent バージョン 2.3.68.0 以降をインストールする必要があります。 AWS Key Management Service (AWS KMS) で作成したキーを使用してセッションデータを暗号化するオプションを使用するため、SSM Agent のバージョン 2.3.539.0 以降がマネージドノードにインストールされている必要があります。 セッションでシェルプロファイルを使用するには、マネージドノードに SSM Agent のバージョン 3.0.161.0 以降がインストールされている必要があります。 Session Manager ポート転送または SSH セッションを開始するには、マネージドノードに SSM Agent のバージョン 3.0.222.0 以降がインストールされている必要があります。 Amazon CloudWatch Logs を使用してセッションデータをストリーミングするには、マネージドノードに SSM Agent のバージョン 3.0.284.0 以降がインストールされている必要があります。 インスタンスで実行されているバージョン番号を確認する方法については、「[SSM Agent バージョン番号の確認](ssm-agent-get-version.md)」を参照してください。SSM Agent の手動インストールまたは自動アップグレードについては、「[「SSM Agent」 の使用](ssm-agent.md)」を参照してください。  ssm-user アカウントについて SSM Agent のバージョン 2.3.50.0 以降、エージェントはマネージドノード上にルートまたは管理者アクセス許可 (`ssm-user` と呼ばれる) のあるユーザーアカウントを作成します。(2.3.612.0 より前のバージョンでは、SSM Agent が起動または再起動するときにアカウントが作成されます。2.3.612.0 以降のバージョンでは、マネージドノード上でセッションが開始されるときに `ssm-user` が初めて作成されます) セッションは、このユーザーアカウントの管理者認証情報を使用して起動します。このアカウントの管理上の制御を制限することの詳細については、「[ssm-user アカウントの管理権限を無効または有効する](session-manager-getting-started-ssm-user-permissions.md)」のトピックで入手できます。   Windows Server ドメインコントローラーの ssm-user SSM Agent の バージョン 2.3.612.0 以降、`ssm-user` アカウントは Windows Server のドメインコントローラーとして使用されているマネージドノードに自動的に作成されません。ドメインコントローラーとして使用されている Windows Server マシンで Session Manager を使用するには、 アカウントが存在しない場合は手動で `ssm-user` アカウントを作成し、ユーザーに Domain Administrator のアクセス許可を割り当てる必要があります。Windows Server で、SSM Agent はセッションが開始されるたびに `ssm-user` アカウントの新しいパスワードを設定するので、アカウントを作成するときにパスワードを指定する必要はありません。   | 
|  エンドポイントへの接続  |  接続するマネージドノードは、以下のエンドポイントへの HTTPS (ポート 443) アウトバウンド・トラフィックも許可する必要があります: [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/systems-manager/latest/userguide/session-manager-prerequisites.html) 詳細については、以下の各トピックを参照してください。 [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/systems-manager/latest/userguide/session-manager-prerequisites.html) または、インターフェイスエンドポイントを使用して必要なエンドポイントに接続することもできます。詳細については、「[ステップ 6: (オプション) AWS PrivateLink を使用して Session Manager の VPC エンドポイントを設定する](session-manager-getting-started-privatelink.md)」を参照してください。  | 
|  AWS CLI  |  (オプション) (AWS Systems Manager コンソールまたは Amazon EC2 コンソールを使用する代わりに) AWS Command Line Interface (AWS CLI) を使用してセッションを開始する場合は、CLI のバージョン 1.16.12 以降をローカルマシンにインストールする必要があります。 `aws --version` を呼び出すとバージョンを確認できます。 CLI をインストールまたはアップグレードする必要がある場合は、AWS Command Line Interface ユーザーガイドの「[AWS Command Line Interface のインストール](https://docs.aws.amazon.com/cli/latest/userguide/installing.html)」を参照してください。 新しいツールが Systems Manager に追加されるか、既存のツールが更新されると必ず、更新されたバージョンの SSM Agent がリリースされます。最新バージョンのエージェントを使用しないと、マネージドノードが Systems Manager の各種ツールや機能を使用できなくなる可能性があります。このため、マシン上で SSM Agent を最新状態に維持するプロセスを自動化することをお勧めします。詳細については、「[SSM Agent への更新の自動化](ssm-agent-automatic-updates.md)」を参照してください。GitHub の「[SSM Agent リリースノート](https://github.com/aws/amazon-ssm-agent/blob/mainline/RELEASENOTES.md)」ページをサブスクライブすると、SSM Agent の更新に関する通知を受け取ることができます。 さらに CLI を使って Session Manager でノードを管理する場合、まずローカルマシンに Session Manager プラグインをインストールする必要があります。詳細については、「[AWS CLI 用の Session Manager プラグインをインストールする](session-manager-working-with-install-plugin.md)」を参照してください。  | 
|  アドバンストインスタンス層 ([ハイブリッドおよびマルチクラウド](operating-systems-and-machine-types.md#supported-machine-types)環境) を有効にする  |  Session Manager で非 EC2 に接続する場合、非 EC2 マシンをマネージドノードとして登録するためにハイブリッドアクティベーションを作成する際に AWS アカウント と AWS リージョン のアドバンストインスタンス層を有効にします。アドバンストインスタンス層の使用には料金が発生します。アドバンストインスタンス層の詳細については、[インスタンス層の設定](fleet-manager-configure-instance-tiers.md) をご参照ください。  | 
|  IAM サービスロールの許可 ([ハイブリッドおよびマルチクラウド](operating-systems-and-machine-types.md#supported-machine-types)環境) の確認  |  ハイブリッドアクティベーションノードは Systems Manager API オペレーションと通信するため、ハイブリッドアクティベーションで指定された AWS Identity and Access Management (IAM) サービスロールを使用します。このサービスロールには、Session Manager を使用して[ハイブリッドおよびマルチクラウド](operating-systems-and-machine-types.md#supported-machine-types)マシンに接続するために必要な許可が含まれている必要があります。サービスロールが AWS 管理ポリシー `AmazonSSMManagedInstanceCore` を含む場合、Session Manager に必要なアクセス許可は既に付与されています。 サービスロールに必要な許可が含まれていない場合、マネージドインスタンスの登録を解除し、必要な許可を持った IAM サービスロールを使用する新しいハイブリッドアクティベーションで登録する必要があります。マネージドインスタンスの登録解除の詳細については「[ハイブリッドおよびマルチクラウド環境でのマネージドノードの登録解除](fleet-manager-deregister-hybrid-nodes.md)」をご参照ください。Session Manager アクセス権限付き IAM ポリシーの作成方法の詳細については「[ステップ 2: Session Manager のインスタンスのアクセス権限の確認または追加](https://docs.aws.amazon.com/systems-manager/latest/userguide/session-manager-getting-started-instance-profile.html)」を参照してください。  | 

# ステップ 2: Session Manager のインスタンスのアクセス権限の確認または追加
<a name="session-manager-getting-started-instance-profile"></a>

デフォルトでは、AWS Systems Manager にはインスタンスでアクションを実行する権限がありません。インスタンスのアクセス許可は、AWS Identity and Access Management (IAM) ロールを使用してアカウントレベルで付与するか、またはインスタンスプロファイルを使用してインスタンスレベルで付与することができます。可能であれば、デフォルトのホスト管理設定を使用してアカウントレベルでアクセスを付与することをお勧めします。`AmazonSSMManagedEC2InstanceDefaultPolicy` ポリシーを使用してアカウントのデフォルトホスト管理設定を既にセットアップしている場合は、次のステップに進むことができます。デフォルトのホスト管理設定の詳細については、「[Default Host Management Configuration を使用した EC2 インスタンスの自動管理](fleet-manager-default-host-management-configuration.md)」を参照してください。

インスタンスプロファイルを使用してインスタンスに必要なアクセス権限を提供することもできます。インスタンスプロファイルは IAM ロールを Amazon EC2 インスタンスに渡します。IAM インスタンスプロファイルは、起動時の Amazon EC2 インスタンスまたは以前に起動したインスタンスにアタッチできます。詳細については[インスタンスプロファイルの使用](https://docs.aws.amazon.com/IAM/latest/UserGuide/roles-usingrole-instanceprofile.html)をご参照ください。

オンプレミスサーバーまたは仮想マシン (VM) の場合、アクセス許可はハイブリッドアクティベーションに関連付けられた IAM サービスロールによって付与されます。ハイブリッドアクティベーションは、Systems Manager 付きオンプレミスサーバーおよび VM の登録に使用します。オンプレミスサーバーと VM はインスタンスプロファイルを使用しません。

Run Command や Parameter Store など、他の Systems Manager ツールを既に使用している場合、Session Manager に必要な基本許可を持つインスタンスプロファイルが既に Amazon EC2 インスタンスに添付されている可能性があります。AWS 管理ポリシー `AmazonSSMManagedInstanceCore` を含むインスタンスプロファイルが既にインスタンスにアタッチされている場合、Session Manager に必要なアクセス許可は既に付与されています。これはハイブリッドアクティベーションで使用される IAM サービスロールに `AmazonSSMManagedInstanceCore` 管理ポリシーが含まれる場合も適用されます。

ただし、場合によっては、インスタンスプロファイルにアタッチされたアクセス許可を変更する必要があります。例えば、インスタンスのアクセス許可のセットを絞り込む場合、インスタンスプロファイルのカスタムポリシーを作成した場合、Amazon Simple Storage Service (Amazon S3) 暗号化オプションまたは AWS Key Management Service (AWS KMS) 暗号化オプションを使用してセッションデータを保護する場合などです。このような場合は、次のいずれかを実行して、インスタンスで Session Manager アクションを実行できるようにします。
+  **カスタム IAM ロールの Session Manager アクション用の許可を埋め込む** 

  AWS が提供するデフォルトのポリシー `AmazonSSMManagedInstanceCore` に依存しない既存の IAM ロールに Session Manager アクションのアクセス許可を追加するには、次の [既存の IAM ロールに Session Manager 許可を追加する](getting-started-add-permissions-to-existing-profile.md) の手順に従います。
+  **Session Manager の許可のみ付与したカスタム IAM ロールを作成** 

  Session Manager アクションのみの許可を含む IAM ロールを作成する場合、[Session Manager のカスタム IAM ロールを作成](getting-started-create-iam-instance-profile.md) のステップにしたがいます。
+  **すべての Systems Manager アクション用の許可を持った新しい IAM ロールの作成と使用** 

  AWS が提供するデフォルトポリシーを使用する Systems Manager マネージドインスタンスの IAM ロールを作成してすべての Systems Manager にアクセス許可を付与する場合は、「[Systems Manager に必要なインスタンスのアクセス許可を設定する](setup-instance-permissions.md)」のステップに従います。

**Topics**
+ [既存の IAM ロールに Session Manager 許可を追加する](getting-started-add-permissions-to-existing-profile.md)
+ [Session Manager のカスタム IAM ロールを作成](getting-started-create-iam-instance-profile.md)

# 既存の IAM ロールに Session Manager 許可を追加する
<a name="getting-started-add-permissions-to-existing-profile"></a>

以下の手順を使用して、既存の AWS Identity and Access Management (IAM) ロールに Session Manager 権限を追加します。既存のロールに権限を追加することで、インスタンス権限に AWS `AmazonSSMManagedInstanceCore` ポリシーを使用することなく、コンピューティング環境のセキュリティを強化できます。

**注記**  
以下の情報に注意してください。  
この手順は、アクセスを許可するアクションに対する他の Systems Manager `ssm` 権限が、既存のロールに既に含まれていることを前提とします。このポリシーだけでは、Session Manager を使用するには十分ではありません。
次のポリシー例には、`s3:GetEncryptionConfiguration` アクションが含まれています。このアクションは、Session Manager ロギング設定で **[S3 ログ暗号化を強制]** オプションインを選択した場合に必要です。
IAM インスタンスプロファイルまたは IAM サービスロールにアタッチされたポリシーから `ssmmessages:OpenControlChannel` アクセス許可が削除されると、マネージドノード上の SSM Agent はクラウド内の Systems Manager サービスへの接続を失います。ただし、アクセス許可が削除された後、接続が終了するまでに最大 1 時間かかる場合があります。これは、IAM インスタンスロールまたは IAM サービスロールが削除されたときと同じ動作です。

**Session Manager の許可を既存のロール (コンソール) に追加する場合**

1. AWS マネジメントコンソール にサインインして、[https://console.aws.amazon.com/iam/](https://console.aws.amazon.com/iam/) で IAM コンソールを開きます。

1. ナビゲーションペインで **Roles (ロール)** を選択します。

1. アクセス許可を追加するロール名を選択します。

1. **[アクセス許可]** タブを選択します。

1. **[アクセス許可の追加]**、**[インラインポリシーの作成]** の順に選択します。

1. **JSON** タブを選択します。

1. デフォルトのポリシーコンテンツを次のコンテンツに置き換えます。*key-name* を、使用する AWS Key Management Service キー (AWS KMS key) の Amazon リソースネーム (ARN) に置き換えます。

------
#### [ JSON ]

****  

   ```
   {
       "Version":"2012-10-17",		 	 	 
       "Statement": [
           {
               "Effect": "Allow",
               "Action": [
                   "ssmmessages:CreateControlChannel",
                   "ssmmessages:CreateDataChannel",
                   "ssmmessages:OpenControlChannel",
                   "ssmmessages:OpenDataChannel"
               ],
               "Resource": "*"
           },
           {
               "Effect": "Allow",
               "Action": [
                   "s3:GetEncryptionConfiguration"
               ],
               "Resource": "*"
           },
           {
               "Effect": "Allow",
               "Action": [
                   "kms:Decrypt"
               ],
               "Resource": "arn:aws:kms:us-east-1:111122223333:key/key-name"
           }
       ]
   }
   ```

------

   セッションデータを暗号化するための KMS キーの使用については、「[セッションデータの KMS キー暗号化を有効にする (コンソール)](session-preferences-enable-encryption.md)」を参照してください。

   セッションデータに AWS KMS 暗号化を使用しない場合は、ポリシーから以下のコンテンツを削除できます。

   ```
   ,
           {
               "Effect": "Allow",
               "Action": [
                   "kms:Decrypt"
               ],
               "Resource": "key-name"
           }
   ```

1. **[Next: Tags]** (次へ: タグ) を選択します。

1. (オプション) **[Add tag]** (タグを追加) を選択してタグを追加し、ポリシーの優先タグを入力します。

1. **[次へ: レビュー]** を選択します。

1. [**Review policy (ポリシーの確認)**] ページで、[**Name (名前)**] にインラインポリシーの名前を入力します (**SessionManagerPermissions** など)。

1. (オプション) [**Description (説明)**] に、ポリシーの説明を入力します。

   [**Create policy**] を選択します。

`ssmmessages` アクションの詳細については、「[リファレンス: ec2messages、ssmmessages およびその他の API オペレーション](systems-manager-setting-up-messageAPIs.md)」を参照してください。

# Session Manager のカスタム IAM ロールを作成
<a name="getting-started-create-iam-instance-profile"></a>

Amazon EC2 マネージドインスタンスでアクションを実行する許可を Session Manager に付与する AWS Identity and Access Management (IAM) ロールを作成できます。Amazon Simple Storage Service (Amazon S3) と Amazon CloudWatch Logs に送信されるセッションログの許可を付与するポリシーを作成することもできます。

IAM ロールを作成後、インスタンスのロールをアタッチする情報については、AWS re:Post ウェブサイトの「[インスタンスプロファイルをアタッチまたは置き換え](https://aws.amazon.com/premiumsupport/knowledge-center/attach-replace-ec2-instance-profile/)」を参照してください。IAM インスタンスのプロファイルとロールの詳細については、「IAM ユーザーガイド」の「[インスタンスプロファイルの使用](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_use_switch-role-ec2_instance-profiles.html)」と、「Linux インスタンス用 Amazon Elastic Compute Cloud ユーザーガイド」の「[Amazon EC2 の IAM ロールの使用](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/iam-roles-for-amazon-ec2.html)」を参照してください。オンプレミスマシンの IAM サービスロールの作成における詳細については、「[ハイブリッドおよびマルチクラウド環境で Systems Manager に必要な IAM サービスロールを作成する](https://docs.aws.amazon.com/systems-manager/latest/userguide/hybrid-multicloud-service-role.html)」を参照してください。

**Topics**
+ [最小限の Session Manager 許可 (コンソール) を付与した IAM ロールの作成](#create-iam-instance-profile-ssn-only)
+ [Session Manager、Amazon S3、CloudWatch Logs (コンソール) の許可を持つIAM ロールの作成](#create-iam-instance-profile-ssn-logging)

## 最小限の Session Manager 許可 (コンソール) を付与した IAM ロールの作成
<a name="create-iam-instance-profile-ssn-only"></a>

以下の手順にしたがって、インスタンス上の Session Manager アクションのみに許可を付与するポリシーが付いたカスタム IAM ロールを作成します。

**最小限の Session Manager アクセス権限でインスタンスプロファイルを作成するには (コンソール)**

1. AWS マネジメントコンソール にサインインして、IAM コンソール ([https://console.aws.amazon.com/iam/](https://console.aws.amazon.com/iam/)) を開きます。

1. ナビゲーションペインで、[**Policies**] を選択し、次に [**Create policy**] を選択します。([**Get Started**] ボタンが表示された場合は、そのボタンを選択してから、[**Create Policy**] を選択します)。

1. [**JSON**] タブを選択します。

1. デフォルトの内容を次のポリシーに置き換えます。AWS Key Management Service (AWS KMS) を使用してセッションデータを暗号化するには、*key-name* を、使用する AWS KMS key の Amazon リソースネーム (ARN) に置き換えます。
**注記**  
IAM インスタンスプロファイルまたは IAM サービスロールにアタッチされたポリシーから `ssmmessages:OpenControlChannel` アクセス許可が削除されると、マネージドノード上の SSM Agent はクラウド内の Systems Manager サービスへの接続を失います。ただし、アクセス許可が削除された後、接続が終了するまでに最大 1 時間かかる場合があります。これは、IAM インスタンスロールまたは IAM サービスロールが削除されたときと同じ動作です。

------
#### [ JSON ]

****  

   ```
   {
       "Version":"2012-10-17",		 	 	 
       "Statement": [
           {
               "Effect": "Allow",
               "Action": [
                   "ssm:UpdateInstanceInformation",
                   "ssmmessages:CreateControlChannel",
                   "ssmmessages:CreateDataChannel",
                   "ssmmessages:OpenControlChannel",
                   "ssmmessages:OpenDataChannel"
               ],
               "Resource": "*"
           },
           {
               "Effect": "Allow",
               "Action": [
                   "kms:Decrypt"
               ],
               "Resource": "arn:aws:kms:us-east-1:111122223333:key/key-name"
           }
       ]
   }
   ```

------

   セッションデータを暗号化するための KMS キーの使用については、「[セッションデータの KMS キー暗号化を有効にする (コンソール)](session-preferences-enable-encryption.md)」を参照してください。

   セッションデータに AWS KMS 暗号化を使用しない場合は、ポリシーから以下のコンテンツを削除できます。

   ```
   ,
           {
               "Effect": "Allow",
               "Action": [
                   "kms:Decrypt"
               ],
               "Resource": "key-name"
           }
   ```

1. **[Next: Tags]** (次へ: タグ) を選択します。

1. (オプション) **[Add tag]** (タグを追加) を選択してタグを追加し、ポリシーの優先タグを入力します。

1. **[次へ: レビュー]** を選択します。

1. [**Review policy (ポリシーの確認)**] ページで、[**Name (名前)**] にインラインポリシーの名前を入力します (**SessionManagerPermissions** など)。

1. (オプション) [**Description (説明)**] に、ポリシーの説明を入力します。

1. [**Create policy**] を選択します。

1. ナビゲーションペインで [**Roles**] を選択し、続いて [**Create role**] を選択します。

1. **[ロールを作成]** ページで **[AWS サービス]** を選択して、**[ユースケース]** で **[EC2]** を選択します。

1. [**次へ**] を選択します。

1. **[Add permissions]** (アクセス許可を追加) ページで、先ほど作成したポリシーの名前 (**SessionManagerPermissions** など) の左側にあるチェックボックスをオンにします。

1. [**次へ**] を選択します。

1. **[Name, review, and create]** (名前、確認、および作成) ページの **[Role name]** (ロール名) に、IAM ロールの名前 (**MySessionManagerRole** など) を入力します。

1. (オプション) [**Role description (ロールの説明)**] に、インスタンスプロファイルの説明を入力します。

1. (オプション) **[Add tag]** (タグを追加) を選択してタグを追加し、ロールの優先タグを入力します。

   [**ロールの作成**] を選択してください。

`ssmmessages` アクションの詳細については、「[リファレンス: ec2messages、ssmmessages およびその他の API オペレーション](systems-manager-setting-up-messageAPIs.md)」を参照してください。

## Session Manager、Amazon S3、CloudWatch Logs (コンソール) の許可を持つIAM ロールの作成
<a name="create-iam-instance-profile-ssn-logging"></a>

以下の手順にしたがって、インスタンス上の Session Manager アクションに許可を付与するポリシーが付いたカスタム IAM ロールを作成します。このポリシーは、セッションログを Amazon Simple Storage Service (Amazon S3) バケットおよび Amazon CloudWatch Logs ロググループに保存するために必要なアクセス許可も提供します。

**重要**  
セッションログを別の AWS アカウント によって所有されている Amazon S3 バケットに出力するには、IAM ロールポリシーに `s3:PutObjectAcl` の許可を追加する必要があります。さらに、バケットポリシーで、所有アカウントが使用する IAM ロールへのクロスアカウントアクセスを許可して、管理対象インスタンスに Systems Manager 許可を付与するようにする必要があります。バケットが Key Management Service (KMS) 暗号化を使用している場合は、バケットの KMS ポリシーでもこのクロスアカウントアクセスを許可する必要があります。Amazon S3 クロスアカウントバケットの許可の詳細については、「Amazon Simple Storage Service ユーザーガイド」の「[クロスアカウントバケットパーミッションを付与する](https://docs.aws.amazon.com/AmazonS3/latest/userguide/example-walkthroughs-managing-access-example2.html)」を参照してください。クロスアカウントの許可が追加されていないと、Amazon S3 バケットを所有するアカウントはセッション出力ログにアクセスできません。

セッションログを保存するための設定の指定方法については、「[セッションロギングの有効化と無効化](session-manager-logging.md)」を参照してください。

**Session Manager、Amazon S3、CloudWatch Logs (コンソール) の許可を持つIAM ロールの作成方法**

1. AWS マネジメントコンソール にサインインして、IAM コンソール ([https://console.aws.amazon.com/iam/](https://console.aws.amazon.com/iam/)) を開きます。

1. ナビゲーションペインで、[**Policies**] を選択し、次に [**Create policy**] を選択します。([**Get Started**] ボタンが表示された場合は、そのボタンを選択してから、[**Create Policy**] を選択します)。

1. [**JSON**] タブを選択します。

1. デフォルトの内容を次のポリシーに置き換えます。各*リソースプレースホルダーの例*をユーザー自身の情報に置き換えます。

------
#### [ JSON ]

****  

   ```
   {
       "Version":"2012-10-17",		 	 	 
       "Statement": [
           {
               "Effect": "Allow",
               "Action": [
                   "ssmmessages:CreateControlChannel",
                   "ssmmessages:CreateDataChannel",
                   "ssmmessages:OpenControlChannel",
                   "ssmmessages:OpenDataChannel",
                   "ssm:UpdateInstanceInformation"
               ],
               "Resource": "*"
           },
           {
               "Effect": "Allow",
               "Action": [
                   "logs:CreateLogStream",
                   "logs:PutLogEvents",
                   "logs:DescribeLogGroups",
                   "logs:DescribeLogStreams"
               ],
               "Resource": "*"
           },
           {
               "Effect": "Allow",
               "Action": [
                   "s3:PutObject"
               ],
               "Resource": "arn:aws:s3:::amzn-s3-demo-bucket/s3-prefix/*"
           },
           {
               "Effect": "Allow",
               "Action": [
                   "s3:GetEncryptionConfiguration"
               ],
               "Resource": "*"
           },
           {
               "Effect": "Allow",
               "Action": [
                   "kms:Decrypt"
               ],
               "Resource": "arn:aws:kms:us-east-1:111122223333:key/key-name"
           },
           {
               "Effect": "Allow",
               "Action": "kms:GenerateDataKey",
               "Resource": "*"
           }
       ]
   }
   ```

------

1. **[Next: Tags]** (次へ: タグ) を選択します。

1. (オプション) **[Add tag]** (タグを追加) を選択してタグを追加し、ポリシーの優先タグを入力します。

1. **[次へ: レビュー]** を選択します。

1. [**Review policy (ポリシーの確認)**] ページで、[**Name (名前)**] にインラインポリシーの名前を入力します (**SessionManagerPermissions** など)。

1. (オプション) [**Description (説明)**] に、ポリシーの説明を入力します。

1. [**Create policy**] を選択します。

1. ナビゲーションペインで [**Roles**] を選択し、続いて [**Create role**] を選択します。

1. **[ロールを作成]** ページで **[AWS サービス]** を選択して、**[ユースケース]** で **[EC2]** を選択します。

1. [**次へ**] を選択します。

1. **[Add permissions]** (アクセス許可を追加) ページで、先ほど作成したポリシーの名前 (**SessionManagerPermissions** など) の左側にあるチェックボックスをオンにします。

1. [**次へ**] を選択します。

1. **[Name, review, and create]** (名前、確認、および作成) ページの **[Role name]** (ロール名) に、IAM ロールの名前 (**MySessionManagerRole** など) を入力します。

1. (オプション) **[Role description]** (ロールの説明) に、ロールの説明を入力します。

1. (オプション) **[Add tag]** (タグを追加) を選択してタグを追加し、ロールの優先タグを入力します。

1. [**ロールの作成**] を選択してください。

# ステップ 3: マネージドノードへのセッションアクセスを制御
<a name="session-manager-getting-started-restrict-access"></a>

この方法で、AWS Identity and Access Management (IAM) ポリシーを使用してマネージドノードへの Session Manager のアクセスを許可または取り消すことができます。ポリシーを作成して IAM ユーザーまたはグループにアタッチし、そのユーザーまたはグループが接続できるマネージドノードを指定することができます。また、ユーザーまたはグループがマネージドノードで実行できる Session Manager API オペレーションを指定することもできます。

Session Manager の IAM アクセス許可ポリシーを使い始めるために、エンドユーザーと管理者ユーザー用のサンプルポリシーを作成しました。これらのポリシーは、わずかな変更だけで使用できます。または、これらをガイドとして使用し、カスタム IAM ポリシーを作成することもできます。詳細については、「[Session Manager のサンプル IAM ポリシー](getting-started-restrict-access-quickstart.md)」を参照してください。IAM ポリシーの作成方法、およびポリシーをユーザーまたはグループにアタッチする方法については、「**IAM ユーザーガイド」の「[IAM ポリシーの作成](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_create.html)」および「[IAM ポリシーの追加と削除](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_manage-attach-detach.html)」を参照してください。

**セッション ID の ARN 形式について**  
Session Manager アクセスの IAM ポリシーを作成する際は、Amazon リソースネーム (ARN) の一部としてセッション ID を指定します。セッション ID にはユーザー名が変数として含まれます。これを説明するために、Session Manager ARN の形式と例を以下に示します。

```
arn:aws:ssm:region-id:account-id:session/session-id
```

例えば、次のようになります。

```
arn:aws:ssm:us-east-2:123456789012:session/JohnDoe-1a2b3c4d5eEXAMPLE
```

IAM ポリシーで変数を使用する方法の詳細については、「[IAM ポリシーエレメント: 変数](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_variables.html)」を参照してください。

**Topics**
+ [IAM ポリシーでデフォルトのセッションドキュメントを指定して、デフォルトのシェルセッションを開始します。](getting-started-default-session-document.md)
+ [IAM ポリシーでセッションドキュメントを指定して、ドキュメントでセッションを開始する](getting-started-specify-session-document.md)
+ [Session Manager のサンプル IAM ポリシー](getting-started-restrict-access-quickstart.md)
+ [Session Manager の追加サンプル IAM ポリシー](getting-started-restrict-access-examples.md)

# IAM ポリシーでデフォルトのセッションドキュメントを指定して、デフォルトのシェルセッションを開始します。
<a name="getting-started-default-session-document"></a>

AWS アカウント 用に Session Manager を設定したり、Systems Manager コンソールでセッション設定を変更したりすると、システムによって `SSM-SessionManagerRunShell` という名前の SSM セッションドキュメントが作成されます。これはデフォルトのセッションドキュメントです。Session Manager はこのドキュメントを使用して、次のような情報を含むセッション設定を保存します。
+ Amazon Simple Storage Service (Amazon S3) バケットまたは Amazon CloudWatch Logs ロググループなどのセッションデータを格納する場所です。
+ セッションデータを暗号化するための AWS Key Management Service (AWS KMS) キー ID。
+ セッションで Run As サポートが許可されているかどうか。

`SSM-SessionManagerRunShell` セッションの設定文書に含まれる情報の例を次に示します。

```
{
  "schemaVersion": "1.0",
  "description": "Document to hold regional settings for Session Manager",
  "sessionType": "Standard_Stream",
  "inputs": {
    "s3BucketName": "amzn-s3-demo-bucket",
    "s3KeyPrefix": "MyS3Prefix",
    "s3EncryptionEnabled": true,
    "cloudWatchLogGroupName": "MyCWLogGroup",
    "cloudWatchEncryptionEnabled": false,
    "kmsKeyId": "1a2b3c4d",
    "runAsEnabled": true,
    "runAsDefaultUser": "RunAsUser"
  }
}
```

デフォルトでは、ユーザーが AWS マネジメントコンソール からセッションを開始すると、Session Manager はデフォルトのセッションドキュメントを使用します。これは、Systems Manager コンソール、Amazon EC2 コンソールの EC2 Connect で Fleet Manager または Session Manager のいずれかに適用されます。また、Session Manager はユーザーが次の例のような AWS CLI コマンドを使用してセッションを開始したときに、デフォルトのセッションドキュメントを使用します。

```
aws ssm start-session \
    --target i-02573cafcfEXAMPLE
```

デフォルトのシェルセッションを開始するには、次の例に示すように、IAM ポリシーでデフォルトのセッションドキュメントを指定する必要があります。

------
#### [ JSON ]

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Sid": "EnableSSMSession",
      "Effect": "Allow",
      "Action": [
        "ssm:StartSession"
      ],
      "Resource": [
        "arn:aws:ec2:us-east-1:111122223333:instance/instance-id",
        "arn:aws:ssm:us-east-1:111122223333:document/SSM-SessionManagerRunShell"
      ]
    },
    {
      "Effect": "Allow",
      "Action": [
        "ssmmessages:OpenDataChannel"
      ],
      "Resource": [
        "*"
      ]
    }
  ]
}
```

------

# IAM ポリシーでセッションドキュメントを指定して、ドキュメントでセッションを開始する
<a name="getting-started-specify-session-document"></a>

デフォルトのセッションドキュメントを使用して [start-session](https://docs.aws.amazon.com/cli/latest/reference/ssm/start-session.html) AWS CLI コマンドを使用する場合は、ドキュメント名を省略できます。システムは自動的に `SSM-SessionManagerRunShell` セッションドキュメントを呼び出します。

その他の場合は、`document-name` パラメータに値を指定する必要があります。ユーザーがコマンドでセッションドキュメントの名前を指定すると、システムは IAM ポリシーをチェックして、そのドキュメントにアクセスするアクセス許可があることを確認します。アクセス許可がないと、接続リクエストは失敗します。以下の例では、`AWS-StartPortForwardingSession`セッションドキュメントに `document-name` パラメータが含まれています。

```
aws ssm start-session \
    --target i-02573cafcfEXAMPLE \
    --document-name AWS-StartPortForwardingSession \
    --parameters '{"portNumber":["80"], "localPortNumber":["56789"]}'
```

IAM ポリシーで Session Manager セッションドキュメントを指定する方法の例については、「[クイックスタート Session Manager のエンドユーザーポリシー](getting-started-restrict-access-quickstart.md#restrict-access-quickstart-end-user)」を参照してください。

**注記**  
SSH を使用してセッションを開始するには、ターゲットマネージドノード*と*ユーザーのローカルマシンで設定ステップを完了する必要があります。詳細については、「[(オプション) Session Manager を通して SSH 接続のアクセス許可を付与して制御する](session-manager-getting-started-enable-ssh-connections.md)」を参照してください。

# Session Manager のサンプル IAM ポリシー
<a name="getting-started-restrict-access-quickstart"></a>

このセクションのサンプルを使用して、一般的に Session Manager のアクセスに最も必要とされるアクセス許可を提供する、AWS Identity and Access Management (IAM) ポリシーを作成します。

**注記**  
AWS KMS key ポリシーを使用して、KMS キーへのアクセス権を付与する IAM エンティティ (ユーザーまたはロール) と AWS アカウント を管理することもできます。詳細については、*AWS Key Management Service デベロッパーガイド*の「[AWS KMS リソースへのアクセス管理の概要](https://docs.aws.amazon.com/kms/latest/developerguide/control-access-overview.html)」および「[AWS KMS でのキーポリシーの使用](https://docs.aws.amazon.com/kms/latest/developerguide/key-policies.html)」を参照してください。

**Topics**
+ [クイックスタート Session Manager のエンドユーザーポリシー](#restrict-access-quickstart-end-user)
+ [クイックスタート Session Manager の管理者ポリシー](#restrict-access-quickstart-admin)

## クイックスタート Session Manager のエンドユーザーポリシー
<a name="restrict-access-quickstart-end-user"></a>

次の例を使用して、Session Manager の IAM エンドユーザーポリシーを作成します。

Session Manager コンソールと AWS Command Line Interface (AWS CLI) のみ、Amazon Elastic Compute Cloud (Amazon EC2) コンソールのみ、または 3 つすべてからセッションを開始できるようにするポリシーを作成できます。

このポリシーはエンドユーザーに対して特定のマネージドノードへのセッションを開始する権限と、自分のセッションのみを終了する権限を提供します。ポリシーに対して行うカスタマイズの例については、「[Session Manager の追加サンプル IAM ポリシー](getting-started-restrict-access-examples.md)」を参照してください。

次のサンプルポリシーで、各*リソースプレースホルダーの例*をユーザー自身の情報に置き換えます。

次のタブから選択して、提供するセッションアクセスの範囲のサンプルポリシーを表示します。

------
#### [ セッションマネージャー and Fleet Manager ]

ユーザーが Session Manager コンソールと Fleet Manager コンソールからのみセッションを開始および再開できるようにするには、このサンプルポリシーを使用します。

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "ssm:StartSession"
            ],
            "Resource": [
                "arn:aws:ec2:us-east-1:111122223333:instance/i-02573cafcfEXAMPLE",
                "arn:aws:ssm:us-east-1:111122223333:document/SSM-SessionManagerRunShell"
            ]
        },
        {
         "Effect": "Allow",
         "Action": ["ssmmessages:OpenDataChannel"],
         "Resource": ["arn:aws:ssm:*:*:session/${aws:userid}-*"]
       },
        {
            "Effect": "Allow",
            "Action": [
                "ssm:DescribeSessions",
                "ssm:GetConnectionStatus",
                "ssm:DescribeInstanceProperties",
                "ec2:DescribeInstances"
            ],
            "Resource": "*"
        },
        {
            "Effect": "Allow",
            "Action": [
                "ssm:TerminateSession",
                "ssm:ResumeSession"
            ],
            "Resource": [
                "arn:aws:ssm:*:*:session/${aws:userid}-*"
            ]
        },
        {
            "Effect": "Allow",
            "Action": [
                "kms:GenerateDataKey"
            ],
            "Resource": "arn:aws:kms:us-east-1:111122223333:key/key-name"
        }
    ]
}
```

------

------
#### [ Amazon EC2 ]

ユーザーが Amazon EC2 コンソールからのみセッションを開始および再開できるようにするには、このサンプルポリシーを使用します。このポリシーでは、Session Manager コンソールおよび AWS CLI からセッションを開始するために必要なすべてのアクセス許可は提供されません。

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "ssm:StartSession",
                "ssm:SendCommand"
            ],
            "Resource": [
                "arn:aws:ec2:us-east-1:111122223333:instance/i-02573cafcfEXAMPLE",
                "arn:aws:ssm:us-east-1:111122223333:document/SSM-SessionManagerRunShell"
            ]
        },
        {
         "Effect": "Allow",
         "Action": ["ssmmessages:OpenDataChannel"],
         "Resource": ["arn:aws:ssm:*:*:session/${aws:userid}-*"]
       },
        {
            "Effect": "Allow",
            "Action": [
                "ssm:GetConnectionStatus",
                "ssm:DescribeInstanceInformation"
            ],
            "Resource": "*"
        },
        {
            "Effect": "Allow",
            "Action": [
                "ssm:TerminateSession",
                "ssm:ResumeSession"
            ],
            "Resource": [
                "arn:aws:ssm:*:*:session/${aws:username}-*"
            ]
        }
    ]
}
```

------

------
#### [ AWS CLI ]

ユーザーが AWS CLI からセッションを開始および再開できるようにするには、このサンプルポリシーを使用します。

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "ssm:StartSession",
                "ssm:SendCommand"
            ],
            "Resource": [
                "arn:aws:ec2:us-east-1:111122223333:instance/i-02573cafcfEXAMPLE",
                "arn:aws:ssm:us-east-1:111122223333:document/SSM-SessionManagerRunShell"
            ]
        },
        {
         "Effect": "Allow",
         "Action": ["ssmmessages:OpenDataChannel"],
         "Resource": ["arn:aws:ssm:*:*:session/${aws:userid}-*"]
       },
        {
            "Effect": "Allow",
            "Action": [
                "ssm:TerminateSession",
                "ssm:ResumeSession"
            ],
            "Resource": [
                "arn:aws:ssm:*:*:session/${aws:userid}-*"
            ]
        },
        {
            "Effect": "Allow",
            "Action": [
                "kms:GenerateDataKey"
            ],
            "Resource": "arn:aws:kms:us-east-1:111122223333:key/key-name"
        }
    ]
}
```

------

------

**注記**  
`SSM-SessionManagerRunShell` は、セッションの設定を保存するために Session Manager によって作成される SSM ドキュメントのデフォルト名です。代わりに、カスタムのセッションドキュメントを作成し、このポリシーで指定できます。また、SSH を使用してセッションを開始するユーザー向けに、AWS が提供するドキュメント `AWS-StartSSHSession` を指定することもできます。SSH を使用したセッションをサポートするために必要な設定手順については、「[(オプション) Session Manager を通して SSH 接続のアクセス許可を付与して制御する](session-manager-getting-started-enable-ssh-connections.md)」を参照してください。  
`kms:GenerateDataKey` アクセス権限により、セッションデータの暗号化に使用されるデータ暗号化キーを作成できます。セッションデータにAWS Key Management Service (AWS KMS) 暗号化を使用する場合は、*key-name* を `arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-12345EXAMPLE` 形式で、使用する KMS キーの Amazon リソースネーム (ARN) に置き換えてください。セッションデータに KMS キー暗号化を使用しない場合は、ポリシーから次のコンテンツを削除します。  

```
{
            "Effect": "Allow",
            "Action": [
                "kms:GenerateDataKey"
            ],
            "Resource": "key-name"
        }
```
セッションデータを暗号化するための AWS KMS の使用の詳細については、「[セッションデータの KMS キー暗号化を有効にする (コンソール)](session-preferences-enable-encryption.md)」を参照してください。  
[https://docs.aws.amazon.com/systems-manager/latest/APIReference/API_SendCommand.html](https://docs.aws.amazon.com/systems-manager/latest/APIReference/API_SendCommand.html) のアクセス許可は、ユーザーが Amazon EC2 コンソールからセッションを開始しようとする場合に必要ですが、まず SSM Agent を Session Manager に必要な最小限のバージョンに更新する必要があります。Run Command は、インスタンスにコマンドを送信してエージェントを更新するために使用されます。

## クイックスタート Session Manager の管理者ポリシー
<a name="restrict-access-quickstart-admin"></a>

次の例を使用して、Session Manager の IAM 管理者ポリシーを作成します。

このポリシーは、`Key=Finance,Value=WebServers` でタグ付けされたマネージドノードに対してセッションを開始する権限、および作成、更新、削除する許可、自分のセッションのみを終了する許可を管理者に提供します。ポリシーに対して行うカスタマイズの例については、「[Session Manager の追加サンプル IAM ポリシー](getting-started-restrict-access-examples.md)」を参照してください。

管理者が Session Manager コンソールと AWS CLI からのみ、Amazon EC2 コンソールからのみ、または 3 つすべてからこれらのタスクを実行できるようにするポリシーを作成できます。

次のサンプルポリシーで、各*リソースプレースホルダーの例*をユーザー自身の情報に置き換えます。

次のタブから選択して、サポートするアクセスシナリオのサンプルポリシーを表示します。

------
#### [ セッションマネージャー and CLI ]

管理者が Session Manager コンソールと AWS CLI からのみセッション関連のタスクを実行できるようにするには、このサンプルポリシーを使用します。このポリシーでは、Amazon EC2 コンソールからセッション関連のタスクを実行するために必要なすべてのアクセス許可は提供されません。

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "ssm:StartSession"
            ],
            "Resource": [
                "arn:aws:ec2:*:111122223333:instance/*"
            ],
            "Condition": {
                "StringLike": {
                    "ssm:resourceTag/Finance": [
                        "WebServers"
                    ]
                }
            }
        },
        {
            "Effect": "Allow",
            "Action": [
                "ssmmessages:OpenDataChannel"
            ],
            "Resource": [
                "arn:aws:ssm:*:*:session/${aws:userid}-*"
            ]
        },
        {
            "Effect": "Allow",
            "Action": [
                "ssm:DescribeSessions",
                "ssm:GetConnectionStatus",
                "ssm:DescribeInstanceProperties",
                "ec2:DescribeInstances"
            ],
            "Resource": "*"
        },
        {
            "Effect": "Allow",
            "Action": [
                "ssm:CreateDocument",
                "ssm:UpdateDocument",
                "ssm:GetDocument",
                "ssm:StartSession"
            ],
            "Resource": "arn:aws:ssm:us-east-1:111122223333:document/SSM-SessionManagerRunShell"
        },
        {
            "Effect": "Allow",
            "Action": [
                "ssmmessages:OpenDataChannel"
            ],
            "Resource": [
                "arn:aws:ssm:*:*:session/${aws:userid}-*"
            ]
        },
        {
            "Effect": "Allow",
            "Action": [
                "ssm:TerminateSession",
                "ssm:ResumeSession"
            ],
            "Resource": [
                "arn:aws:ssm:*:*:session/${aws:userid}-*"
            ]
        }
    ]
}
```

------

------
#### [ Amazon EC2 ]

管理者が Amazon EC2 コンソールからのみセッション関連のタスクを実行できるようにするには、このサンプルポリシーを使用します。このポリシーでは、Session Manager コンソールおよび AWS CLI からセッション関連のタスクを実行するために必要なすべてのアクセス許可は提供されません。

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "ssm:StartSession",
                "ssm:SendCommand"
            ],
            "Resource": [
                "arn:aws:ec2:us-east-1:111122223333:instance/*"
            ],
            "Condition": {
                "StringLike": {
                    "ssm:resourceTag/tag-key": [
                        "tag-value"
                    ]
                }
            }
        },
        {
            "Effect": "Allow",
            "Action": [
                "ssm:StartSession"
            ],
            "Resource": [
                "arn:aws:ssm:us-east-1:111122223333:document/SSM-SessionManagerRunShell"
            ]
        },
        {
         "Effect": "Allow",
         "Action": ["ssmmessages:OpenDataChannel"],
         "Resource": ["arn:aws:ssm:*:*:session/${aws:userid}-*"]
       },
        {
            "Effect": "Allow",
            "Action": [
                "ssm:GetConnectionStatus",
                "ssm:DescribeInstanceInformation"
            ],
            "Resource": "*"
        },
        {
            "Effect": "Allow",
            "Action": [
                "ssm:TerminateSession",
                "ssm:ResumeSession"
            ],
            "Resource": [
                "arn:aws:ssm:*:*:session/${aws:userid}-*"
            ]
        }
    ]
}
```

------

------
#### [ セッションマネージャー, CLI, and Amazon EC2 ]

管理者が Session Manager コンソール、AWS CLI、Amazon EC2 コンソールからセッション関連のタスクを実行できるようにするには、このサンプルポリシーを使用します。

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "ssm:StartSession",
                "ssm:SendCommand"
            ],
            "Resource": [
                "arn:aws:ec2:us-east-1:111122223333:instance/*"
            ],
            "Condition": {
                "StringLike": {
                    "ssm:resourceTag/tag-key": [
                        "tag-value"
                    ]
                }
            }
        },
        {
         "Effect": "Allow",
         "Action": ["ssmmessages:OpenDataChannel"],
         "Resource": ["arn:aws:ssm:*:*:session/${aws:userid}-*"]
       },
        {
            "Effect": "Allow",
            "Action": [
                "ssm:DescribeSessions",
                "ssm:GetConnectionStatus",
                "ssm:DescribeInstanceInformation",
                "ssm:DescribeInstanceProperties",
                "ec2:DescribeInstances"
            ],
            "Resource": "*"
        },
        {
            "Effect": "Allow",
            "Action": [
                "ssm:CreateDocument",
                "ssm:UpdateDocument",
                "ssm:GetDocument",
                "ssm:StartSession"
            ],
            "Resource": "arn:aws:ssm:us-east-1:111122223333:document/SSM-SessionManagerRunShell"
        },
        {
            "Effect": "Allow",
            "Action": [
                "ssm:TerminateSession",
                "ssm:ResumeSession"
            ],
            "Resource": [
                "arn:aws:ssm:*:*:session/${aws:userid}-*"
            ]
        }
    ]
}
```

------

------

**注記**  
ユーザーが Amazon EC2 コンソールからセッションを開始しようとする際、最初に SSM Agent を更新するためのコマンドを送信する必要がある場合は、[https://docs.aws.amazon.com/systems-manager/latest/APIReference/API_SendCommand.html](https://docs.aws.amazon.com/systems-manager/latest/APIReference/API_SendCommand.html) のアクセス許可が必要です。

# Session Manager の追加サンプル IAM ポリシー
<a name="getting-started-restrict-access-examples"></a>

サポートする Session Manager ユーザーのアクセスシナリオ用のカスタム AWS Identity and Access Management (IAM) ポリシーの作成に役立つ、次のサンプルポリシーを参照してください。

**Topics**
+ [例 1: コンソールでドキュメントへのアクセスを許可する](#grant-access-documents-console-example)
+ [例 2: 特定のマネージドノードへのアクセスを制限](#restrict-access-example-instances)
+ [例 3: タグに基づいてアクセスを制限](#restrict-access-example-instance-tags)
+ [例 4: ユーザーが開始したセッションのみを終了できるようにする](#restrict-access-example-user-sessions)
+ [例 5: すべてのセッションにフル (管理) アクセスを許可する](#restrict-access-example-full-access)

## 例 1: コンソールでドキュメントへのアクセスを許可する
<a name="grant-access-documents-console-example"></a>

ユーザーが Session Manager コンソールを使用してセッションを開始する場合、カスタムドキュメントを指定できるようにすることができます。次の IAM ポリシーの例では、指定された AWS リージョン および AWS アカウント で **SessionDocument-** で始まる名前のドキュメントにアクセスする許可を付与します。

このポリシーを使用するには、独自の情報を含むそれぞれの*リソースプレースホルダーの例*を置き換えます。

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "ssm:GetDocument",
                "ssm:ListDocuments"
            ],
            "Resource": [
                "arn:aws:ssm:us-east-1:111122223333:document/SessionDocument-*"
            ]
        }
    ]
}
```

------

**注記**  
Session Manager コンソールは、セッションプリファレンスの定義に使用される `Standard_Stream` の `sessionType` を持つセッションドキュメントのみをサポートします。詳細については、「[セッションドキュメントスキーマ](session-manager-schema.md)」を参照してください。

## 例 2: 特定のマネージドノードへのアクセスを制限
<a name="restrict-access-example-instances"></a>

Session Manager を使用して、ユーザーが接続できるマネージドノードを定義する IAM ポリシーを作成できます。例えば、次のポリシーは、特定の 3 つのノードでセッションを開始、終了、再開するアクセス許可をユーザーに付与します。このポリシーは、指定されたノード以外のノードにユーザーが接続することを制限します。

**注記**  
フェデレーテッドユーザーについては、「[例 4: ユーザーが開始したセッションのみを終了できるようにする](#restrict-access-example-user-sessions)」を参照してください。

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "ssm:StartSession"
            ],
            "Resource": [
                "arn:aws:ec2:us-east-1:111122223333:instance/i-1234567890EXAMPLE",
                "arn:aws:ec2:us-east-1:111122223333:instance/i-abcdefghijEXAMPLE",
                "arn:aws:ec2:us-east-1:111122223333:instance/i-0e9d8c7b6aEXAMPLE",
                "arn:aws:ssm:us-east-1:111122223333:document/SSM-SessionManagerRunShell"
            ]
        },
        {
         "Effect": "Allow",
         "Action": ["ssmmessages:OpenDataChannel"],
         "Resource": ["arn:aws:ssm:*:*:session/${aws:userid}-*"]
       },
        {
            "Effect": "Allow",
            "Action": [
                "ssm:TerminateSession",
                "ssm:ResumeSession"
            ],
            "Resource": [
                "arn:aws:ssm:*:*:session/${aws:userid}-*"
            ]
        },
        {
         "Effect": "Allow",
         "Action": ["ssmmessages:OpenDataChannel"],
         "Resource": ["arn:aws:ssm:*:*:session/${aws:userid}-*"]
       }
    ]
}
```

------

## 例 3: タグに基づいてアクセスを制限
<a name="restrict-access-example-instance-tags"></a>

特定のタグに基づいてマネージドノードへのアクセスを制限できます。以下の例では、ノードが財務ウェブサーバー (`ssm:resourceTag/Finance: WebServer`) であるという条件で、ユーザーは任意のマネージドノード (`Resource: arn:aws:ec2:region:987654321098:instance/*`) にセッション (`Effect: Allow, Action: ssm:StartSession, ssm:ResumeSession`) の開始と再開することが許可されます。ユーザーがタグ付けされていない、または`Finance: WebServer` 以外のタグ付けされた　マネージドノードにコマンドを送信した場合、コマンド結果に `AccessDenied` が含まれます。

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "ssm:StartSession"
            ],
            "Resource": [
                "arn:aws:ec2:us-east-1:111122223333:instance/*"
            ],
            "Condition": {
                "StringLike": {
                    "ssm:resourceTag/Finance": [
                        "WebServers"
                    ]
                }
            }
        },
        {
         "Effect": "Allow",
         "Action": ["ssmmessages:OpenDataChannel"],
         "Resource": ["arn:aws:ssm:*:*:session/${aws:userid}-*"]
       },
        {
            "Effect": "Allow",
            "Action": [
                "ssm:TerminateSession",
                "ssm:ResumeSession"
            ],
            "Resource": [
                "arn:aws:ssm:*:*:session/${aws:userid}-*"
            ]
        },
        {
            "Effect": "Allow",
            "Action": [
                "ssm:StartSession"
            ],
            "Resource": [
                "arn:aws:ssm:us-east-1:111122223333:document/SSM-SessionManagerRunShell"
            ]
        }
    ]
}
```

------

複数のタグが付いたマネージドノードに対してユーザーがセッションを開始することを許可するIAM ポリシーを作成できます。以下のポリシーは、指定されたタグが両方とも適用されたマネージドノードに対してユーザーがセッションを開始することを許可します。ユーザーがこれら両方のタグが付いていないマネージドノードにコマンドを送信した場合、コマンド結果に `AccessDenied` が含まれます。

------
#### [ JSON ]

****  

```
{
   "Version":"2012-10-17",		 	 	 
   "Statement":[
      {
         "Effect":"Allow",
         "Action":[
            "ssm:StartSession"
         ],
         "Resource":"*",
         "Condition":{
            "StringLike":{
               "ssm:resourceTag/tag-key1":[
                  "tag-value1"
               ],
               "ssm:resourceTag/tag-key2":[
                  "tag-value2"
               ]
            }
         }
      },
      {
         "Effect": "Allow",
         "Action": ["ssmmessages:OpenDataChannel"],
         "Resource": ["arn:aws:ssm:*:*:session/${aws:userid}-*"]
       },
      {
            "Effect": "Allow",
            "Action": [
                "ssm:StartSession"
            ],
            "Resource": [
                "arn:aws:ssm:us-east-1:111122223333:document/SSM-SessionManagerRunShell"
            ]
      }
   ]
}
```

------

IAM ポリシーの作成の詳細については、「*IAM ユーザーガイド*」の「[マネージドポリシーとインラインポリシー](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_managed-vs-inline.html)」を参照してください。マネージドノードへのタグ付けの詳細については、「*Amazon EC2 ユーザーガイド*」(内容は Windows と Linux のマネージドノードに適用) の「[Amazon EC2 リソースのタグ付け](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/Using_Tags.html)」を参照してください。マネージドノードで許可されていないルートレベルのコマンドに対するセキュリティ体制の強化方法の詳細については、 [SSM Agent を介してルートレベルコマンドへのアクセスを制限する](ssm-agent-restrict-root-level-commands.md) をご参照ください

## 例 4: ユーザーが開始したセッションのみを終了できるようにする
<a name="restrict-access-example-user-sessions"></a>

Session Manager では、AWS アカウント のフェデレーションユーザーがどのセッションを終了できるかを制御するために、2 つの方法を使用できます。
+ AWS Identity and Access Management (IAM) アクセス権限ポリシーで変数 `{aws:userid}` を使用します。フェデレーションユーザーは、開始したセッションのみを終了できます。非フェデレーティッドユーザーの場合は、方法 1 を使用します。フェデレーティッドユーザーの場合は、方法 2 を使用します。
+ IAM アクセス許可ポリシーで AWS タグによって提供されたタグを使用します。このポリシーには、 によって提供された特定のタグでタグ付けされたセッションのみをユーザーが終了できるようにする条件を含めますAWS この方法は、フェデレーション ID を使用して へのアクセスを許可するものを含めて、すべてのアカウントで機能しますAWS

### 方法 1: 変数 `{aws:username}` を使用して TerminateSession 権限を付与する
<a name="restrict-access-example-user-sessions-username"></a>

次の IAM ポリシーでは、ユーザーはアカウントのすべてのセッションの ID を表示できます。ただし、ユーザーは開始したセッションでのみマネージドノードとインタラクトできます。次のポリシーが割り当てられているユーザーは、他のユーザーのセッションに接続したり、終了させることはできません。ポリシーは、このために変数 `{aws:username}` を使用します。

**注記**  
この方法は、フェデレーション ID を使用して AWS へのアクセスを許可するアカウントでは機能しません。

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Action": [
                "ssm:DescribeSessions"
            ],
            "Effect": "Allow",
            "Resource": [
                "*"
            ]
        },
        {
            "Action": [
                "ssm:TerminateSession"
            ],
            "Effect": "Allow",
            "Resource": [
                "arn:aws:ssm:*:*:session/${aws:username}-*"
            ]
        }
    ]
}
```

------

### 方法 2: が提供するタグを使用して TerminateSession 権限を付与するAWS
<a name="restrict-access-example-user-sessions-tags"></a>

IAM ポリシーに条件タグキー変数を含めることで、ユーザーが終了できるセッションを管理できます。この条件では、ユーザーがこれらの特定のタグキー変数と指定された値のいずれかまたは両方でタグ付けされたセッションのみを終了できることを指定します。

AWS アカウント のユーザーがセッションを開始すると、Session Manager は 2 つのリソースタグをセッションに適用します。最初のリソースタグは `aws:ssmmessages:target-id` で、ユーザーが終了できるターゲットの ID を指定します。もう 1 つのリソースタグは `aws:ssmmessages:session-id` で、`role-id:caller-specified-role-name` 形式の値を持ちます。

**注記**  
Session Manager は、この IAM アクセス制御ポリシーのカスタムタグをサポートしていません。以下に説明する、AWS が提供するリソースタグを使用する必要があります。

 ** `aws:ssmmessages:target-id` **   
このタグキーでポリシーの値としてマネージドノード ID を含めます。以下のポリシーブロックでは、この条件ステートメントはユーザーが 「i-02573cafcfEXAMPLE」 のノードのみを終了することを許可します。    
****  

```
{
     "Version":"2012-10-17",		 	 	 
     "Statement": [
         {
             "Effect": "Allow",
             "Action": [
                "ssm:TerminateSession"
             ],
             "Resource": "*",
             "Condition": {
                 "StringLike": {
                     "ssm:resourceTag/aws:ssmmessages:target-id": [
                        "i-02573cafcfEXAMPLE"
                     ]
                 }
             }
         }
     ]
}
```
この `TerminateSession` アクセス許可が付与されていないセッションをユーザーが終了しようとすると、`AccessDeniedException` エラーが発生します。

 ** `aws:ssmmessages:session-id` **   
このタグキーには、セッションを開始するリクエストの値として、セッション ID の変数が含まれます。  
次の例は、発信者のタイプが `User` である場合のポリシーを示しています。`aws:ssmmessages:session-id` に指定する値は、ユーザーの ID です。この例では、`AIDIODR4TAW7CSEXAMPLE` は AWS アカウント のユーザーの ID を表します。AWS アカウント のユーザーの ID を取得するには、IAM コマンド `get-user` を使用します。詳細については、*IAM ユーザーガイド*の「AWS Identity and Access Management」セクションの「[get-user](https://docs.aws.amazon.com/IAM/latest/UserGuide/get-user.html)」を参照してください 。    
****  

```
{
     "Version":"2012-10-17",		 	 	 
     "Statement": [
         {
             "Effect": "Allow",
             "Action": [
                "ssm:TerminateSession"
             ],
             "Resource": "*",
             "Condition": {
                 "StringLike": {
                     "ssm:resourceTag/aws:ssmmessages:session-id": [
                        "AIDIODR4TAW7CSEXAMPLE"
                     ]
                 }
             }
         }
     ]
}
```
次の例は、発信者のタイプが `AssumedRole` である場合のポリシーを示しています。`{aws:userid}` 変数は、`aws:ssmmessages:session-id` に指定する値として使用できます。または、`aws:ssmmessages:session-id` に指定する値としてロール ID をハードコードすることもできます。ロール ID をハードコードする場合は、`role-id:caller-specified-role-name` 形式で値を指定する必要があります。例えば、`AIDIODR4TAW7CSEXAMPLE:MyRole`。  
システムタグを適用するには、指定するロール ID には、Unicode 文字、0～9、スペース、`_`、`.`、`:`、`/`、`=`、`+`、`-`、`@`、および `\` のみを含めることができます。
AWS アカウント のロールのロール ID を取得するには、`get-caller-identity` コマンドを使用します。詳細については、 AWS CLI コマンドリファレンスの「[get-caller-identity](https://docs.aws.amazon.com/cli/latest/reference/sts/get-caller-identity.html)」を参照してください。    
****  

```
{
     "Version":"2012-10-17",		 	 	 
     "Statement": [
         {
             "Effect": "Allow",
             "Action": [
                "ssm:TerminateSession"
             ],
             "Resource": "*",
             "Condition": {
                 "StringLike": {
                     "ssm:resourceTag/aws:ssmmessages:session-id": [
                        "${aws:userid}*"
                     ]
                 }
             }
         }
     ]
}
```
この `TerminateSession` アクセス許可が付与されていないセッションをユーザーが終了しようとすると、`AccessDeniedException` エラーが発生します。

**`aws:ssmmessages:target-id`** および **`aws:ssmmessages:session-id`**   
また、この例に示すように、両方のシステムタグでタグ付けされたセッションをユーザーが終了できるようにする IAM ポリシーを作成することもできます。    
****  

```
{
   "Version":"2012-10-17",		 	 	 
   "Statement":[
      {
         "Effect":"Allow",
         "Action":[
            "ssm:TerminateSession"
         ],
         "Resource":"*",
         "Condition":{
            "StringLike":{
               "ssm:resourceTag/aws:ssmmessages:target-id":[
                  "i-02573cafcfEXAMPLE"
               ],
               "ssm:resourceTag/aws:ssmmessages:session-id":[
                  "${aws:userid}*"
               ]
            }
         }
      }
   ]
}
```

## 例 5: すべてのセッションにフル (管理) アクセスを許可する
<a name="restrict-access-example-full-access"></a>

以下の IAM ポリシーは、すべてのユーザーがすべてのノード用に作成したすべてのマネージドノードとすべてのセッションに対して、ユーザーが完全にインタラクトすることを許可します。組織の Session Manager のアクティビティを完全に制御する必要がある管理者にのみ付与されます。

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Action": [
                "ssm:StartSession",
                "ssm:TerminateSession",
                "ssm:ResumeSession",
                "ssm:DescribeSessions",
                "ssm:GetConnectionStatus"
            ],
            "Effect": "Allow",
            "Resource": [
                "*"
            ]
        },
        {
         "Effect": "Allow",
         "Action": ["ssmmessages:OpenDataChannel"],
         "Resource": ["arn:aws:ssm:*:*:session/${aws:userid}-*"]
       }
    ]
}
```

------

# ステップ 4: セッション設定を構成する
<a name="session-manager-getting-started-configure-preferences"></a>

ご使用の AWS Identity and Access Management (IAM) ポリシーで管理者許可を付与されているユーザーは、次のようなセッション設定を設定できます。
+ Linux マネージドノードの場合、Run As サポートを有効にします。これにより、AWS Systems Manager Session Manager がマネージドノード上で作成可能なシステム生成される `ssm-user` アカウントの認証情報の代わりに、指定されたオペレーティングシステムユーザーの認証情報を使用してセッションを開始できるようになります。
+ AWS KMS key 暗号化プログラムを使用するように Session Manager を設定し、クライアントマシンとマネージドノード間で送信されるデータの保護を強化します。
+ セッション履歴ログを作成し、Amazon Simple Storage Service (Amazon S3) バケットまたは Amazon CloudWatch Logs ロググループに送信するように Session Manager を設定します。保存されたログデータを使用して、マネージドノードに対して確立されたセッション接続と、セッション中にそれらのノード上で実行されたコマンドに関するレポートを作成できます。
+ セッションタイムアウトを設定します。この設定を使用して、非アクティブ期間後にセッションを終了するタイミングを指定できます。
+ 設定可能なシェルプロファイルを使用するように Session Manager を設定します。これらのカスタマイズ可能なプロファイルを使用すると、シェルの設定、環境変数、作業ディレクトリ、セッション開始時の複数のコマンドの実行など、セッション内の設定をカスタマイズできます。

Session Manager プリファレンスを設定するために必要な許可の詳細については、「[Session Manager の設定を更新するためのユーザーアクセス許可を付与または拒否する](preference-setting-permissions.md)」を参照してください。

**Topics**
+ [Session Manager の設定を更新するためのユーザーアクセス許可を付与または拒否する](preference-setting-permissions.md)
+ [アイドルセッションのタイムアウト値を指定します。](session-preferences-timeout.md)
+ [最大セッション時間の指定](session-preferences-max-timeout.md)
+ [設定可能なシェルプロファイルを有効にする](session-preferences-shell-config.md)
+ [Linux と macOS のマネージドノードで Run As サポートを有効にする](session-preferences-run-as.md)
+ [セッションデータの KMS キー暗号化を有効にする (コンソール)](session-preferences-enable-encryption.md)
+ [Session Manager プリファレンスドキュメントを作成する (コマンドライン)](getting-started-create-preferences-cli.md)
+ [Session Manager 設定の更新 (コマンドライン)](getting-started-configure-preferences-cli.md)

Systems Manager コンソールを使用してセッションデータのログを記録するオプションを設定する方法については、次のトピックを参照してください。
+  [Amazon S3 を使用してセッションデータをログ記録する (コンソール)](session-manager-logging-s3.md) 
+  [Amazon CloudWatch Logs を使用してセッションデータをストリーミングする (コンソール)](session-manager-logging-cwl-streaming.md) 
+  [Amazon CloudWatch Logs を使用してセッションデータをログ記録する (コンソール)](session-manager-logging-cloudwatch-logs.md) 

# Session Manager の設定を更新するためのユーザーアクセス許可を付与または拒否する
<a name="preference-setting-permissions"></a>

アカウントの設定は、各 AWS リージョン の AWS Systems Manager (SSM) ドキュメントとして保存されます。アカウント内のセッションのアカウント設定を更新するには、その設定が保存されている SSM ドキュメントのタイプにアクセスするために必要なアクセス権限を得ている必要があります。これらのアクセス権限は、AWS Identity and Access Management (IAM) ポリシーによって付与されます。

**設定を作成および更新できる管理者ポリシー**  
管理者は、設定を随時作成して更新するために、次のポリシーを持つことができます。次のポリシーは、us-east-2 アカウント 123456789012 にある `SSM-SessionManagerRunShell` ドキュメントにアクセスして更新するアクセス許可を許可します。

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Action": [
                "ssm:CreateDocument",
                "ssm:GetDocument",
                "ssm:UpdateDocument",
                "ssm:DeleteDocument"
            ],
            "Effect": "Allow",
            "Resource": [
                "arn:aws:ssm:us-east-1:111122223333:document/SSM-SessionManagerRunShell"
            ]
        }
    ]
}
```

------

**設定が更新されないようにするユーザーポリシー**  
次のポリシーを使用して、アカウントのエンドユーザーが Session Manager の設定を更新または上書きしないようにします。

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Action": [
                "ssm:CreateDocument",
                "ssm:GetDocument",
                "ssm:UpdateDocument",
                "ssm:DeleteDocument"
            ],
            "Effect": "Deny",
            "Resource": [
                "arn:aws:ssm:us-east-1:111122223333:document/SSM-SessionManagerRunShell"
            ]
        }
    ]
}
```

------

# アイドルセッションのタイムアウト値を指定します。
<a name="session-preferences-timeout"></a>

Session Manager は、システムがセッションを終了する前にユーザーを非アクティブにする時間を指定するための、AWS Systems Manager のツールです。デフォルトでは、セッションは 20 分間非アクティブになった後にタイムアウトします。この設定を変更して、セッションが非アクティブ状態の 1～60 分の間にタイムアウトするように指定できます。一部のコンピューティングセキュリティに関する専門機関は、アイドルセッションのタイムアウトを最大でも 15 分に設定することを推奨しています。

アイドルセッションのタイムアウトタイマーは、クライアント側からの入力を Session Manager 受信するとリセットされます。これらの入力には、以下が含まれますが、これらに限定されません。
+ ターミナルでのキーボード入力
+ ターミナルまたはブラウザウィンドウのサイズ変更イベント
+ セッション再接続 (ResumeSession)。ネットワーク中断、ブラウザタブ管理、または WebSocket 切断によって発生する可能性があります

これらのイベントはアイドルタイマーをリセットするため、直接的なターミナルコマンドがなくても、セッションは設定されたタイムアウト期間よりも長くアクティブな状態を維持する可能性があります。

セキュリティ要件により、アクティビティの有無にかかわらず厳格なセッション有効期限が義務付けられている場合は、アイドルタイムアウトに加えて *「最大セッション期間」* 設定を使用してください。詳細については、「[最大セッション時間の指定](session-preferences-max-timeout.md)」を参照してください。

**アイドルセッションタイムアウトを有効にするには (コンソール)**

1. AWS Systems Manager コンソール ([https://console.aws.amazon.com/systems-manager/](https://console.aws.amazon.com/systems-manager/)) を開きます。

1. ナビゲーションペインで、**[Session Manager]** を選択します。

1. [**Preferences (設定)**] タブを選択してから、[**Edit (編集)**] を選択します。

1. [**Idle session timeout (アイドルセッションタイムアウト)] の [**分**] フィールドで、セッションが終了するまでのユーザを非アクティブにする時間を指定します**。

1. **[保存]** を選択します。

# 最大セッション時間の指定
<a name="session-preferences-max-timeout"></a>

AWS Systems Manager のツールである Session Manager は、セッションが終了するまでの最大時間を指定すること実現します。デフォルトでは、セッションの最大期間はありません。最大セッション時間に指定する値は、1 から 1,440 分の間である必要があります。

**最大セッション時間 (コンソール) の指定方法**

1. AWS Systems Manager コンソール ([https://console.aws.amazon.com/systems-manager/](https://console.aws.amazon.com/systems-manager/)) を開きます。

1. ナビゲーションペインで、**[Session Manager]** を選択します。

1. **[設定]** タブを選択してから、**[編集]** を選択します。

1. **最大セッション時間の有効化**の隣のチェックボックスをオンにします。

1. セッションが終了するまでの最大時間を**最大セッション時間**の下にある **[minutes]** (分) フィールドで指定します。

1. **[保存]** を選択します。

# 設定可能なシェルプロファイルを有効にする
<a name="session-preferences-shell-config"></a>

デフォルトでは、Linux 用 EC2 インスタンス上のセッションは Bourne シェル (sh) を使用して開始します。ただし、bash のような別のシェルを使用することを好む人もいます。設定可能なシェルプロファイルを有効にすると、シェルの設定、環境変数、作業ディレクトリ、セッション開始時の複数のコマンドの実行など、セッション内の設定をカスタマイズできます。

**重要**  
Systems Manager は、実行前にインスタンスにどのような変更が加えられるかを確認するために、シェルプロファイル内のコマンドやスクリプトをチェックしません。シェルプロファイルに入力されたコマンドやスクリプトのユーザーによる変更を制限するため、次の操作を推奨します。  
AWS Identity and Access Management (IAM) ユーザーおよびロール用にカスタマイズされたセッションタイプのドキュメントを作成します。次に、これらのユーザーとロールの IAM ポリシーを変更して、`StartSession` API オペレーションがユーザー用に作成したセッションタイプのドキュメントのみを使用できるようにします。詳細については、「[Session Manager プリファレンスドキュメントを作成する (コマンドライン)](getting-started-create-preferences-cli.md)」および「[クイックスタート Session Manager のエンドユーザーポリシー](getting-started-restrict-access-quickstart.md#restrict-access-quickstart-end-user)」を参照してください。
IAM ユーザーおよびロールの IAM ポリシーを変更して、作成するセッションタイプのドキュメントリソースについて `UpdateDocument` API オペレーションへのアクセスを拒否します。これにより、ユーザーとロールは、設定の変更を許可されることなく、作成したドキュメントをセッションの環境設定に使用できます。

**設定可能なシェルプロファイルを有効にするには**

1. AWS Systems Manager コンソール ([https://console.aws.amazon.com/systems-manager/](https://console.aws.amazon.com/systems-manager/)) を開きます。

1. ナビゲーションペインで、**[Session Manager]** を選択します。

1. [**Preferences (設定)**] タブを選択してから、[**Edit (編集)**] を選択します。

1. 該当するオペレーティングシステムのフィールドで、セッションの開始時に実行する環境変数、シェル環境設定、またはコマンドを指定します。

1. [**Save**] を選択します。

シェルプロファイルに追加できるコマンドの例を次に示します。

Linux インスタンスで bash シェルに移動し、/usr ディレクトリに移動します。

```
exec /bin/bash
cd /usr
```

セッションの開始時にタイムスタンプと「ようこそ」メッセージを出力します。

------
#### [ Linux & macOS ]

```
timestamp=$(date '+%Y-%m-%dT%H:%M:%SZ')
user=$(whoami)
echo $timestamp && echo "Welcome $user"'!'
echo "You have logged in to a production instance. Note that all session activity is being logged."
```

------
#### [  Server   ]

```
$timestamp = (Get-Date).ToString("yyyy-MM-ddTH:mm:ssZ")
$splitName = (whoami).Split("\")
$user = $splitName[1]
Write-Host $timestamp
Write-Host "Welcome $user!"
Write-Host "You have logged in to a production instance. Note that all session activity is being logged."
```

------

セッション開始時の動的システムアクティビティを表示します。

------
#### [ Linux & macOS ]

```
top
```

------
#### [  Server   ]

```
while ($true) { Get-Process | Sort-Object -Descending CPU | Select-Object -First 30; `
Start-Sleep -Seconds 2; cls
Write-Host "Handles  NPM(K)    PM(K)      WS(K) VM(M)   CPU(s)     Id ProcessName"; 
Write-Host "-------  ------    -----      ----- -----   ------     -- -----------"}
```

------

# Linux と macOS のマネージドノードで Run As サポートを有効にする
<a name="session-preferences-run-as"></a>

デフォルトでは、Session Manager がマネージドノード上でシステムによって生成された `ssm-user` アカウントの認証情報を使用して接続を認証します。(Linux および macOS マシンでは、このアカウントは `/etc/sudoers/` に追加されます)。必要に応じて、代わりにオペレーティングシステム (OS) ユーザーアカウントの認証情報、または Active Directory に参加しているインスタンスのドメインユーザーの認証情報を使用してセッションを認証することもできます。この場合、Session Manager は、セッションを開始する前に、指定した OS アカウントがノードまたはドメイン内に存在することを確認します。ノードまたはドメイン内に存在しない OS アカウントを使用してセッションを開始しようとすると、接続に失敗します。

**注記**  
Session Manager では、オペレーティングシステムの `root` ユーザーアカウントを使用して接続を認証することはできません。OS ユーザーアカウントを使用して認証されるセッションでは、ログイン制限やシステムリソースの使用制限など、ノードの OS レベルのポリシーやディレクトリのポリシーが適用されない場合があります。

**仕組み**  
セッションの Run As サポートを有効にすると、システムによってアクセス許可が次のように確認されます。

1. セッションを開始しているユーザーである場合、IAM エンティティ (ユーザーまたはロール) に `SSMSessionRunAs = os user account name` タグが付いていますか?

   「はい」の場合、マネージドノードに OS ユーザー名が存在していますか? 存在する場合は、セッションを開始します。存在しない場合は、セッションの開始を許可しないでください。

   IAM エンティティに `SSMSessionRunAs = os user account name` タグが付いていない場合は、ステップ 2 に進みます。

1. IAM エンティティに `SSMSessionRunAs = os user account name` タグが付いていない場合、AWS アカウント の Session Manager の詳細設定で OS ユーザー名が指定されていますか?

   「はい」の場合、マネージドノードに OS ユーザー名が存在していますか? 存在する場合は、セッションを開始します。存在しない場合は、セッションの開始を許可しないでください。

**注記**  
Run As サポートを有効にすると、Session Manager がマネージドノードの `ssm-user` アカウントを使用してセッションを開始することができなくなります。つまり、Session Manager が、指定された OS ユーザーアカウントを使用して接続に失敗しても、デフォルトの方法を使用した接続にはフォールバックしません。  
OS アカウントを指定したり、IAM エンティティをタグ付けしたりせずに Run As をアクティブ化し、Session Manager の詳細設定で OS アカウントを指定していない場合、セッション接続は失敗します。

**Linux と macOS のマネージドノードで Run As サポートを有効にするには**

1. AWS Systems Manager コンソール ([https://console.aws.amazon.com/systems-manager/](https://console.aws.amazon.com/systems-manager/)) を開きます。

1. ナビゲーションペインで、**[Session Manager]** を選択します。

1. **[設定]** タブを選択してから、**[編集]** を選択します。

1. **[Linux インスタンスの Run As サポートを有効にする]** の横にあるチェックボックスをオンにします。

1. 次のいずれかを行います。
   + **[オプション 1]**: **[オペレーティングシステムのユーザー名]** フィールドに、セッション開始時に使用する OS ユーザーアカウント名を入力します。このオプションを使用すると、Session Manager を使用して接続する AWS アカウント 内のすべてのユーザーに対して、すべてのセッションが同じ OS ユーザーによって実行されます。
   + **[オプション 2]** (推奨事項): **[IAM コンソールを開く]** リンクを選択します。ナビゲーションペインで、[**ユーザー**] または [**ロール**] を選択します。タグを追加するエンティティ (ユーザーまたはロール) を選択し、[**タグ**] タブを選択します。キー名に「`SSMSessionRunAs`」と入力します。キー値に対応する OS ユーザーアカウント名を入力します。**[Save changes]** (変更の保存) をクリックします。

     このオプションを使用すると、必要に応じて、さまざまな IAM エンティティに固有の OS ユーザーを指定できます。IAM エンティティ (ユーザーまたはロール) のタグ付けの詳細については、「*IAM ユーザーガイド*」の「[IAM リソースのタグ付け](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_tags.html)」を参照してください。

     以下に例を示します。  
![\[Session Manager Run As アクセス許可のタグを指定したスクリーンショット。\]](http://docs.aws.amazon.com/ja_jp/systems-manager/latest/userguide/images/ssn-run-as-tags.png)

1. **[保存]** を選択します。

# セッションデータの KMS キー暗号化を有効にする (コンソール)
<a name="session-preferences-enable-encryption"></a>

AWS Key Management Service (AWS KMS)を使用して暗号化キーを作成および管理します。AWS KMS では、幅広い AWS のサービスおよびアプリケーションでの暗号化の使用を制御できます。マネーマネージドノードと AWS アカウント 内のユーザーのローカルマシン間で送信されるセッションデータが、KMS キー暗号化プログラムで暗号化されることを指定できます。(これは AWS が既にデフォルトで提供している TLS 1.2/1.3 暗号化に追加されています)。Session Manager セッションデータを暗号化するには、AWS KMS を使用して対称 KMS キーを作成します。

AWS KMS 暗号化は `Standard_Stream`、`InteractiveCommands`、`NonInteractiveCommands` セッションタイプで使用できます。AWS KMS で作成したキーでセッションデータを暗号化するオプションを使用する場合、AWS Systems Manager SSM Agent におけるバージョンが 2.3.539.0 以降がマネージドノードにインストールされている必要があります。

**注記**  
AWS Systems Manager コンソールからマネージドノードのパスワードをリセットするため、AWS KMS 暗号化を有効にする必要があります。詳細については、「[マネージドノードでパスワードをリセットする](fleet-manager-reset-password.md#managed-instance-reset-a-password)」を参照してください。

 に作成したキーを使用できますAWS アカウント また、別の で作成されたキーを使用することもできますAWS アカウント 別の AWS アカウント でのキーの作成者はキーを使用するために必要なアクセス許可をユーザーに提供する必要があります。

セッションデータの KMS キー暗号化を有効にすると、セッションを開始するユーザーとそのユーザーが接続するマネージドノードの両方が、キーを使用する許可が必要になります。AWS Identity and Access Management (IAM) ポリシーを使用して、Session Manager で KMS キーを使用するアクセス許可を付与します。詳細については、以下のトピックを参照してください。
+ アカウント内のユーザーに AWS KMS アクセス権限を追加します: [Session Manager のサンプル IAM ポリシー](getting-started-restrict-access-quickstart.md)。
+ アカウント内のマネージドノードに AWS KMS 権限を追加します: [ステップ 2: Session Manager のインスタンスのアクセス権限の確認または追加](session-manager-getting-started-instance-profile.md)。

KMS キーの作成と管理の詳細については、[https://docs.aws.amazon.com/kms/latest/developerguide/](https://docs.aws.amazon.com/kms/latest/developerguide/)を参照してください。

AWS CLI を使用してアカウントのセッションデータの KMS キー暗号化を有効にする方法については、「[Session Manager 設定の更新 (コマンドライン)](getting-started-configure-preferences-cli.md)」または「[Session Manager プリファレンスドキュメントを作成する (コマンドライン)](getting-started-create-preferences-cli.md)」を参照してください。

**注記**  
KMS キーの使用には料金が発生します。詳細については、「[AWS Key Management Service の料金表](https://aws.amazon.com/kms/pricing/)」を参照してください。

**セッションデータの KMS キー暗号化を有効にするには (コンソール)**

1. AWS Systems Manager コンソール ([https://console.aws.amazon.com/systems-manager/](https://console.aws.amazon.com/systems-manager/)) を開きます。

1. ナビゲーションペインで、**[Session Manager]** を選択します。

1. **[設定]** タブを選択してから、**[編集]** を選択します。

1. **KMS 暗号化を有効にする**の隣のチェックボックスをオンにします。

1. 次のいずれかを行います。
   + [**現在のアカウントの KMS キーを選択**] の横にあるボタンを選択して、リストからキーを選択します。

     -または-

     [**KMS キーエイリアスまたはKMS キー ARN の入力**] の横のボタンをクリックします。現在のアカウントで作成されたキーの KMS キーエイリアスを手動で入力するか、別のアカウントのキーのキー Amazon リソースネーム (ARN) を入力します。次に例を示します。
     + キーエイリアス: `alias/my-kms-key-alias`
     + キー ARN: `arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-12345EXAMPLE`

     -または-

     [**Create new key**] (新しいキーを作成) を選択して、アカウントに新しい KMS キーを作成します。新しいキーを作成した後、[**Preferences (設定)**] タブに戻り、アカウントのセッションデータを暗号化するためのキーを選択します。

   キーの共有の詳細については、*AWS Key Management Service デベロッパーガイド*の[外部 AWS アカウント のキーへのアクセスの許可](https://docs.aws.amazon.com/kms/latest/developerguide/key-policy-modifying.html#key-policy-modifying-external-accounts)を参照してください。

1. **[保存]** を選択します。

# Session Manager プリファレンスドキュメントを作成する (コマンドライン)
<a name="getting-started-create-preferences-cli"></a>

次の手順を使用して、AWS Systems Manager Session Manager セッションのプリファレンスを定義する SSM ドキュメントを作成します。このドキュメントを使用して、データ暗号化、セッション期間、ログ記録などのセッションオプションを設定できます。例えば、Amazon Simple Storage Service (Amazon S3) バケットまたは Amazon CloudWatch Logs ロググループにセッションログデータを格納するかどうかを指定します。AWS アカウント および AWS リージョン のすべてのセッションの一般的なプリファレンスを定義するドキュメントや、個々のセッションのプリファレンスを定義するドキュメントを作成できます。

**注記**  
Session Manager コンソールを使用して、一般的なセッション設定を設定することもできます。

Session Manager プリファレンスの設定に使用するドキュメントには、`Standard_Stream` の `sessionType` が付いている必要があります。これらの Session ドキュメントの詳細については、「[セッションドキュメントスキーマ](session-manager-schema.md)」を参照してください。

コマンドラインを使用して既存の Session Manager 設定を更新する方法については、「[Session Manager 設定の更新 (コマンドライン)](getting-started-configure-preferences-cli.md)」を参照してください。

CloudFormation を使用してセッション設定を作成する方法の例については、*AWS CloudFormationユーザーガイド*で「[Session Manager の設定向けに Systems Manager ドキュメントを作成する](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ssm-document.html#aws-resource-ssm-document--examples)」を参照してください。

**注記**  
この手順では、AWS アカウント レベルで Session Manager プリファレンスを設定するためのドキュメントを作成する方法について説明します。セッションレベルのプリファレンスの設定に使用されるドキュメントを作成するには、ファイル名関連のコマンド入力に `SSM-SessionManagerRunShell` 以外の値を指定します。  
ドキュメントを使用して AWS Command Line Interface (AWS CLI) から開始されるセッションのプリファレンスを設定するには、`--document-name` パラメータ値としてドキュメント名を指定します。Session Manager コンソールから開始したセッションのプリファレンスを設定するには、ドキュメントの名前を入力するか、リストから選択します。

**Session Manager 設定を作成するには (コマンドライン)**

1. `SessionManagerRunShell.json` などの名前でローカルマシンに JSON ファイルを作成し、次の内容を貼り付けます。

   ```
   {
       "schemaVersion": "1.0",
       "description": "Document to hold regional settings for Session Manager",
       "sessionType": "Standard_Stream",
       "inputs": {
           "s3BucketName": "",
           "s3KeyPrefix": "",
           "s3EncryptionEnabled": true,
           "cloudWatchLogGroupName": "",
           "cloudWatchEncryptionEnabled": true,
           "cloudWatchStreamingEnabled": false,
           "kmsKeyId": "",
           "runAsEnabled": false,
           "runAsDefaultUser": "",
           "idleSessionTimeout": "",
           "maxSessionDuration": "",
           "shellProfile": {
               "windows": "date",
               "linux": "pwd;ls"
           }
       }
   }
   ```

   次の例に示すように、値をハードコーディングするのではなく、パラメータを使用してセッション設定に値を渡すこともできます。

   ```
   {
      "schemaVersion":"1.0",
      "description":"Session Document Parameter Example JSON Template",
      "sessionType":"Standard_Stream",
      "parameters":{
         "s3BucketName":{
            "type":"String",
            "default":""
         },
         "s3KeyPrefix":{
            "type":"String",
            "default":""
         },
         "s3EncryptionEnabled":{
            "type":"Boolean",
            "default":"false"
         },
         "cloudWatchLogGroupName":{
            "type":"String",
            "default":""
         },
         "cloudWatchEncryptionEnabled":{
            "type":"Boolean",
            "default":"false"
         }
      },
      "inputs":{
         "s3BucketName":"{{s3BucketName}}",
         "s3KeyPrefix":"{{s3KeyPrefix}}",
         "s3EncryptionEnabled":"{{s3EncryptionEnabled}}",
         "cloudWatchLogGroupName":"{{cloudWatchLogGroupName}}",
         "cloudWatchEncryptionEnabled":"{{cloudWatchEncryptionEnabled}}",
         "kmsKeyId":""
      }
   }
   ```

1. セッションデータを送信する場所を指定します。(オプションでプレフィックスが付いた) S3 バケット名または CloudWatch Logs ロググループ名を指定することができます。ローカルクライアントとマネージドノード間でデータをさらに暗号化する場合、暗号化に使用する KMS キーを指定します。以下に例を示します。

   ```
   {
     "schemaVersion": "1.0",
     "description": "Document to hold regional settings for Session Manager",
     "sessionType": "Standard_Stream",
     "inputs": {
       "s3BucketName": "amzn-s3-demo-bucket",
       "s3KeyPrefix": "MyS3Prefix",
       "s3EncryptionEnabled": true,
       "cloudWatchLogGroupName": "MyLogGroupName",
       "cloudWatchEncryptionEnabled": true,
       "cloudWatchStreamingEnabled": false,
       "kmsKeyId": "MyKMSKeyID",
       "runAsEnabled": true,
       "runAsDefaultUser": "MyDefaultRunAsUser",
       "idleSessionTimeout": "20",
       "maxSessionDuration": "60",
       "shellProfile": {
           "windows": "MyCommands",
           "linux": "MyCommands"
       }
     }
   }
   ```
**注記**  
セッションログデータを暗号化しない場合は、`s3EncryptionEnabled` の「`true`」を「`false`」に変更します。  
Amazon S3 バケットまたは CloudWatch Logs ロググループにログを送信しない場合、アクティブなセッションデータを暗号化しない場合、またはアカウントのセッションの Run As サポートを有効にしない場合は、それらのオプション用に次の行を削除できます。「`inputs`」セクションの最後の行がカンマで終わっていないことを確認してください。  
セッションデータを暗号化するために KMS キー ID を追加する場合、セッションを開始するユーザーとそのユーザーが接続するマネージドノードの両方が、キーを使用する許可が必要になります。IAM ポリシーを通して Session Manager で KMS キーを使用するアクセス許可を付与します。詳細については、以下のトピックを参照してください。  
アカウント内のユーザーに AWS KMS アクセス権限を追加します: [Session Manager のサンプル IAM ポリシー](getting-started-restrict-access-quickstart.md)
アカウント内のマネージドノードに AWS KMS 権限を追加します: [ステップ 2: Session Manager のインスタンスのアクセス権限の確認または追加](session-manager-getting-started-instance-profile.md)。

1. ファイルを保存します。

1. JSON ファイルを作成したディレクトリで、次のコマンドを実行します。

------
#### [ Linux & macOS ]

   ```
   aws ssm create-document \
       --name SSM-SessionManagerRunShell \
       --content "file://SessionManagerRunShell.json" \
       --document-type "Session" \
       --document-format JSON
   ```

------
#### [  Server   ]

   ```
   aws ssm create-document ^
       --name SSM-SessionManagerRunShell ^
       --content "file://SessionManagerRunShell.json" ^
       --document-type "Session" ^
       --document-format JSON
   ```

------
#### [   PowerShell   ]

   ```
   New-SSMDocument `
       -Name "SSM-SessionManagerRunShell" `
       -Content (Get-Content -Raw SessionManagerRunShell.json) `
       -DocumentType "Session" `
       -DocumentFormat JSON
   ```

------

   成功すると、コマンドは以下のような出力を返します。

   ```
   {
       "DocumentDescription": {
           "Status": "Creating",
           "Hash": "ce4fd0a2ab9b0fae759004ba603174c3ec2231f21a81db8690a33eb66EXAMPLE",
           "Name": "SSM-SessionManagerRunShell",
           "Tags": [],
           "DocumentType": "Session",
           "PlatformTypes": [
               "Windows",
               "Linux"
           ],
           "DocumentVersion": "1",
           "HashType": "Sha256",
           "CreatedDate": 1547750660.918,
           "Owner": "111122223333",
           "SchemaVersion": "1.0",
           "DefaultVersion": "1",
           "DocumentFormat": "JSON",
           "LatestVersion": "1"
       }
   }
   ```

# Session Manager 設定の更新 (コマンドライン)
<a name="getting-started-configure-preferences-cli"></a>

以下の手順では、好みのコマンドラインツールを使用して、選択した AWS リージョン で AWS アカウント の AWS Systems Manager Session Manager 設定を変更する方法を説明します。Session Manager の設定を用いて、Amazon Simple Storage Service (Amazon S3) バケットまたは Amazon CloudWatch Logs ロググループにセッションデータを記録するためのオプションを指定します。Session Manager 設定を使用して、セッションデータを暗号化することもできます。

**Session Manager 設定を更新するには (コマンドライン)**

1. `SessionManagerRunShell.json` などの名前でローカルマシンに JSON ファイルを作成し、次の内容を貼り付けます。

   ```
   {
       "schemaVersion": "1.0",
       "description": "Document to hold regional settings for Session Manager",
       "sessionType": "Standard_Stream",
       "inputs": {
           "s3BucketName": "",
           "s3KeyPrefix": "",
           "s3EncryptionEnabled": true,
           "cloudWatchLogGroupName": "",
           "cloudWatchEncryptionEnabled": true,
           "cloudWatchStreamingEnabled": false,
           "kmsKeyId": "",
           "runAsEnabled": true,
           "runAsDefaultUser": "",
           "idleSessionTimeout": "",
           "maxSessionDuration": "",
           "shellProfile": {
               "windows": "date",
               "linux": "pwd;ls"
           }
       }
   }
   ```

1. セッションデータを送信する場所を指定します。(オプションでプレフィックスが付いた) S3 バケット名または CloudWatch Logs ロググループ名を指定することができます。ローカルクライアントとマネージドノード間でデータをさらに暗号化する場合、暗号化に使用する AWS KMS key キーを指定します。以下に例を示します。

   ```
   {
     "schemaVersion": "1.0",
     "description": "Document to hold regional settings for Session Manager",
     "sessionType": "Standard_Stream",
     "inputs": {
       "s3BucketName": "amzn-s3-demo-bucket",
       "s3KeyPrefix": "MyS3Prefix",
       "s3EncryptionEnabled": true,
       "cloudWatchLogGroupName": "MyLogGroupName",
       "cloudWatchEncryptionEnabled": true,
       "cloudWatchStreamingEnabled": false,
       "kmsKeyId": "MyKMSKeyID",
       "runAsEnabled": true,
       "runAsDefaultUser": "MyDefaultRunAsUser",
       "idleSessionTimeout": "20",
       "maxSessionDuration": "60",
       "shellProfile": {
           "windows": "MyCommands",
           "linux": "MyCommands"
       }
     }
   }
   ```
**注記**  
セッションログデータを暗号化しない場合は、`s3EncryptionEnabled` の「`true`」を「`false`」に変更します。  
Amazon S3 バケットまたは CloudWatch Logs ロググループにログを送信しない場合、アクティブなセッションデータを暗号化しない場合、またはアカウントのセッションの Run As サポートを有効にしない場合は、それらのオプション用に次の行を削除できます。「`inputs`」セクションの最後の行がカンマで終わっていないことを確認してください。  
セッションデータを暗号化するために KMS キー ID を追加する場合、セッションを開始するユーザーとそのユーザーが接続するマネージドノードの両方が、キーを使用する許可が必要になります。AWS Identity and Access Management (IAM) ポリシーを使用して、Session Manager で KMS キーを使用するアクセス許可を付与します。詳細については、以下のトピックを参照してください。  
アカウント内のユーザーに AWS KMS アクセス権限を追加します: [Session Manager のサンプル IAM ポリシー](getting-started-restrict-access-quickstart.md)。
アカウント内のマネージドノードに AWS KMS 権限を追加します: [ステップ 2: Session Manager のインスタンスのアクセス権限の確認または追加](session-manager-getting-started-instance-profile.md)。

1. ファイルを保存します。

1. JSON ファイルを作成したディレクトリで、次のコマンドを実行します。

------
#### [ Linux & macOS ]

   ```
   aws ssm update-document \
       --name "SSM-SessionManagerRunShell" \
       --content "file://SessionManagerRunShell.json" \
       --document-version "\$LATEST"
   ```

------
#### [  Server   ]

   ```
   aws ssm update-document ^
       --name "SSM-SessionManagerRunShell" ^
       --content "file://SessionManagerRunShell.json" ^
       --document-version "$LATEST"
   ```

------
#### [   PowerShell   ]

   ```
   Update-SSMDocument `
       -Name "SSM-SessionManagerRunShell" `
       -Content (Get-Content -Raw SessionManagerRunShell.json) `
       -DocumentVersion '$LATEST'
   ```

------

   成功すると、コマンドは以下のような出力を返します。

   ```
   {
       "DocumentDescription": {
           "Status": "Updating",
           "Hash": "ce4fd0a2ab9b0fae759004ba603174c3ec2231f21a81db8690a33eb66EXAMPLE",
           "Name": "SSM-SessionManagerRunShell",
           "Tags": [],
           "DocumentType": "Session",
           "PlatformTypes": [
               "Windows",
               "Linux"
           ],
           "DocumentVersion": "2",
           "HashType": "Sha256",
           "CreatedDate": 1537206341.565,
           "Owner": "111122223333",
           "SchemaVersion": "1.0",
           "DefaultVersion": "1",
           "DocumentFormat": "JSON",
           "LatestVersion": "2"
       }
   }
   ```

# ステップ 5: (オプション) セッションでのコマンドへのアクセスを制限する
<a name="session-manager-restrict-command-access"></a>

カスタム `Session` タイプの AWS Systems Manager (SSM) ドキュメントを使用すると、AWS Systems Manager Session Manager セッションでユーザーが実行できるコマンドを制限できます。ドキュメントでは、ユーザーがセッションを開始したときに実行されるコマンド、およびユーザーがコマンドに指定できるパラメータを定義します。`Session` ドキュメントの `schemaVersion` は 1.0 であり、`sessionType` は `InteractiveCommands` であることが必要です。その後、お客様が定義した `Session` ドキュメントのみへのアクセスをユーザーに許可する AWS Identity and Access Management (IAM) ポリシーを作成できます。IAM ポリシーを使用してセッションでのコマンドへのアクセスを制限する方法の詳細については、「[対話型コマンドの IAM ポリシーの例](#interactive-command-policy-examples)」を参照してください。

`InteractiveCommands` の `sessionType` を持つドキュメントは、AWS Command Line Interface (AWS CLI) から開始されたセッションでのみサポートされます。ユーザーはカスタムドキュメント名を `--document-name` パラメータ値として指定し、`--parameters` オプションを使用して任意のコマンドパラメータ値を指定します。対話型コマンドの実行の詳細については、「[セッションの開始 (対話形式と非対話形式のコマンド)](session-manager-working-with-sessions-start.md#sessions-start-interactive-commands)」を参照してください。

ユーザーに実行を許可するコマンドを定義するカスタムの `Session` タイプの SSM ドキュメントを作成するには以下の手順を使用します。

## セッションでコマンドへのアクセスを制限する (コンソール)
<a name="restrict-command-access-console"></a>

**Session Manager セッションでユーザーが実行できるコマンドを制限するには (コンソール)**

1. AWS Systems Manager コンソール ([https://console.aws.amazon.com/systems-manager/](https://console.aws.amazon.com/systems-manager/)) を開きます。

1. ナビゲーションペインで、[**ドキュメント**] を選択します。

1. [**Create command or session (コマンドまたはセッションの作成)**] を選択します。

1. [**名前**] に、ドキュメントのわかりやすい名前を入力します。

1. [**Document type (ドキュメントタイプ)**] で、[**Session document (セッションドキュメント)**] を選択します。

1. 以下の例に示すように、JSON または YAML を使用して、Session Manager セッションでユーザーが実行できるコマンドを定義するドキュメントコンテンツを入力します。

------
#### [ YAML ]

   ```
   ---
   schemaVersion: '1.0'
   description: Document to view a log file on a Linux instance
   sessionType: InteractiveCommands
   parameters:
     logpath:
       type: String
       description: The log file path to read.
       default: "/var/log/amazon/ssm/amazon-ssm-agent.log"
       allowedPattern: "^[a-zA-Z0-9-_/]+(.log)$"
   properties:
     linux:
       commands: "tail -f {{ logpath }}"
       runAsElevated: true
   ```

------
#### [ JSON ]

   ```
   {
       "schemaVersion": "1.0",
       "description": "Document to view a log file on a Linux instance",
       "sessionType": "InteractiveCommands",
       "parameters": {
           "logpath": {
               "type": "String",
               "description": "The log file path to read.",
               "default": "/var/log/amazon/ssm/amazon-ssm-agent.log",
               "allowedPattern": "^[a-zA-Z0-9-_/]+(.log)$"
           }
       },
       "properties": {
           "linux": {
               "commands": "tail -f {{ logpath }}",
               "runAsElevated": true
           }
       }
   }
   ```

------

1. [**Create document**] を選択します。

## セッションでコマンドへのアクセスを制限する (コマンドライン)
<a name="restrict-command-access-commandline"></a>

**開始する前に**  
まだ AWS Command Line Interface (AWS CLI) または AWS Tools for PowerShell をインストールして設定していない場合は、インストールして設定します。詳細については、「[AWS CLI の最新バージョンをインストールまたは更新します。](https://docs.aws.amazon.com/cli/latest/userguide/getting-started-install.html)」および「[AWS Tools for PowerShell のインストール](https://docs.aws.amazon.com/powershell/latest/userguide/pstools-getting-set-up.html)」を参照してください。

**Session Manager セッションでユーザーが実行できるコマンドを制限するには (コマンドライン)**

1. 以下の例に示すように、Session Manager セッションでユーザーが実行できるコマンドを定義するドキュメントコンテンツの JSON または YAML ファイルを作成します。

------
#### [ YAML ]

   ```
   ---
   schemaVersion: '1.0'
   description: Document to view a log file on a Linux instance
   sessionType: InteractiveCommands
   parameters:
     logpath:
       type: String
       description: The log file path to read.
       default: "/var/log/amazon/ssm/amazon-ssm-agent.log"
       allowedPattern: "^[a-zA-Z0-9-_/]+(.log)$"
   properties:
     linux:
       commands: "tail -f {{ logpath }}"
       runAsElevated: true
   ```

------
#### [ JSON ]

   ```
   {
       "schemaVersion": "1.0",
       "description": "Document to view a log file on a Linux instance",
       "sessionType": "InteractiveCommands",
       "parameters": {
           "logpath": {
               "type": "String",
               "description": "The log file path to read.",
               "default": "/var/log/amazon/ssm/amazon-ssm-agent.log",
               "allowedPattern": "^[a-zA-Z0-9-_/]+(.log)$"
           }
       },
       "properties": {
           "linux": {
               "commands": "tail -f {{ logpath }}",
               "runAsElevated": true
           }
       }
   }
   ```

------

1. 以下のコマンドを実行して、Session Manager セッションでユーザーが実行できるコマンドを定義するコンテンツから、SSM ドキュメントを作成します。

------
#### [ Linux & macOS ]

   ```
   aws ssm create-document \
       --content file://path/to/file/documentContent.json \
       --name "exampleAllowedSessionDocument" \
       --document-type "Session"
   ```

------
#### [  Server   ]

   ```
   aws ssm create-document ^
       --content file://C:\path\to\file\documentContent.json ^
       --name "exampleAllowedSessionDocument" ^
       --document-type "Session"
   ```

------
#### [   PowerShell   ]

   ```
   $json = Get-Content -Path "C:\path\to\file\documentContent.json" | Out-String
   New-SSMDocument `
       -Content $json `
       -Name "exampleAllowedSessionDocument" `
       -DocumentType "Session"
   ```

------

## 対話型コマンドパラメータと AWS CLI
<a name="restrict-command-access-parameters-cli"></a>

AWS CLI を使用する際、対話型のコマンドパラメータを指定する方法はさまざまあります。AWS CLI でマネージドノードに接続する際に使用するクライアントマシンのオペレーティングシステム (OS) によっては、特殊またはエスケープ記号を含むコマンドの構文が異なる場合があります。次の例は、AWS CLI の使用時にコマンドパラメータを指定する方法と、特殊文字またはエスケープ文字の処理方法を示しています。

Parameter Store に保存されたパラメータは、次の例に示すように、 コマンドパラメータの AWS CLI で参照できます。

------
#### [ Linux & macOS ]

```
aws ssm start-session \
    --target instance-id \
    --document-name MyInteractiveCommandDocument \ 
    --parameters '{"command":["{{ssm:mycommand}}"]}'
```

------
#### [  Server   ]

```
aws ssm start-session ^
    --target instance-id ^
    --document-name MyInteractiveCommandDocument ^
    --parameters '{"command":["{{ssm:mycommand}}"]}'
```

------

次の例は、AWS CLI で省略形構文を使用してパラメータを渡す方法を示しています。

------
#### [ Linux & macOS ]

```
aws ssm start-session \
    --target instance-id \
    --document-name MyInteractiveCommandDocument \ 
    --parameters command="ifconfig"
```

------
#### [  Server   ]

```
aws ssm start-session ^
    --target instance-id ^
    --document-name MyInteractiveCommandDocument ^
    --parameters command="ipconfig"
```

------

次の例に示すように、JSONでパラメータを指定することもできます。

------
#### [ Linux & macOS ]

```
aws ssm start-session \
    --target instance-id \
    --document-name MyInteractiveCommandDocument \ 
    --parameters '{"command":["ifconfig"]}'
```

------
#### [  Server   ]

```
aws ssm start-session ^
    --target instance-id ^
    --document-name MyInteractiveCommandDocument ^
    --parameters '{"command":["ipconfig"]}'
```

------

次の例に示すように、パラメータを JSON ファイルに格納し、AWS CLI に提供することもできます。ファイルから AWS CLI パラメータを使用する方法の詳細については、*AWS Command Line Interface ユーザーガイド*の「[ファイルから AWS CLI パラメータをロードする](https://docs.aws.amazon.com/cli/latest/userguide/;cli-usage-parameters-file.html)」を参照してください。

```
{
    "command": [
        "my command"
    ]
}
```

------
#### [ Linux & macOS ]

```
aws ssm start-session \
    --target instance-id \
    --document-name MyInteractiveCommandDocument \ 
    --parameters file://complete/path/to/file/parameters.json
```

------
#### [  Server   ]

```
aws ssm start-session ^
    --target instance-id ^
    --document-name MyInteractiveCommandDocument ^
    --parameters file://complete/path/to/file/parameters.json
```

------

次の例に示すように、JSON 入力ファイルから AWS CLI スケルトンを生成することもできます。JSON 入力ファイルから AWS CLI スケルトンを生成する方法の詳細については、*AWS Command Line Interface ユーザーガイド*の「[JSON または YAML 入力ファイルから AWS CLI スケルトンと入力パラメータを生成する](https://docs.aws.amazon.com/cli/latest/userguide/;cli-usage-skeleton.html)」を参照してください。

```
{
    "Target": "instance-id",
    "DocumentName": "MyInteractiveCommandDocument",
    "Parameters": {
        "command": [
            "my command"
        ]
    }
}
```

------
#### [ Linux & macOS ]

```
aws ssm start-session \
    --cli-input-json file://complete/path/to/file/parameters.json
```

------
#### [  Server   ]

```
aws ssm start-session ^
    --cli-input-json file://complete/path/to/file/parameters.json
```

------

引用符で囲まれた文字をエスケープするには、次の例に示すように、エスケープ文字にバックスラッシュを追加する必要があります。

------
#### [ Linux & macOS ]

```
aws ssm start-session \
    --target instance-id \
    --document-name MyInteractiveCommandDocument \ 
    --parameters '{"command":["printf \"abc\\\\tdef\""]}'
```

------
#### [  Server   ]

```
aws ssm start-session ^
    --target instance-id ^
    --document-name MyInteractiveCommandDocument ^
    --parameters '{"command":["printf \"abc\\\\tdef\""]}'
```

------

AWS CLI のコマンドパラメータで引用符を使用する方法については、*AWS Command Line Interface ユーザーガイド*の「[AWS CLI の文字列で引用符を使用する](https://docs.aws.amazon.com/cli/latest/userguide/;cli-usage-parameters-quoting-strings.html)」を参照してください。

## 対話型コマンドの IAM ポリシーの例
<a name="interactive-command-policy-examples"></a>

お客様が定義した `Session` ドキュメントのみへのアクセスをユーザーに許可する IAM ポリシーを作成できます。これにより、Session Manager セッションでユーザーが実行できるコマンドは、カスタムの `Session` タイプの SSM ドキュメントで定義されたコマンドのみに制限されます。

 **ユーザーに対して 1 つのマネージドノードに 1 つの対話コマンドの実行を許可**     
****  

```
{
   "Version":"2012-10-17",		 	 	 
   "Statement":[
      {
         "Effect":"Allow",
         "Action":"ssm:StartSession",
         "Resource":[
            "arn:aws:ec2:us-east-1:444455556666:instance/i-02573cafcfEXAMPLE",
            "arn:aws:ssm:us-east-1:444455556666:document/allowed-session-document"
         ]
      },
      {
         "Effect": "Allow",
         "Action": ["ssmmessages:OpenDataChannel"],
         "Resource": ["arn:aws:ssm:*:*:session/${aws:userid}-*"]
      }
   ]
}
```

 **ユーザーに対してすべてのマネージドノードに 1 つの対話コマンドの実行を許可**     
****  

```
{
   "Version":"2012-10-17",		 	 	 
   "Statement":[
      {
         "Effect":"Allow",
         "Action":"ssm:StartSession",
         "Resource":[
            "arn:aws:ec2:us-east-1:444455556666:instance/*",
            "arn:aws:ssm:us-east-1:444455556666:document/allowed-session-document"
         ]
      },
      {
         "Effect": "Allow",
         "Action": ["ssmmessages:OpenDataChannel"],
         "Resource": ["arn:aws:ssm:*:*:session/${aws:userid}-*"]
      }
   ]
}
```

 **ユーザーに対してすべてのマネージドノードに複数の対話コマンドの実行を許可**     
****  

```
{
   "Version":"2012-10-17",		 	 	 
   "Statement":[
      {
         "Effect":"Allow",
         "Action":"ssm:StartSession",
         "Resource":[
            "arn:aws:ec2:us-east-1:444455556666:instance/*",
            "arn:aws:ssm:us-east-1:444455556666:document/allowed-session-document",
            "arn:aws:ssm:us-east-1:444455556666:document/allowed-session-document-2"
         ]
      },
      {
         "Effect": "Allow",
         "Action": ["ssmmessages:OpenDataChannel"],
         "Resource": ["arn:aws:ssm:*:*:session/${aws:userid}-*"]
      }
   ]
}
```

# ステップ 6: (オプション) AWS PrivateLink を使用して Session Manager の VPC エンドポイントを設定する
<a name="session-manager-getting-started-privatelink"></a>

インターフェイス Virtual Private Cloud (VPC) エンドポイントを使用するように AWS Systems Manager を設定することにより、マネージドノードのセキュリティ体制をさら改善することができます。インターフェースエンドポイントは、プライベート IP アドレスを使用して Amazon Elastic Compute Cloud (Amazon EC2) および Systems Manager API にプライベートにアクセスできるテクノロジーである AWS PrivateLink を使用しています。

AWS PrivateLink はマネージドノード、Systems Manager、Amazon EC2 とAmazon ネットワーク間のすべてのネットワークトラフィックに制限します。(マネージドノードはインターネットへアクセスできません) また、インターネットゲートウェイ、NAT デバイスあるいは仮想プライベートゲートウェイの必要はありません。

VPC エンドポイントの作成については、詳細については、「[Systems Manager のために VPC エンドポイントを使用して EC2 インスタンスのセキュリティを強化する](setup-create-vpc.md)」を参照してください。

VPC エンドポイントを使用する代わりに、マネージドノードにアウトバウンド・インターネット アクセスを許可することができます。この場合、マネージドノードは、以下のエンドポイントに HTTPS (ポート 443) アウトバウンドトラフィックも許可する必要があります:
+  `ec2messages.region.amazonaws.com` 
+  `ssm.region.amazonaws.com` 
+  `ssmmessages.region.amazonaws.com` 

Systems Manager は、これらのエンドポイント `ssmmessages.region.amazonaws.com` の最後を使用して、SSM Agent からクラウド上の Session Manager サービスを呼び出します。

AWS Key Management Service (AWS KMS) 暗号化のようなオプション機能を使用、Amazon CloudWatch Logs (CloudWatch Logs) へログをストリーミング、 Amazon Simple Storage Service (Amazon S3) へログを送信する場合、以下のエンドポイントに HTTPS (ポート 443) アウトバウンドトラフィックも許可する必要があります:
+  `kms.region.amazonaws.com` 
+  `logs.region.amazonaws.com` 
+  `s3.region.amazonaws.com` 

Systems Manager に必要なエンドポイントの詳細については、「[リファレンス: ec2messages、ssmmessages およびその他の API オペレーション](systems-manager-setting-up-messageAPIs.md)」を参照してください。

# ステップ 7: (オプション) ssm-user アカウントの管理アクセス許可を有効または無効にする
<a name="session-manager-getting-started-ssm-user-permissions"></a>

AWS Systems Manager SSM Agent のバージョン 2.3.50.0 以降では、エージェントは `ssm-user` という名前のローカルユーザーアカウントを作成し、`/etc/sudoers` (Linux および macOS) または管理者グループ (Windows) に追加します。2.3.612.0 より前のエージェントバージョンでは、アカウントはインストール後に SSM Agent が最初に起動または再起動するときに作成されます。バージョン 2.3.612.0 以降の場合、`ssm-user` アカウントはノード上でセッションが最初に開始されたときに作成されます。この `ssm-user` は、AWS Systems Manager Session Manager セッションが開始された時のデフォルトオペレーティングシステム (OS) ユーザーです。SSM Agent のバージョン 2.3.612.0 は 2019 年 5 月 8 日にリリースされました。

Session Manager ユーザーがノード上で管理コマンドを実行できないようにする場合、`ssm-user` アカウントの許可を更新できます。これらのアクセス許可は、削除した後で復元することもできます。

**Topics**
+ [Linux と macOS で ssm-user sudo アカウントの許可を管理する](#ssm-user-permissions-linux)
+ [Windows Server で ssm-user の管理者アカウントのアクセス許可を管理する](#ssm-user-permissions-windows)

## Linux と macOS で ssm-user sudo アカウントの許可を管理する
<a name="ssm-user-permissions-linux"></a>

Linux と macOS のマネージドノードで ssm-user アカウントの sudo 許可を有効または無効にする場合、以下のいずれかの手順を実行します。

**Run Command を使用して ssm-user sudo のアクセス許可を変更する (コンソール)**
+ [コンソールからコマンドを実行する](running-commands-console.md) の手順を次の値で使用します。
  + [**Command document**] (コマンドのドキュメント) で、`AWS-RunShellScript` を選択します。
  + sudo アクセスを削除するには、[**Command parameters (コマンドのパラメータ)**] 領域で、[**コマンド**] ボックスに以下を貼り付けます。

    ```
    cd /etc/sudoers.d
    echo "#User rules for ssm-user" > ssm-agent-users
    ```

    -または-

    sudo アクセスを復元するには、[**Command parameters (コマンドのパラメータ)**] 領域で、[**コマンド**] ボックスに以下を貼り付けます。

    ```
    cd /etc/sudoers.d 
    echo "ssm-user ALL=(ALL) NOPASSWD:ALL" > ssm-agent-users
    ```

**コマンドラインを使用して ssm-user sudo のアクセス許可を変更する (AWS CLI)**

1. マネージドノードに接続して以下のコマンドを実行します。

   ```
   sudo -s
   ```

1. 次のコマンドを使用して、作業ディレクトリを変更します。

   ```
   cd /etc/sudoers.d
   ```

1. 編集する `ssm-agent-users` という名前のファイルを開きます。

1. sudo アクセスを削除するには、次の行を削除します。

   ```
   ssm-user ALL=(ALL) NOPASSWD:ALL
   ```

   -または-

   sudo アクセスを復元するには、次の行を追加します。

   ```
   ssm-user ALL=(ALL) NOPASSWD:ALL
   ```

1. ファイルを保存します。

## Windows Server で ssm-user の管理者アカウントのアクセス許可を管理する
<a name="ssm-user-permissions-windows"></a>

Windows Server のマネージドノードで ssm-user アカウントの 管理者 許可を有効または無効にする場合、以下のいずれかの手順を実行します。

**Run Command を使用して管理者権限を変更する (コンソール)**
+ [コンソールからコマンドを実行する](running-commands-console.md) の手順を次の値で使用します。

  [**Command document**] (コマンドのドキュメント) で、`AWS-RunPowerShellScript` を選択します。

  管理アクセスを削除するには、[**Command parameters (コマンドのパラメータ)**] 領域で、[**コマンド**] ボックスに以下を貼り付けます。

  ```
  net localgroup "Administrators" "ssm-user" /delete
  ```

  -または-

  管理アクセスを復元するには、[**Command parameters (コマンドのパラメータ)**] 領域で、[**コマンド**] ボックスに以下を貼り付けます。

  ```
  net localgroup "Administrators" "ssm-user" /add
  ```

**PowerShell またはコマンドプロンプトウィンドウを使用して管理者許可を変更する**

1. マネージドノードに接続して PowerShell またはコマンドプロンプトのウィンドウを開きます。

1. 管理アクセスを削除するには、次のコマンドを実行します。

   ```
   net localgroup "Administrators" "ssm-user" /delete
   ```

   -または-

   管理アクセスを復元するには、次のコマンドを実行します。

   ```
   net localgroup "Administrators" "ssm-user" /add
   ```

**Windows コンソールを使用して管理者許可を変更する**

1. マネージドノードに接続して PowerShell またはコマンドプロンプトのウィンドウを開きます。

1. コマンドラインから `lusrmgr.msc` を実行して、[**Local Users and Groups (ローカルユーザーとグループ)**] コンソールを開きます。

1. [**Users (ユーザー)**] ディレクトリを開いて、[**ssm-user**] を開きます。

1. [**Member Of (所属するグループ)**] タブで、次のいずれかを実行します。
   + 管理アクセスを削除するには、[**Administrators (管理者)**] を選択し、[**Remove (削除)**] を選択します。

     -または-

     管理アクセスを復元するには、テキストボックスに **Administrators** と入力し、[**追加**] を選択します。

1. [**OK**] を選択します。

# ステップ 8: (オプション) Session Manager を通して SSH 接続のアクセス許可を付与および制御する
<a name="session-manager-getting-started-enable-ssh-connections"></a>

AWS アカウント のユーザーに AWS Command Line Interface (AWS CLI) を使用する許可を付与して、AWS Systems Manager の Session Manager が適用されたマネージドノードに Secure Shell (SSH) 接続を確立できるようにします。SSH で接続するユーザーは Secure Copy Protocol (SCP) を使用して自分のローカルマシンとマネージドノード間でファイルをコピーすることもできます。この機能を使って、インバウンドポートを開いたり、踏み台ホストを維持したりすることなく、マネージドノードへ接続できます。

 Session Manager を介して SSH 接続を確立すると、AWS CLI と SSM Agent は TLS 経由で Session Manager エンドポイントへの安全な WebSocket 接続を作成します。SSH セッションは、この暗号化されたトンネル内で実行され、追加のセキュリティレイヤーが提供されます。マネージドノードでインバウンドポートを開く必要はありません。

SSH 接続を有効にした後、AWS Identity and Access Management (IAM) ポリシーを使用してユーザー、グループ、またはロールが Session Manager で SSH 接続を確立することを明示的に許可または拒否できます。

**注記**  
ログ記録は、ポート転送または SSH を介して接続する Session Manager セッションでは使用できません。これは、SSH が AWS CLI と Session Manager エンドポイントの間で確立された安全な TLS 接続内のすべてのセッションデータを暗号化し、Session Manager が SSH 接続のトンネルとしてのみ機能するためです。

**Topics**
+ [Session Manager で SSH 接続を有効にする手順](#ssh-connections-enable)
+ [Session Manager による SSH 接続のユーザーアクセス許可の制御](#ssh-connections-permissions)

## Session Manager で SSH 接続を有効にする手順
<a name="ssh-connections-enable"></a>

マネージドノードで Session Manager を通して SSH 接続を有効にする場合、次の手順を実行します。

**Session Managerで SSH 接続を有効にするには**

1. SSH 接続を有効にするマネージドノードに対して以下の手順を実行します:
   + SSH がマネージドノードに実行されていることを確認します。(ノードのインバウンドポートを閉じることができます)
   + SSM Agent のバージョン 2.3.672.0 以降がマネージドノードにインストールされていることを確認します。

     マネージドノードに SSM Agent のインストールまたは更新の詳細については、以下のトピックをご参照ください:
     + [Windows Server 用の EC2 インスタンスに SSM Agent を手動でインストールおよびアンインストールする](manually-install-ssm-agent-windows.md).
     +  [Linux 用 EC2 インスタンスに SSM Agent を手動でインストールおよびアンインストールする](manually-install-ssm-agent-linux.md) 
     +  [macOS 用の EC2 インスタンスに SSM Agent を手動でインストールおよびアンインストールする](manually-install-ssm-agent-macos.md) 
     +  [ハイブリッド Windows ノードで SSM Agent をインストールする方法](hybrid-multicloud-ssm-agent-install-windows.md) 
     +  [ハイブリッド Linux ノードで SSM Agent をインストールする方法](hybrid-multicloud-ssm-agent-install-linux.md) 
**注記**  
マネージドノードとしてアクティベートしたオンプレミスサーバー、エッジデバイス、仮想マシン (VM) に Session Manager を使用する場合、アドバンストインスタンス層を使用する必要があります。アドバンストインスタンスの詳細については、「[インスタンス層の設定](fleet-manager-configure-instance-tiers.md)」を参照してください。

1. SSH を使用したマネージドノードに接続するローカルマシンで、以下の手順を実行します:
   + Session Manager プラグイン 1.1.23.0 バージョン以降がインストールされていることを確認します。

     Session Manager プラグインのインストールについては、[AWS CLI 用の Session Manager プラグインをインストールする](session-manager-working-with-install-plugin.md) を参照してください。
   + SSH 設定ファイルを更新して、Session Manager セッションを開始し、接続を介してすべてのデータを転送するプロキシコマンドを実行できるようにします。

      **Linux および macOS** 
**ヒント**  
SSH 設定ファイルは通常 `~/.ssh/config` にあります。

     ローカルマシンの設定ファイルに以下を追加します。

     ```
     # SSH over Session Manager
     Host i-* mi-*
         ProxyCommand sh -c "aws ssm start-session --target %h --document-name AWS-StartSSHSession --parameters 'portNumber=%p'"
         User ec2-user
     ```

      ** Windows ** 
**ヒント**  
SSH 設定ファイルは通常 `C:\Users\<username>\.ssh\config` にあります。

     ローカルマシンの設定ファイルに以下を追加します。

     ```
     # SSH over Session Manager
     Host i-* mi-*
         ProxyCommand C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe "aws ssm start-session --target %h --document-name AWS-StartSSHSession --parameters portNumber=%p"
     ```
   + マネージドノードへの接続を確立する際に使用する Privacy Enhanced Mail 証明書 (PEM ファイル) または少なくとも公開キーを作成または確認します。これはマネージドノードにすでに関連付けされたキーでなければなりません。プライベートキーファイルへのアクセス許可を設定し、お客様のみが読み取りできるようにする必要があります 次のコマンドを使用してプライベートキーファイルのアクセス許可を設定することで、お客様以外のユーザーによる読み取りを拒否できます。

     ```
     chmod 400 <my-key-pair>.pem
     ```

     例えば、Amazon Elastic Compute Cloud (Amazon EC2) インスタンスの場合、インスタンスの作成時に作成または選択したキーペアファイルです。(セッションを開始するには、コマンドの一部として証明書またはキーへのパスを指定します。SSH を使用してセッションを開始する方法については、「[セッションの開始 (SSH)](session-manager-working-with-sessions-start.md#sessions-start-ssh)」を参照してください。）

## Session Manager による SSH 接続のユーザーアクセス許可の制御
<a name="ssh-connections-permissions"></a>

Session Manager で マネージドノードに SSH 接続を有効にしたら、IAM ポリシーでユーザー、グループ、ロールが Session Manager で SSH 接続を確立する権限を許可または拒否できます。

**IAM ポリシーを使用して Session Manager での SSH 接続を許可するには**
+ 以下のいずれかのオプションを使用します。
  + **オプション 1**: IAM コンソール ([https://console.aws.amazon.com/iam/](https://console.aws.amazon.com/iam/)) を開きます。

    ナビゲーションペインで [**Policies (ポリシー)**] を選択し、Session Manager を介した SSH 接続の開始を許可するユーザーまたはロールのアクセス許可ポリシーを更新します。

    例えば、[クイックスタート Session Manager のエンドユーザーポリシー](getting-started-restrict-access-quickstart.md#restrict-access-quickstart-end-user) で作成したクイックスタートポリシーに次の要素を追加します。各*リソースプレースホルダーの例*をユーザー自身の情報に置き換えます。

------
#### [ JSON ]

****  

    ```
    {
        "Version":"2012-10-17",		 	 	 
        "Statement": [
            {
                "Effect": "Allow",
                "Action": "ssm:StartSession",
                "Resource": [
                    "arn:aws:ec2:us-east-1:111122223333:instance/instance-id",
                    "arn:aws:ssm:*:*:document/AWS-StartSSHSession"
                ]
            },
            {
                "Effect": "Allow",
                "Action": "ssmmessages:OpenDataChannel",
                "Resource": "arn:aws:ssm:*:*:session/${aws:userid}-*"
            }
        ]
    }
    ```

------
  + **オプション 2**: AWS マネジメントコンソール、AWS CLI、または AWS API を使用して、インラインポリシーをユーザーポリシーにアタッチします。

    任意の方法を使用して、**オプション 1** のポリシーステートメントを AWS ユーザー、グループ、またはロールのポリシーにアタッチします。

    詳細については、*IAM ユーザーガイド* の「[IAM ID アクセス許可の追加と削除](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_manage-attach-detach.html)」を参照してください。

**IAM ポリシーを使用して Session Manager での SSH 接続を拒否するには**
+ 以下のいずれかのオプションを使用します。
  + **オプション 1**: IAM コンソール ([https://console.aws.amazon.com/iam/](https://console.aws.amazon.com/iam/)) を開きます。ナビゲーションペインで [**ポリシー**] を選択し、ユーザーまたはロールのアクセス許可ポリシーを更新して、Session Manager セッションの開始をブロックします。

    例えば、[クイックスタート Session Manager のエンドユーザーポリシー](getting-started-restrict-access-quickstart.md#restrict-access-quickstart-end-user) で作成したクイックスタートポリシーに次の要素を追加します。

------
#### [ JSON ]

****  

    ```
    {
        "Version":"2012-10-17",		 	 	 
        "Statement": [
            {
                "Effect": "Deny",
                "Action": "ssm:StartSession",
                "Resource": "arn:aws:ssm:*:*:document/AWS-StartSSHSession"
            },
            {
                "Effect": "Allow",
                "Action": "ssmmessages:OpenDataChannel",
                "Resource": "arn:aws:ssm:*:*:session/${aws:userid}-*"
            }
        ]
    }
    ```

------
  + **オプション 2**: AWS マネジメントコンソール、AWS CLI、または AWS API を使用して、インラインポリシーをユーザーポリシーにアタッチします。

    任意の方法を使用して、**オプション 1** のポリシーステートメントを AWS ユーザー、グループ、またはロールのポリシーにアタッチします。

    詳細については、*IAM ユーザーガイド* の「[IAM ID アクセス許可の追加と削除](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_manage-attach-detach.html)」を参照してください。