使用默认主机管理配置自动管理 EC2 实例 - AWS Systems Manager

使用默认主机管理配置自动管理 EC2 实例

通过“默认主机管理配置”设置,AWS Systems Manager 可以将 Amazon EC2 实例作为托管式实例自动管理。托管实例是一个配置为与 Systems Manager 一起使用的 EC2 实例。

使用 Systems Manager 管理实例的好处包括以下几点:

  • 可以使用 Session Manager 安全地连接到您的 EC2 实例。

  • 可以使用 Patch Manager 执行自动补丁扫描。

  • 可以使用 Systems Manager 清单查看有关您的实例的详细信息。

  • 可以使用 Fleet Manager 追踪和管理实例。

  • 可以自动保持 SSM Agent 处于最新状态。

Fleet Manager、清单、Patch Manager 和 Session Manager 是 Systems Manager 的功能。

“默认主机管理配置”使您无需手动创建 AWS Identity and Access Management(IAM)实例配置文件即可管理 EC2 实例。“默认主机管理配置”会创建并应用默认 IAM 角色,确保 Systems Manager 有权管理已激活该设置的 AWS 账户 和 AWS 区域 中的所有实例。

如果提供的权限不足以满足您的应用场景要求,您还可以向“默认主机管理配置”创建的默认 IAM 角色添加策略。或者,如果您不需要默认 IAM 角色提供的所有功能的权限,可以创建自己的自定义角色和策略。对您为“默认主机管理配置”选择的 IAM 角色所做的任何更改,都适用于相应区域和账户中的所有托管 Amazon EC2 实例。

有关“默认主机管理配置”所用策略的更多信息,请参阅 AWS 托管式策略:AmazonSSMManagedEC2InstanceDefaultPolicy

实施最低权限访问

本主题中的过程仅由管理员执行。因此,我们建议实施最低权限访问权限,以防止非管理员用户配置或修改“默认主机管理配置”。要查看限制访问“默认主机管理配置”时的策略示例,请参阅本主题后面的 “默认主机管理配置”的最低权限策略示例

重要

使用“默认主机管理配置”注册的实例的注册信息,存储在本地的 var/lib/amazon/ssmC:\ProgramData\Amazon 目录中。如果移除这些目录或其中的文件,将导致实例无法使用默认主机管理配置获取连接到 Systems Manager 所需的凭证。在这些情况下,您必须使用 IAM 实例配置文件为实例提供所需的权限,或者重新创建实例。

先决条件

要在激活该设置的 AWS 区域 和 AWS 账户 中使用“默认主机管理配置”,就必须满足以下要求。

  • 要管理的实例必须使用实例元数据服务版本 2(imdsv2)。

    “默认主机管理配置”不支持实例元数据服务版本 1。有关过渡到 IMDSv2 的信息,请参阅《Amazon EC2 用户指南》中的转换为使用实例元数据服务版本 2

  • 3.2.582.0 版本或更高版本的 SSM Agent 必须安装在实例上。

    有关检查您的实例上安装的 SSM Agent 版本的信息,请参阅 正在检查 SSM Agent 版本号

    有关更新 SSM Agent 的信息,请参阅 自动更新 SSM Agent

  • 作为执行本主题中任务的管理员,您必须具有 GetServiceSettingResetServiceSettingUpdateServiceSetting API 操作的权限。此外,您还必须有权获得 AWSSystemsManagerDefaultEC2InstanceManagementRole IAM 角色的 iam:PassRole 权限。以下是提供这些权限的示例策略。将每个示例资源占位符替换为您自己的信息。

    { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "ssm:GetServiceSetting", "ssm:ResetServiceSetting", "ssm:UpdateServiceSetting" ], "Resource": "arn:aws:ssm:region:account-id:servicesetting/ssm/managed-instance/default-ec2-instance-management-role" }, { "Effect": "Allow", "Action": [ "iam:PassRole" ], "Resource": "arn:aws:iam::account-id:role/service-role/AWSSystemsManagerDefaultEC2InstanceManagementRole", "Condition": { "StringEquals": { "iam:PassedToService": [ "ssm.amazonaws.com" ] } } } ] }
  • 如果已经使用 Systems Manager 将 IAM 实例配置文件附加到要管理的 EC2 实例,则必须从中移除任何允许 ssm:UpdateInstanceInformation 操作的权限。SSM Agent 会首先尝试使用实例配置文件权限,然后才会使用“默认主机管理配置”权限。如果您在自己的 IAM 实例配置文件中允许该 ssm:UpdateInstanceInformation 操作,则该实例将不使用“默认主机管理配置”权限。

激活“默认主机管理配置”设置

您可以从 Fleet Manager 控制台或者使用 AWS Command Line Interface 或 AWS Tools for Windows PowerShell 激活“默认主机管理配置”。

