AWS Systems Manager
用户指南
AWS 服务或AWS文档中描述的功能,可能因地区/位置而异。请点击 Amazon AWS 入门,可查看中国地区的具体差异

在混合环境中设置 AWS Systems Manager

您可以借助 AWS Systems Manager 在混合环境中以远程方式安全地管理本地服务器和虚拟机 (VM)。为 Systems Manager 配置混合环境有以下优势。

  • 创建一种一致且安全的方式,使用相同的工具或脚本从一个位置远程管理本地工作负载。

  • 通过使用 AWS Identity and Access Management (IAM) 集中管理可在服务器和虚拟机上执行的操作的访问控制。

  • 集中审计,您可以查看在您服务器和虚拟机上执行的操作,因为所有这些操作记录在 AWS CloudTrail 中。

  • 集中监控,因为您可以配置 CloudWatch Events 和 Amazon SNS 以发送有关服务执行成功的通知。

完成本主题中的过程为 Systems Manager 配置混合计算机。

重要

完成后,您为 Systems Manager 配置的混合计算机会列在 Amazon EC2 控制台中,并被称为托管实例。为 Systems Manager 配置的 Amazon EC2 实例是托管实例。但在 Amazon EC2 控制台中,您的本地实例与具有前缀“mi-”的 Amazon EC2 实例有别。

创建 IAM 服务角色

混合环境中的服务器和虚拟机需要有 IAM 角色才能与 Systems Manager SSM 服务通信。该角色向 AssumeRole 授予对 SSM 服务的信任。

注意

您只需为每个 AWS 账户创建该服务角色一次。

使用 AWS Tools for Windows PowerShell 创建 IAM 服务角色

  1. 使用以下信任策略创建文本文件 (在此示例中,它名为 SSMService-Trust.json)。使用 .json 文件扩展名保存该文件。

    { "Version": "2012-10-17", "Statement": { "Effect": "Allow", "Principal": {"Service": "ssm.amazonaws.com"}, "Action": "sts:AssumeRole" } }
  2. 使用 New-IAMRole (如下所示) 创建服务角色。此示例创建一个名为 SSMServiceRole 的角色。

    New-IAMRole -RoleName SSMServiceRole -AssumeRolePolicyDocument (Get-Content -raw SSMService-Trust.json)
  3. 使用 Register-IAMRolePolicy (如下所示) 以允许 SSMServiceRole 创建会话令牌。此会话令牌向托管实例授予使用 Systems Manager 运行命令的权限。

    Register-IAMRolePolicy -RoleName SSMServiceRole -PolicyArn arn:aws:iam::aws:policy/service-role/AmazonEC2RoleforSSM

使用 AWS CLI 创建 IAM 服务角色

  1. 使用以下信任策略创建文本文件 (在此示例中,它名为 SSMService-Trust.json)。使用 .json 文件扩展名保存该文件。

    { "Version": "2012-10-17", "Statement": { "Effect": "Allow", "Principal": {"Service": "ssm.amazonaws.com"}, "Action": "sts:AssumeRole" } }
  2. 使用 create-role 命令创建服务角色。此示例创建一个名为 SSMServiceRole 的角色。

    aws iam create-role --role-name SSMServiceRole --assume-role-policy-document file://SSMService-Trust.json
  3. 使用 attach-role-policy (如下所示) 以允许 SSMServiceRole 创建会话令牌。此会话令牌向托管实例授予使用 Systems Manager 运行命令的权限。

    aws iam attach-role-policy --role-name SSMServiceRole --policy-arn arn:aws:iam::aws:policy/service-role/AmazonEC2RoleforSSM

注意

您的公司或组织中在混合计算机上使用 Systems Manager 的用户必须在 IAM 中获得授权,才能调用 SSM API。有关更多信息,请参阅 配置对 Systems Manager 的访问权限

创建托管实例激活

要在混合环境中将服务器和虚拟机设置为托管实例,您需要创建托管实例激活。完成激活后,您将收到一个激活代码和激活 ID。此代码/ID 组合具有 Amazon EC2 访问 ID 和私有密钥的功能,可提供从托管实例对 Systems Manager 服务的安全访问。

创建托管实例激活 ()

  1. https://console.amazonaws.cn/systems-manager/ 上打开 AWS Systems Manager 控制台。

  2. 选择创建激活

  3. (可选) 在激活说明字段中,输入对此激活的描述。描述是可选的,但如果要激活大量服务器和虚拟机,建议输入描述。

  4. 实例限制字段中,指定要向 AWS 注册的服务器或虚拟机的总数。

  5. IAM 角色名称部分中,选择一个服务角色选项,以便服务器和虚拟机能够与云中的 AWS Systems Manager 进行通信:

    1. 选择使用系统创建的默认命令执行角色使用 AWS 创建的角色和托管策略。

    2. 选择选择一个具有所需权限的现有自定义 IAM 角色使用先前创建的可选自定义角色。

  6. 激活过期日期字段中,为激活指定到期日期。

    注意

    如果需要在过期日期后注册更多的托管实例,您必须创建新的激活。过期日期对已注册且正在运行的实例没有任何影响。

  7. (可选) 在默认实例名称字段中指定名称。

  8. 选择创建激活

    重要

    在安全位置存储托管实例激活代码和激活 ID。在混合环境中的服务器和虚拟机上安装 SSM 代理时指定此代码和 ID。如果丢失了此代码和 ID,则必须创建一个新激活。

