

• AWS Systems Manager CloudWatch 控制面板在 2026 年 4 月 30 日之后将不再可用。客户可以像现在一样继续使用 Amazon CloudWatch 控制台来查看、创建和管理其 Amazon CloudWatch 控制面板。有关更多信息，请参阅 [Amazon CloudWatch 控制面板文档](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/CloudWatch_Dashboards.html)。

# 步骤 4：配置会话首选项
<a name="session-manager-getting-started-configure-preferences"></a>

在其 AWS Identity and Access Management（IAM）policy 中授予管理权限的用户可以配置会话首选项，包括以下内容：
+ 为 Linux 托管式节点启用“运行身份”支持。这样，就可以使用指定操作系统用户的凭证启动会话，而非 `ssm-user` AWS Systems Manager 可以在托管式节点上创建的系统生成的 Session Manager 账户的凭证。
+ 配置 Session Manager 以使用 AWS KMS key 加密，以便为在客户端计算机和托管式节点之间传输的数据提供额外保护。
+ 配置 Session Manager，以创建会话历史记录日志并发送到 Amazon Simple Storage Service (Amazon S3) 存储桶或 Amazon CloudWatch Logs 日志组。然后，可以使用存储的日志数据来报告对您的托管节点进行的会话连接以及会话期间在这些节点上运行的命令。
+ 配置会话超时。您可以使用此设置指定在处于不活动状态一段时间后结束会话。
+ 配置 Session Manager 以使用可配置的 Shell 配置文件。您可以使用这些可自定义的配置文件定义会话中的首选项，例如 Shell 首选项、环境变量、工作目录以及在启动会话时运行多个命令。

有关配置 Session Manager 首选项所需权限的更多信息，请参阅[授予或拒绝更新 Session Manager 首选项的用户权限](preference-setting-permissions.md)。