您必须在想要通过此设置管理 Amazon EC2 实例的每个区域中,逐个开启“默认主机管理配置”。

在开启“默认主机管理配置”后,实例最多可能需要 30 分钟,就能使用您在下述过程步骤 5 中所选角色的凭证。

激活“默认主机管理配置”(控制台)
  1. 访问 https://console.aws.amazon.com/systems-manager/,打开 AWS Systems Manager 控制台。

  2. 在导航窗格中,选择 Fleet Manager

  3. 选择账户管理,配置默认主机管理配置

  4. 打开启用默认主机管理配置

  5. 选择用于为您的实例启用 Systems Manager 功能的 AWS Identity and Access Management(IAM)角色。我们建议使用“默认主机管理配置”提供的默认角色。它包含使用 Systems Manager 管理您的 Amazon EC2 实例所需的最低权限集合。如果您更喜欢使用自定义角色,则该角色的信任策略必须允许 Systems Manager 作为可信实体。

  6. 选择配置以完成设置。

激活“默认主机管理配置”(命令行)
  1. 在您的本地计算机上创建包含以下信任关系策略的 JSON 文件。

    { "Version":"2012-10-17", "Statement":[ { "Sid":"", "Effect":"Allow", "Principal":{ "Service":"ssm.amazonaws.com" }, "Action":"sts:AssumeRole" } ] }
  2. 打开 AWS CLI 或 Tools for Windows PowerShell 并运行以下命令之一,以在您的账户中创建一个服务角色,具体取决于您本地计算机的操作系统类型。将每个示例资源占位符替换为您自己的信息。

    Linux & macOS
    aws iam create-role \ --role-name AWSSystemsManagerDefaultEC2InstanceManagementRole \ --path /service-role/ \ --assume-role-policy-document file://trust-policy.json
    Windows
    aws iam create-role ^ --role-name AWSSystemsManagerDefaultEC2InstanceManagementRole ^ --path /service-role/ ^ --assume-role-policy-document file://trust-policy.json
    PowerShell
    New-IAMRole ` -RoleName "AWSSystemsManagerDefaultEC2InstanceManagementRole" ` -Path "/service-role/" ` -AssumeRolePolicyDocument "file://trust-policy.json"
  3. 运行以下命令,将 AmazonSSMManagedEC2InstanceDefaultPolicy 托管策略附加到您新建的角色。将每个示例资源占位符替换为您自己的信息。

    Linux & macOS
    aws iam attach-role-policy \ --policy-arn arn:aws:iam::aws:policy/AmazonSSMManagedEC2InstanceDefaultPolicy \ --role-name AWSSystemsManagerDefaultEC2InstanceManagementRole
    Windows
    aws iam attach-role-policy ^ --policy-arn arn:aws:iam::aws:policy/AmazonSSMManagedEC2InstanceDefaultPolicy ^ --role-name AWSSystemsManagerDefaultEC2InstanceManagementRole
    PowerShell
    Register-IAMRolePolicy ` -PolicyArn "arn:aws:iam::aws:policy/AmazonSSMManagedEC2InstanceDefaultPolicy" ` -RoleName "AWSSystemsManagerDefaultEC2InstanceManagementRole"
  4. 打开 AWS CLI 或 Tools for Windows PowerShell 并运行以下命令。将每个示例资源占位符替换为您自己的信息。

    Linux & macOS
    aws ssm update-service-setting \ --setting-id arn:aws:ssm:region:account-id:servicesetting/ssm/managed-instance/default-ec2-instance-management-role \ --setting-value service-role/AWSSystemsManagerDefaultEC2InstanceManagementRole
    Windows
    aws ssm update-service-setting ^ --setting-id arn:aws:ssm:region:account-id:servicesetting/ssm/managed-instance/default-ec2-instance-management-role ^ --setting-value service-role/AWSSystemsManagerDefaultEC2InstanceManagementRole
    PowerShell
    Update-SSMServiceSetting ` -SettingId "arn:aws:ssm:region:account-id:servicesetting/ssm/managed-instance/default-ec2-instance-management-role" ` -SettingValue "service-role/AWSSystemsManagerDefaultEC2InstanceManagementRole"

    如果此命令成功,则无任何输出。

  5. 运行以下命令,以查看当前的 AWS 账户 和 AWS 区域 中“默认主机管理配置”的当前服务设置。

    Linux & macOS
    aws ssm get-service-setting \ --setting-id arn:aws:ssm:region:account-id:servicesetting/ssm/managed-instance/default-ec2-instance-management-role
    Windows
    aws ssm get-service-setting ^ --setting-id arn:aws:ssm:region:account-id:servicesetting/ssm/managed-instance/default-ec2-instance-management-role
    PowerShell
    Get-SSMServiceSetting ` -SettingId "arn:aws:ssm:region:account-id:servicesetting/ssm/managed-instance/default-ec2-instance-management-role"

    此命令会返回如下信息。

    {
        "ServiceSetting": {
            "SettingId": "/ssm/managed-instance/default-ec2-instance-management-role",
            "SettingValue": "service-role/AWSSystemsManagerDefaultEC2InstanceManagementRole",
            "LastModifiedDate": "2022-11-28T08:21:03.576000-08:00",
            "LastModifiedUser": "System",
            "ARN": "arn:aws:ssm:us-east-2:-123456789012:servicesetting/ssm/managed-instance/default-ec2-instance-management-role",
            "Status": "Custom"
        }
    }

