设置 OS Login 以要求 SSH 连接使用 SSH 证书


支持 OS Login 证书的虚拟机支持通过 SSH 密钥和 SSH 证书进行连接。SSH 证书是指由其他受信任的密钥(在本例中为 OS Login 管理的证书授权机构)签名的 SSH 密钥。本文档介绍了如何设置 OS Login 虚拟机,以要求使用 SSH 证书进行 SSH 连接,并阻止来自未签名 SSH 密钥的连接。

当您设置 OS Login 以要求使用 SSH 证书连接到虚拟机时,只有由证书颁发机构签名的 SSH 证书才允许连接到虚拟机;来自未签名 SSH 密钥的连接将被拒绝。SSH 证书的有效期为 5 分钟,过期后将无法再用于连接虚拟机,届时必须生成新证书。

我们建议您设置 OS Login 以要求 SSH 连接使用 SSH 证书,以此作为一层额外的安全保障来防范恶意用户。SSH 证书是短期有效的,并且仅对特定虚拟机有效。这意味着,如果证书遭到破解,其攻击面和攻击窗口将比长期有效的 SSH 密钥小得多。

如果贵组织使用员工身份联合,请参阅将员工身份联合与 OS Login 搭配使用,了解如何为贵组织启用 SSH 证书。

准备工作

  • 设置 OS Login 并分配 OS Login IAM 角色
  • 如果您尚未设置身份验证,请进行设置。身份验证是通过其进行身份验证以访问 Google Cloud 服务和 API 的过程。如需从本地开发环境运行代码或示例,您可以通过选择以下选项之一向 Compute Engine 进行身份验证:

    Select the tab for how you plan to use the samples on this page:

    Console

    When you use the Google Cloud console to access Google Cloud services and APIs, you don't need to set up authentication.

    gcloud

      1. After installing the Google Cloud CLI, initialize it by running the following command:

        gcloud init

        If you're using an external identity provider (IdP), you must first sign in to the gcloud CLI with your federated identity.

      2. Set a default region and zone.

限制

  • 您要连接的虚拟机必须具有 OpenSSH 7.4 或更高版本,才能使用 SSH 证书。

要求使用 SSH 证书

您可以设置 OS Login,以要求项目中的所有 OS Login 虚拟机或单个虚拟机必须使用 SSH 证书进行 SSH 连接。在您设置 OS Login 以要求使用 SSH 证书后,来自 Google Cloud 控制台和 gcloud CLI 的 SSH 连接会默认使用 SSH 证书。如果您不想设置 OS Login 以要求使用证书,但想使用证书连接到虚拟机,则必须使用第三方工具进行连接,如使用 SSH 证书连接到虚拟机部分所述。

要求项目中所有已启用 OS Login 的虚拟机都必须使用 SSH 证书

如需要求在项目中使用 OS Login 的所有虚拟机的所有连接都使用 SSH 证书,请使用 Google Cloud 控制台或 gcloud CLI。

控制台

如需要求所有与已启用 OS Login 的虚拟机建立的连接都使用 SSH 证书,请使用 Google Cloud 控制台将项目元数据中的 enable-osloginenable-oslogin-certificates 设置为 TRUE

  1. 转到元数据页面。

    转到元数据

  2. 点击修改

  3. 点击添加项

    1. 密钥字段中,输入 enable-oslogin
    2. 字段中,输入 TRUE
  4. 点击添加项

    1. 密钥字段中,输入 enable-oslogin-certificates
    2. 字段中,输入 TRUE
  5. 点击保存

gcloud

如需要求所有与已启用 OS Login 的虚拟机建立的连接都使用 SSH 证书,请使用 gcloud compute project-info add-metadata 命令在项目元数据中设置 enable-oslogin=TRUEenable-oslogin-certificates=TRUE

gcloud compute project-info add-metadata \
    --metadata enable-oslogin=TRUE,enable-oslogin-certificates=TRUE

在已启用 OS Login 的单个虚拟机上要求使用 SSH 证书

如需要求与使用 OS Login 的单个虚拟机建立的所有 SSH 连接都使用证书,请使用 Google Cloud 控制台或 gcloud CLI。

