步骤 5:(可选)限制对会话中命令的访问 - AWS Systems Manager
AWS 文档中描述的 AWS 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 AWS 服务入门

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

步骤 5:(可选)限制对会话中命令的访问

您可以通过创建自定义 Session Manager 类型 Session 文档来限制用户可以在 SSM 会话中运行的命令。在文档内容中,您可以定义用户启动会话时运行哪个命令以及用户可以向命令提供哪些参数。这些命令也称为交互式命令。文档 Session 必须为 1.0,文档的 schemaVersion 必须为 sessionTypeInteractiveCommands然后,您可以创建允许用户仅访问您定义的 AWS Identity and Access Management 文档的 IAM (Session) 策略。有关使用 IAM 策略限制对会话中命令的访问的更多信息,请参阅IAM交互式命令的 策略示例.

用户在 --document-name 命令的 start-session 选项中指定允许的文档,并在 --parameters 选项中为命令提供任何必要的参数值。有关运行交互式命令的更多信息,请参阅启动会话(交互式命令).

以下过程介绍如何创建自定义 Session 类型 SSM 文档来定义允许用户运行的命令。

限制对会话中命令的访问(控制台)

限制用户可以在 Session Manager 会话中运行的命令(控制台)

  1. 通过以下网址打开 AWS Systems Manager 控制台:https://console.amazonaws.cn/systems-manager/

  2. 在导航窗格中,选择 文档

  3. 选择 Create command or session (创建命令或会话).

  4. 对于 Name (名称),输入文档的描述性名称。

  5. 对于 Document type (文档类型),选择 Session document (会话文档).

  6. 输入文档内容,用来定义用户可以使用 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 } } }
  7. 选择创建文档.

限制对会话中命令的访问(命令行)

开始前的准备工作

如果尚未安装和配置 AWS Command Line Interface (AWS CLI) 或 适用于 PowerShell 的 AWS 工具,请执行该操作。想要了解有关信息,请参阅 安装或升级 AWS 命令行工具.

限制用户可以在 Session Manager 会话中运行的命令(命令行)

  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 } } }
  2. 运行以下命令,使用您的内容创建 SSM 文档,该内容定义了用户可以在 Session Manager 会话中运行的命令。

    Linux
    aws ssm create-document \ --content file://path/to/file/documentContent.json \ --name "exampleAllowedSessionDocument" \ --document-type "Session"
    Windows
    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"

IAM交互式命令的 策略示例

您可以创建 IAM 策略以仅允许用户访问您定义的 Session 文档。这将用户可以在 Session Manager 会话中运行的命令限制为仅在自定义 Session 类型 SSM 文档中定义的命令。

允许用户在单个实例上运行交互式命令
{ "Version":"2012-10-17", "Statement":[ { "Effect":"Allow", "Action":"ssm:StartSession", "Resource":[ "arn:aws:ec2:region:987654321098:instance/i-02573cafcfEXAMPLE", "arn:aws:ssm:region:987654321098:document/exampleAllowedSessionDocument" ], "Condition":{ "BoolIfExists":{ "ssm:SessionDocumentAccessCheck":"true" } } } ] }
允许用户在所有实例上运行交互式命令
{ "Version":"2012-10-17", "Statement":[ { "Effect":"Allow", "Action":"ssm:StartSession", "Resource":[ "arn:aws:ec2:us-west-2:987654321098:instance/*", "arn:aws:ssm:us-west-2:987654321098:document/exampleAllowedSessionDocument" ], "Condition":{ "BoolIfExists":{ "ssm:SessionDocumentAccessCheck":"true" } } } ] }
允许用户在所有实例上运行多个交互式命令
{ "Version":"2012-10-17", "Statement":[ { "Effect":"Allow", "Action":"ssm:StartSession", "Resource":[ "arn:aws:ec2:us-west-2:987654321098:instance/*", "arn:aws:ssm:us-west-2:987654321098:document/exampleAllowedSessionDocument", "arn:aws:ssm:us-west-2:987654321098:document/exampleAllowedSessionDocument2" ], "Condition":{ "BoolIfExists":{ "ssm:SessionDocumentAccessCheck":"true" } } } ] }