**Topics**
+ [

# 授予或拒绝更新 Session Manager 首选项的用户权限
](preference-setting-permissions.md)
+ [

# 指定空闲会话超时值
](session-preferences-timeout.md)
+ [

# 指定最长会话持续时间
](session-preferences-max-timeout.md)
+ [

# 允许可配置的 Shell 配置文件
](session-preferences-shell-config.md)
+ [

# 为 Linux 和 macOS 托管式节点开启“运行身份”支持
](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. 访问 [https://console.aws.amazon.com/systems-manager/](https://console.aws.amazon.com/systems-manager/)，打开 AWS Systems Manager 控制台。

1. 在导航窗格中，请选择 **Session Manager**。

1. 选择**首选项**选项卡，然后选择**编辑**。

1. 在 **Idle session timeout (空闲会话超时)** 的 **Minutes (分钟)** 字段中，指定在结束会话之前允许用户处于非活动状态的时间长度。

1. 选择**保存**。

# 指定最长会话持续时间
<a name="session-preferences-max-timeout"></a>

Session Manager（AWS Systems Manager 中的一项工具）允许您指定会话在结束前的最长持续时间。默认情况下，会话没有最长持续时间。您指定的最长会话持续时间值必须介于 1 到 1440 分钟之间。

**指定最长会话持续时间（控制台）**

1. 访问 [https://console.aws.amazon.com/systems-manager/](https://console.aws.amazon.com/systems-manager/)，打开 AWS Systems Manager 控制台。

1. 在导航窗格中，请选择 **Session Manager**。

1. 选择**首选项**选项卡，然后选择**编辑**。

1. 选中 **Enable maximum session duration**（启用最长会话持续时间）旁边的复选框。

1. 在 **Maximum session duration**（最长会话持续时间）下的 **minutes**（分钟）字段中指定会话结束前的最长会话持续时间。

1. 选择**保存**。

# 允许可配置的 Shell 配置文件
<a name="session-preferences-shell-config"></a>

默认情况下，适用于 Linux 的 EC2 实例上的会话使用 Bourne Shell（sh）启动。但是，您可能更喜欢使用 Bash 等其他 Shell。通过允许可配置的 Shell 配置文件，您可以自定义会话中的首选项，例如 Shell 首选项、环境变量、工作目录以及在启动会话时运行多个命令。

**重要**  
Systems Manager 不会检查 Shell 配置文件中的命令或脚本，以查看它们在运行之前会对实例进行哪些更改。要限制用户修改在其 Shell 配置文件中输入的命令或脚本，建议执行以下操作：  
为您的 AWS Identity and Access Management (IAM) 用户和角色创建自定义的会话类型文档。然后，修改这些用户和角色的 IAM policy，使 `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 policy，以拒绝访问您创建的会话类型文档资源的 `UpdateDocument` API 操作。这样，您的用户和角色便可以使用您为其会话首选项创建的文档，而不允许他们修改任何设置。

**要启用可配置的 Shell 配置文件，请执行以下步骤：**

1. 访问 [https://console.aws.amazon.com/systems-manager/](https://console.aws.amazon.com/systems-manager/)，打开 AWS Systems Manager 控制台。

1. 在导航窗格中，请选择 **Session Manager**。

1. 选择**首选项**选项卡，然后选择**编辑**。

1. 在适用操作系统的字段中指定要在会话启动时运行的环境变量、Shell 首选项或命令。

1. 选择**保存**。

以下是一些可以添加到 Shell 配置文件的示例命令。

在 Linux 实例上更改为 Bash Shell，并更改为 /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."
```

------
#### [  Windows  ]

```
$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
```

------
#### [  Windows  ]

```
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 托管式节点开启“运行身份”支持
<a name="session-preferences-run-as"></a>

默认情况下，Session Manager 将使用在托管节点上创建的系统生成的 `ssm-user` 账户的凭证，对连接进行身份验证。（在 Linux 和 macOS 计算机上，此账户添加到 `/etc/sudoers/`。） 如果您选择，则可以改为使用操作系统 (OS) 用户账户或已加入 Active Directory 的示例的域用户的凭据对会话进行身份验证。在这种情况下，Session Manager 会在启动会话之前验证节点上或域中是否存在您指定的操作系统账户。如果您尝试使用节点上或域中不存在的操作系统账户启动会话，则连接将失败。

**注意**  
Session Manager 不支持使用操作系统的 `root` 用户账户对连接进行身份验证。对于使用操作系统用户账户进行身份验证的会话，节点的操作系统级别和目录策略（如登录限制或系统资源使用限制）可能不适用。

**工作原理**  
如果为会话启用“运行身份”支持，系统将检查访问权限，如下所示：

1. 对于正在启动会话的用户，是否使用 `SSMSessionRunAs = os user account name` 标记了其 IAM 实体（用户或角色）？

   如果是，托管节点上是否存在该操作系统用户名？ 如果存在，启动会话。否则，不允会话启动。

   如果*尚未*使用 `SSMSessionRunAs = os user account name` 标记 IAM 实体，请继续执行步骤 2。

1. 如果尚未使用 `SSMSessionRunAs = os user account name` 标记 IAM 实体，是否已在 AWS 账户 的 Session Manager 首选项中指定了操作系统用户名？

   如果是，托管节点上是否存在该操作系统用户名？ 如果存在，启动会话。否则，不允会话启动。

**注意**  
当您激活“运行方式”支持时，它将阻止 Session Manager 使用托管节点上的 `ssm-user` 账户启动会话。这意味着，如果 Session Manager 无法使用指定的操作系统用户账户进行连接，则它不会退回到使用默认方法进行连接。  
如果您在未指定操作系统账户或标记 IAM 实体的情况下激活“运行方式”，并且未在 Session Manager 首选项中指定操作系统账户，则会话连接尝试将失败。

**为 Linux 和 macOS 托管式节点启用“运行身份”支持**

1. 访问 [https://console.aws.amazon.com/systems-manager/](https://console.aws.amazon.com/systems-manager/)，打开 AWS Systems Manager 控制台。

1. 在导航窗格中，请选择 **Session Manager**。

1. 选择**首选项**选项卡，然后选择**编辑**。

1. 选中**为 Linux 实例启用运行身份支持**旁边的复选框。

1. 请执行以下操作之一：
   + **选项 1**：在**操作系统用户名**字段中，输入您要用于启动会话的操作系统用户账户的名称。使用此选项，所有会话都由同一操作系统用户为您的 AWS 账户 中使用 Session Manager 连接的所有用户运行。
   + **选项 2**（建议）：选择**打开 IAM 控制台**链接。在导航窗格中，选择**用户**或**角色**。选择要将标签添加到的实体（用户或角色），然后选择**标签**选项卡。对于密钥名称，输入 `SSMSessionRunAs`。对于密钥值，输入操作系统用户账户的名称。选择**保存更改**。

     如果您选择此选项，则您可以使用此选项为不同 IAM 实体指定唯一的操作系统用户。有关标记 IAM 实体（用户或角色）的更多信息，请参阅《*IAM 用户指南*》中的[标记 IAM 资源](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_tags.html)。

     示例如下：  
![\[为 Session Manager 运行身份权限指定标签的屏幕截图。\]](http://docs.aws.amazon.com/zh_cn/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 服务之间以及应用程序中对加密的使用。您可以指定使用 KMS 密钥加密方式对在托管式节点与 AWS 账户 中用户的本地计算机之间传输的会话数据进行加密。（这是对 AWS 默认提供的 TLS 1.2/1.3 加密的补充）。要加密 Session Manager 会话数据，请使用 AWS KMS 创建*对称* KMS 密钥。

AWS KMS 加密适用于 `Standard_Stream`、`InteractiveCommands` 和 `NonInteractiveCommands` 会话类型。要通过该选项使用在 AWS KMS 中创建的密钥加密会话数据，必须在托管式节点上安装 2.3.539.0 版本或更高版本的 AWS Systems Manager SSM Agent。

**注意**  
您必须允许 AWS KMS 加密，才能从 AWS Systems Manager 控制台重置托管式节点上的密码。有关更多信息，请参阅 [在托管式节点上重置密码](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 policy 示例](getting-started-restrict-access-quickstart.md)。
+ 为您账户中的托管式节点添加 AWS KMS 权限：[步骤 2：验证或添加 Session Manager 的实例权限](session-manager-getting-started-instance-profile.md)。

有关创建和管理 KMS 密钥的更多信息，请参阅 [AWS Key Management Service 开发人员指南](https://docs.aws.amazon.com/kms/latest/developerguide/)。**

有关使用 AWS CLI 在您的账户中启用会话数据的 KMS 密钥加密的信息，请参阅 [创建 Session Manager 首选项文档（命令行）](getting-started-create-preferences-cli.md) 或 [更新 Session Manager 首选项（命令行）](getting-started-configure-preferences-cli.md)。

**注意**  
使用 KMS 密钥需支付费用。有关更多信息，请参阅 [AWS Key Management Service 定价](https://aws.amazon.com/kms/pricing/)。

**要启用会话数据的 KMS 密钥加密（控制台），请执行以下步骤：**

1. 访问 [https://console.aws.amazon.com/systems-manager/](https://console.aws.amazon.com/systems-manager/)，打开 AWS Systems Manager 控制台。

1. 在导航窗格中，请选择 **Session Manager**。

1. 选择**首选项**选项卡，然后选择**编辑**。

1. 选中 **Enable KMS encryption**（启用 KMS 加密）旁边的复选框。

1. 请执行以下操作之一：
   + 选择 **Select a KMS key in my current account (选择我当前账户中的 KMS 密钥)** 旁边的按钮，然后从列表中选择一个密钥。

     -或者-

     选择**输入 KMS 密钥别名或 KMS 密钥 ARN **旁边的按钮。手动输入在您的当前账户中创建的密钥的 KMS 密钥别名，或输入另一账户中的密钥的密钥 Amazon Resource Name (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>

使用以下步骤创建 SSM 文档，这些文档定义了您的 AWS Systems ManagerSession Manager 会话首选项。您可以使用该文档来配置会话选项，包括数据加密、会话持续时间和日志记录。例如，您可以指定是否要在 Amazon Simple Storage Service（Amazon S3）存储桶或 Amazon CloudWatch Logs 日志组中存储会话日志数据。您可以创建定义 AWS 账户 和 AWS 区域 所有会话的常规首选项的文档，也可以创建定义各个会话首选项的文档。

**注意**  
您也可以使用会话管理器控制台配置常规会话首选项。

用于设置会话管理器首选项的文档必须有 `Standard_Stream` 的 `sessionType`。有关会话文档的更多信息，请参阅 [会话文档架构](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 首选项（命令行）**

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 日志组，不希望加密活动会话的数据，或不希望为账户中的会话启用“运行身份”支持，则可以删除这些选项的行。确保 `inputs` 部分中的最后一行不以逗号结尾。  
如果您添加 KMS 密钥 ID 来加密会话数据，启动会话的用户及其所连接的托管式节点都必须具有使用该密钥的权限。您可以通过 IAM policy 向 Session Manager 提供使用 KMS 密钥的权限。有关更多信息，请参阅以下主题：  
为您账户中的用户添加 AWS KMS 权限：[Session Manager 的 IAM policy 示例](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
   ```

------
#### [  Windows  ]

   ```
   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 日志组，不希望加密活动会话的数据，或不希望为账户中的会话启用“运行身份”支持，则可以删除这些选项的行。确保 `inputs` 部分中的最后一行不以逗号结尾。  
如果您添加 KMS 密钥 ID 来加密会话数据，启动会话的用户及其所连接的托管式节点都必须具有使用该密钥的权限。您可以通过 AWS Identity and Access Management (IAM) 策略向 Session Manager 提供使用 KMS 密钥的权限。有关更多信息，请参阅以下主题：  
为您账户中的用户添加 AWS KMS 权限：[Session Manager 的 IAM policy 示例](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"
   ```

------
#### [  Windows  ]

   ```
   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"
       }
   }
   ```