停用“默认主机管理配置”设置

您可以从 Fleet Manager 控制台或者使用 AWS Command Line Interface 或 AWS Tools for Windows PowerShell 停用“默认主机管理配置”。

您必须在不再想要通过此配置管理 Amazon EC2 实例的每个区域中,逐个关闭“默认主机管理配置”设置。在一个区域将其停用,不会在所有区域将其停用。

如果您停用“默认主机管理配置”,并且未将实例配置文件附加到允许访问 Systems Manager 的 Amazon EC2 实例,则这些实例将不再由 Systems Manager 管理。

停用“默认主机管理配置”(控制台)
  1. 访问 https://console.aws.amazon.com/systems-manager/,打开 AWS Systems Manager 控制台。

  2. 在导航窗格中,选择 Fleet Manager

  3. 选择账户管理,默认主机管理配置

  4. 关闭启用默认主机管理配置

  5. 选择配置以禁用“默认主机管理配置”。

停用“默认主机管理配置”(命令行)
  • 打开 AWS CLI 或 Tools for Windows PowerShell 并运行以下命令。将每个示例资源占位符替换为您自己的信息。

    Linux & macOS
    aws ssm reset-service-setting \ --setting-id arn:aws:ssm:region:account-id:servicesetting/ssm/managed-instance/default-ec2-instance-management-role
    Windows
    aws ssm reset-service-setting ^ --setting-id arn:aws:ssm:region:account-id:servicesetting/ssm/managed-instance/default-ec2-instance-management-role
    PowerShell
    Reset-SSMServiceSetting ` -SettingId "arn:aws:ssm:region:account-id:servicesetting/ssm/managed-instance/default-ec2-instance-management-role"

“默认主机管理配置”的最低权限策略示例

以下示例策略演示如何防止组织成员更改您账户中的“默认主机管理配置”设置。

适用于 AWS Organizations 的服务控制策略

以下策略演示如何防止您 AWS Organizations 中的非管理员成员更新您的“默认主机管理配置”设置。将每个示例资源占位符替换为您自己的信息。

{ "Version": "2012-10-17", "Statement": [{ "Effect": "Deny", "Action": [ "ssm:UpdateServiceSetting", "ssm:ResetServiceSetting" ], "Resource": "arn:aws:ssm:*:*:servicesetting/ssm/managed-instance/default-ec2-instance-management-role", "Condition": { "StringNotEqualsIgnoreCase": { "aws:PrincipalTag/job-function": [ "administrator" ] } } }, { "Effect": "Deny", "Action": [ "iam:PassRole" ], "Resource": "arn:aws:iam::*:role/service-role/AWSSystemsManagerDefaultEC2InstanceManagementRole", "Condition": { "StringEquals": { "iam:PassedToService": "ssm.amazonaws.com" }, "StringNotEqualsIgnoreCase": { "aws:PrincipalTag/job-function": [ "administrator" ] } } }, { "Effect": "Deny", "Resource": "arn:aws:iam::*:role/service-role/AWSSystemsManagerDefaultEC2InstanceManagementRole", "Action": [ "iam:AttachRolePolicy", "iam:DeleteRole" ], "Condition": { "StringNotEqualsIgnoreCase": { "aws:PrincipalTag/job-function": [ "administrator" ] } } } ] }

适用于 IAM 主体的策略

以下策略演示如何防止您 AWS Organizations 中的 IAM 组、角色或用户更新您的“默认主机管理配置”设置。将每个示例资源占位符替换为您自己的信息。

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Deny", "Action": [ "ssm:UpdateServiceSetting", "ssm:ResetServiceSetting" ], "Resource": "arn:aws:ssm:region:account-id:servicesetting/ssm/managed-instance/default-ec2-instance-management-role" }, { "Effect": "Deny", "Action": [ "iam:AttachRolePolicy", "iam:DeleteRole", "iam:PassRole" ], "Resource": "arn:aws:iam::account-id:role/service-role/AWSSystemsManagerDefaultEC2InstanceManagementRole" } ] }