使用 AWS Tools for Windows PowerShell 创建托管实例激活

  1. 在安装了 AWS Tools for Windows PowerShell 的计算机上,在 AWS Tools for Windows PowerShell 中运行以下命令。

    New-SSMActivation -DefaultInstanceName name -IamRole iam-service-role-name -RegistrationLimit number-of-managed-instances –Region region

    例如:

    New-SSMActivation -DefaultInstanceName MyWebServers -IamRole RunCommandServiceRole -RegistrationLimit 10 –Region us-east-1
  2. Enter。如果激活成功,系统将返回一个激活代码和一个激活 ID。在安全位置存储激活代码和激活 ID。

使用 AWS CLI 创建托管实例激活

  1. 在安装了 AWS Command Line Interface (AWS CLI) 的计算机上,在 CLI 中运行以下命令。

    aws ssm create-activation --default-instance-name name --iam-role IAM service role --registration-limit number of managed instances --region region

    例如:

    aws ssm create-activation --default-instance-name MyWebServers --iam-role RunCommandServiceRole --registration-limit 10 --region us-east-1
  2. Enter。如果激活成功,系统将返回一个激活代码和一个激活 ID。在安全位置存储激活代码和激活 ID。

在 Windows 混合环境中的服务器和虚拟机上安装 SSM 代理

在开始前,找到在上一部分中完成托管实例激活后收到的激活码和激活 ID。按照下面的流程指定激活码和 ID。

重要

此过程适用于本地或混合环境中的服务器和 VM。要在 Amazon EC2 Windows 实例上下载并安装 SSM 代理,请参阅在 Windows 实例上安装和配置 SSM 代理

在混合环境中的服务器和虚拟机上安装 SSM 代理

  1. 登录混合环境中的服务器或虚拟机。

  2. 打开 Windows PowerShell。

  3. 将以下命令块复制并粘贴到 AWS Tools for Windows PowerShell 中。将占位符值替换为在创建托管实例激活时生成的激活代码和激活 ID,以及要从其下载 SSM 代理的 AWS 区域的标识符。

    $code = "activation-code" $id = "activation-id" $region = "region" $dir = $env:TEMP + "\ssm" New-Item -ItemType directory -Path $dir -Force cd $dir (New-Object System.Net.WebClient).DownloadFile("https://amazon-ssm-$region.s3.amazonaws.com/latest/windows_amd64/AmazonSSMAgentSetup.exe", $dir + "\AmazonSSMAgentSetup.exe") Start-Process .\AmazonSSMAgentSetup.exe -ArgumentList @("/q", "/log", "install.log", "CODE=$code", "ID=$id", "REGION=$region") -Wait Get-Content ($env:ProgramData + "\Amazon\SSM\InstanceData\registration") Get-Service -Name "AmazonSSMAgent"
  4. Enter

此命令执行以下操作:

  • 下载 SSM 代理并将它安装到服务器或虚拟机上。

  • 将服务器或虚拟机注册到 SSM 服务。

  • 返回类似以下内容的请求响应:

    Directory: C:\Users\ADMINI~1\AppData\Local\Temp\2 Mode LastWriteTime Length Name ---- ------------- ------ ---- d----- 07/07/2018 8:07 PM ssm {"ManagedInstanceID":"mi-008d36be46EXAMPLE","Region":"us-east-1"} Status : Running Name : AmazonSSMAgent DisplayName : Amazon SSM Agent

服务器或虚拟机现在为托管实例。在控制台中,这些实例在列出时带有前缀“mi-”。您可以使用 List 命令查看所有实例。有关更多信息,请参阅 Amazon EC2 Systems Manager API Reference

在 Linux 混合环境中的服务器和虚拟机上安装 SSM 代理

在开始前,找到在完成托管实例激活后收到的激活码和激活 ID。按照下面的流程指定激活码和 ID。

重要

此过程适用于本地或混合环境中的服务器和 VM。要在 Amazon EC2 Linux 实例上下载并安装 SSM 代理,请参阅在 Linux 实例上安装和配置 SSM 代理

使用以下脚本中的 URL 可从任意 AWS 区域下载 SSM 代理。如果需要从某特定 区域下载该代理,请复制操作系统的 URL,然后将 region 替换为适当的值。

例如,要从 US West (N. California) Region (us-west-1) 下载适用于 Amazon Linux、RHEL、CentOS 和 SLES 64 位的 SSM 代理,请使用以下 URL:

https://s3-us-west-1.amazonaws.com/amazon-ssm-us-west-1/latest/linux_amd64/amazon-ssm-agent.rpm

如果下载失败,请尝试用 https://s3 替换 https://s3-区域区域.

  • Amazon Linux、RHEL、CentOS 和 SLES 64 位

    https://s3.region.amazonaws.com/amazon-ssm-region/latest/linux_amd64/amazon-ssm-agent.rpm

  • Amazon Linux、RHEL 和 CentOS 32 位

    https://s3.region.amazonaws.com/amazon-ssm-region/latest/linux_386/amazon-ssm-agent.rpm

  • Ubuntu Server 64 位

    https://s3.region.amazonaws.com/amazon-ssm-region/latest/debian_amd64/amazon-ssm-agent.deb

  • Ubuntu Server 32 位

    https://s3.region.amazonaws.com/amazon-ssm-region/latest/debian_386/amazon-ssm-agent.deb

  • Raspbian

    https://s3-region.amazonaws.com/amazon-ssm-region/latest/debian_arm/amazon-ssm-agent.deb

在混合环境中的服务器和虚拟机上安装 SSM 代理

  1. 登录混合环境中的服务器或虚拟机。

  2. 将以下命令块之一复制并粘贴到 SSH 中。将占位符值替换为在创建托管实例激活时生成的激活代码和激活 ID,以及要从其下载 SSM 代理的 AWS 区域的标识符。

    请注意,如果您不是根用户,则 sudo 不是必需的。

    在 Amazon Linux、RHEL 6.x 和 CentOS 6.x 上

    mkdir /tmp/ssm curl https://s3.amazonaws.com/ec2-downloads-windows/SSMAgent/latest/linux_amd64/amazon-ssm-agent.rpm -o /tmp/ssm/amazon-ssm-agent.rpm sudo yum install -y /tmp/ssm/amazon-ssm-agent.rpm sudo stop amazon-ssm-agent sudo amazon-ssm-agent -register -code "activation-code" -id "activation-id" -region "region" sudo start amazon-ssm-agent

    在 RHEL 7.x 和 CentOS 7.x 上

    mkdir /tmp/ssm curl https://s3.amazonaws.com/ec2-downloads-windows/SSMAgent/latest/linux_amd64/amazon-ssm-agent.rpm -o /tmp/ssm/amazon-ssm-agent.rpm sudo yum install -y /tmp/ssm/amazon-ssm-agent.rpm sudo systemctl stop amazon-ssm-agent sudo amazon-ssm-agent -register -code "activation-code" -id "activation-id" -region "region" sudo systemctl start amazon-ssm-agent

    在 SLES 上

    mkdir /tmp/ssm sudo wget https://s3.amazonaws.com/ec2-downloads-windows/SSMAgent/latest/linux_amd64/amazon-ssm-agent.rpm sudo rpm --install amazon-ssm-agent.rpm sudo systemctl stop amazon-ssm-agent sudo amazon-ssm-agent -register -code "activation-code" -id "activation-id" -region "region" sudo systemctl enable amazon-ssm-agent sudo systemctl start amazon-ssm-agent

    在 Ubuntu 上

    mkdir /tmp/ssm curl https://s3.amazonaws.com/ec2-downloads-windows/SSMAgent/latest/debian_amd64/amazon-ssm-agent.deb -o /tmp/ssm/amazon-ssm-agent.deb sudo dpkg -i /tmp/ssm/amazon-ssm-agent.deb sudo service amazon-ssm-agent stop sudo amazon-ssm-agent -register -code "activation-code" -id "activation-id" -region "region" sudo service amazon-ssm-agent start

    在 Raspbian 上

    mkdir /tmp/ssm sudo curl https://s3.amazonaws.com/ec2-downloads-windows/SSMAgent/latest/debian_arm/amazon-ssm-agent.deb -o /tmp/ssm/amazon-ssm-agent.deb sudo dpkg -i /tmp/ssm/amazon-ssm-agent.deb sudo service amazon-ssm-agent stop sudo amazon-ssm-agent -register -code "activation-code" -id "activation-id" -region "region" sudo service amazon-ssm-agent start

    注意

    如果在 SSM 代理错误日志中看到以下错误,说明计算机 ID 在重启后发生变更:

    Unable to load instance associations, unable to retrieve associations unable to retrieve associations error occurred in RequestManagedInstanceRoleToken: MachineFingerprintDoesNotMatch: Fingerprint does not match

    执行以下命令使计算机 ID 在重启后保持不变。

    umount /etc/machine-id systemd-machine-id-setup
  3. Enter

此命令将下载 SSM 代理并将它安装到混合环境中的服务器或虚拟机上。此命令停止 SSM 代理,然后向 SSM 服务注册服务器或虚拟机。服务器或虚拟机现在为托管实例。为 Systems Manager 配置的 Amazon EC2 实例也是托管实例。但在 Amazon EC2 控制台中,本地实例与具有前缀“mi-”的 Amazon EC2 实例有区别。