控制台

如需要求对单个虚拟机的所有连接都使用 SSH 证书,请使用Google Cloud 控制台将实例元数据中的 enable-osloginenable-oslogin-certificates 设置为 TRUE

  1. 转到虚拟机实例页面。

    转到虚拟机实例

  2. 点击要为其要求使用 SSH 证书的虚拟机的名称。

  3. 点击修改

  4. 元数据部分,点击添加项

    1. 密钥字段中,输入 enable-oslogin
    2. 字段中,输入 TRUE
  5. 点击添加项

    1. 密钥字段中,输入 enable-oslogin-certificates
    2. 字段中,输入 TRUE
  6. 点击保存

gcloud

如需要求所有连接到单个虚拟机的连接都必须使用 SSH 证书,请使用 gcloud compute instances add-metadata 命令在实例元数据中设置 enable-oslogin=TRUEenable-oslogin-certificates=TRUE

gcloud compute instances add-metadata VM_NAME \
    --metadata enable-oslogin=TRUE,enable-oslogin-certificates=TRUE

VM_NAME 替换为虚拟机名称。

使用 SSH 证书连接到虚拟机

在您设置 OS Login 以要求使用 SSH 证书后,来自 Google Cloud 控制台和 gcloud CLI 的 SSH 连接会默认使用 SSH 证书。如果您不希望设置 OS Login 以要求使用证书,但又想使用证书连接到虚拟机,则必须使用第三方工具进行连接。

控制台

通过执行以下操作,在Google Cloud 控制台中使用 SSH-in-browser 连接到虚拟机:

  1. In the Google Cloud console, go to the VM instances page.

    Go to VM instances

  2. In the list of virtual machine instances, click SSH in the row of the instance that you want to connect to.

    SSH button next to instance name.

gcloud

使用 gcloud beta compute ssh 命令使用证书连接到虚拟机:

gcloud beta compute ssh VM_NAME

VM_NAME 替换为要连接到的虚拟机的名称。

第三方工具

如需将 SSH 证书与第三方 SSH 客户端搭配使用,请执行以下操作:

  1. 如果您还没有 SSH 密钥,请创建 SSH 密钥

  2. 使用 projects.locations.signSshPublicKey 方法为您的 SSH 公钥签名:

    POST https://oslogin.googleapis.com/v1beta/projects/PROJECT_ID/locations/LOCATION:signSshPublicKey
    
    {
     "ssh_public_key": "PUBLIC_KEY"
     "compute_instance": "COMPUTE_INSTANCE",
     "service_account": "SERVICE_ACCOUNT"
    }
    

    替换以下内容:

    • PROJECT_ID:要连接的虚拟机所属项目的项目 ID
    • LOCATION:要连接的虚拟机所在的区域
    • PUBLIC_KEY:SSH 公钥文件的内容
    • COMPUTE_INSTANCE:要连接到的 Compute Engine 实例,格式为 projects/PROJECT_ID/zones/ZONE/instances/INSTANCE_ID
    • SERVICE_ACCOUNT:关联到实例的服务账号。如果实例未关联服务账号,请删除此字段。
  3. projects.locations.signSshPublicKey 方法的输出中复制 SSH 证书,并将内容保存在新文件中。

  4. 运行以下命令,设置 SSH 证书文件的权限:

    sudo chmod 600 FILE_NAME
    

    FILE_NAME 替换为该文件的名称。

  5. 使用以下命令连接到虚拟机:

    ssh -i PATH_TO_PRIVATE_KEY -o CertificateFile=PATH_TO_SSH_CERTIFICATE USERNAME@EXTERNAL_IP
    

    替换以下内容:

    • PATH_TO_PRIVATE_KEY:您的 SSH 私钥文件的路径。
    • PATH_TO_SSH_CERTIFICATE:SSH 证书文件的路径。
    • USERNAME:您的 OS Login 用户名
    • EXTERNAL_IP:虚拟机的外部 IP 地址。

问题排查

如果您无法连接到已设置为需要 SSH 证书的虚拟机,可能是因为以下原因:

后续步骤