设置 OS Login


本文档介绍如何设置 OS Login 以及带有双重验证 (2FA) 功能的 OS Login。

通过 OS Login,您可以根据 IAM 权限控制对虚拟机 (VM) 实例的访问权限。您可以使用带有或没有 2FA 功能的 OS Login,但如果不使用 OS Login,则无法使用 2FA。如需详细了解 OS Login 和 OS Login 2FA,包括 OS Login 支持的验证类型,请参阅 OS Login 简介

准备工作

  • 如果您想使用 OS Login 2FA,请在您的网域或账号中启用 2FA:
  • 如果您尚未设置身份验证,请进行设置。身份验证是通过其进行身份验证以访问 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. Install the Google Cloud CLI, then initialize it by running the following command:

      gcloud init
    2. Set a default region and zone.
    3. Terraform

      如需在本地开发环境中使用本页面上的 Terraform 示例,请安装并初始化 gcloud CLI,然后使用您的用户凭据设置应用默认凭据。

      1. Install the Google Cloud CLI.
      2. To initialize the gcloud CLI, run the following command:

        gcloud init
      3. If you're using a local shell, then create local authentication credentials for your user account:

        gcloud auth application-default login

        You don't need to do this if you're using Cloud Shell.

      如需了解详情,请参阅 Set up authentication for a local development environment

限制

以下虚拟机不支持 OS Login:
  • Windows Server 和 SQL Server 虚拟机
  • Fedora CoreOS 虚拟机。如需管理对使用这些映像创建的虚拟机的实例访问权限,请使用 Fedora CoreOS Ignition 系统

分配 OS Login IAM 角色

将所有必需的 IAM 角色分配给连接到启用了 OS Login 的虚拟机的用户。

角色 所需用户 授权级别
roles/compute.osLoginroles/compute.osAdminLogin 所有用户

项目实例上。

如果用户需要通过 Google Cloud 控制台或 Google Cloud CLI 进行 SSH 访问,您必须在项目级层授予这些角色,或者在项目级层额外授予包含 compute.projects.get 权限的角色。

roles/iam.serviceAccountUser 所有用户(如果虚拟机有服务账号) 服务账号上。
roles/compute.osLoginExternalUser 来自与连接的虚拟机不同组织的用户

组织上。

此角色必须由组织管理员授予。

启用 OS Login API

通过设置 OS Login 元数据,您可以为单个虚拟机或项目中的所有虚拟机启用 OS Login 或带有双重验证功能的 OS Login。

设置 OS Login 元数据时,Compute Engine 会删除虚拟机的 authorized_keys 文件,并且不再接受来自项目或实例元数据中存储的 SSH 密钥的连接。

为项目中的所有虚拟机启用 OS Login

如需为项目中的所有虚拟机启用 OS Login,请在项目元数据中设置以下值:

  1. 启用 OS Login:
    • 键:enable-oslogin
    • 值:TRUE
  2. (可选)启用双重验证:
    • 键:enable-oslogin-2fa
    • 值:TRUE

为单个虚拟机启用 OS Login

如需为单个虚拟机启用 OS Login,请在实例元数据中设置以下值:

  1. 启用 OS Login:
    • 键:enable-oslogin
    • 值:TRUE
  2. (可选)启用双重验证:
    • 键:enable-oslogin-2fa
    • 值:TRUE

在虚拟机创建期间启用 OS Login

使用 Google Cloud 控制台或 gcloud CLI 创建虚拟机时启用 OS Login(可以选择启用带有两步验证功能的 OS Login)。

控制台

通过从公共映像创建虚拟机并指定以下配置,创建一个在启动时启用 OS Login 和(可选)OS Login 2FA 的虚拟机:

  1. 展开高级选项部分。
  2. 展开安全部分。
  3. 展开管理访问权限部分。
  4. 选择通过 IAM 权限控制虚拟机访问权限
  5. 可选:如果要启用 OS Login 2FA,请选择需要两步验证
  6. 点击创建以创建并启动虚拟机。

gcloud

  1. In the Google Cloud console, activate Cloud Shell.

    Activate Cloud Shell

    At the bottom of the Google Cloud console, a Cloud Shell session starts and displays a command-line prompt. Cloud Shell is a shell environment with the Google Cloud CLI already installed and with values already set for your current project. It can take a few seconds for the session to initialize.

  2. 通过运行以下 gcloud compute instance create 命令之一,创建一个在启动时启用 OS Login 和(可选)OS Login 2FA 的虚拟机:

    • 如需仅启用 OS Login,请运行以下命令:

      gcloud compute instances create VM_NAME \
       --image-family=IMAGE_FAMILY \
       --image-project=IMAGE_PROJECT \
       --metadata enable-oslogin=TRUE
      
    • 如需启用 OS Login 2FA,请运行以下命令:

      gcloud compute instances create VM_NAME \
       --image-family=IMAGE_FAMILY \
       --image-project=IMAGE_PROJECT \
       --metadata enable-oslogin=TRUE,enable-oslogin-2fa=TRUE
      

    替换以下内容:

    • VM_NAME:新虚拟机的名称。
    • IMAGE_FAMILY:Linux 操作系统的映像系列。此项表示通过最新的未弃用的操作系统映像创建虚拟机。如需了解所有的公共映像系列,请参阅操作系统详细信息
    • IMAGE_PROJECT:映像系列所属的映像项目。每个操作系统都有自己的映像项目。如需了解所有的公共映像项目,请参阅操作系统详细信息

Terraform

您可以使用以下选项之一将元数据值应用于您的项目或虚拟机:

  • 方法 1:在项目级元数据中设置 enable-oslogin,以将此项设置应用于项目中的所有虚拟机。

    使用 google_compute_project_metadata Terraform 资源并设置 oslogin=TRUE 的元数据值:

    resource "google_compute_project_metadata" "default" {
      metadata = {
        enable-oslogin = "TRUE"
      }
    }

    或者,您可以将 enable-oslogin 设置为 FALSE 以停用 OS Login。

  • 方法 2:在新虚拟机或现有虚拟机的元数据中设置 enable-oslogin

    使用 google_compute_instance Terraform 资源并设置 oslogin=TRUE。将 oslogin_instance_name 替换为虚拟机名称。

    resource "google_compute_instance" "oslogin_instance" {
      name         = "oslogin-instance-name"
      machine_type = "f1-micro"
      zone         = "us-central1-c"
      metadata = {
        enable-oslogin : "TRUE"
      }
      boot_disk {
        initialize_params {
          image = "debian-cloud/debian-11"
        }
      }
      network_interface {
        # A default network is created for all GCP projects
        network = "default"
        access_config {
        }
      }
    }

    或者,您可以将 enable-oslogin 设置为 FALSE 以使虚拟机停用 OS Login。

连接到启用了 OS Login 的虚拟机

使用连接到 Linux 虚拟机中所述的方法连接到启用了 OS Login 的虚拟机。

当您连接到启用了 OS Login 的虚拟机时,Compute Engine 会使用组织管理员为您配置的用户名。如果您的组织管理员尚未为您配置用户名,则 Compute Engine 会生成一个 USERNAME_DOMAIN_SUFFIX 格式的用户名。如需详细了解用户名,请参阅 OS Login 的工作原理

您在连接到启用了 OS Login 2FA 的虚拟机时,还会看到系统根据您选择的两步验证方法或验证类型显示的消息。使用电话提示方法时,请接受手机或平板电脑上的提示以继续操作。使用其他方法时,请输入您的安全代码或动态密码。

排查 OS Login 问题

如需查找诊断和解决 OS Login 错误的方法,请参阅排查 OS Login 问题

后续步骤