设置 OS Login 及双重身份验证

如果使用 OS Login 来管理对实例的访问权限,则可以使用双重身份验证(也称为 2FA)额外增加一层保护。

OS Login 支持以下 2FA 方法或验证类型:

要在实例上使用 2FA 身份验证,请按照如下步骤操作:

  1. 为您的 Google 帐号或网域启用 2FA
  2. 在项目或实例上启用 2FA
  3. 连接到您的实例

设置 OS Login 2FA 后,您可以使用审核日志来监控您的身份验证会话。

支持的操作系统

OS Login 双重身份验证需要在以下日期之后创建的操作系统映像:

操作系统 日期
CentOS 6 和 CentOS 7 2019 年 3 月 26 日
Debian 9 2019 年 3 月 26 日
RHEL 6 和 RHEL 7 2019 年 3 月 26 日
SUSE 12 和 SUSE 15 暂不支持
Ubuntu 14.04 LTS、Ubuntu 16.04 LTS、Ubuntu 18.04 LTS 和 Ubuntu 18.10 暂不支持

为您的 Google 帐号或网域启用 2FA

您必须先在 Google 帐号或网域上启用双重身份验证,然后才能为您的项目或实例启用这种验证方法。确保在包含项目或实例的网域上启用 2FA,或者为拥有相应项目或实例的用户启用 2FA。

G Suite 管理员可以为一个网域启用双重身份验证,而 Google 用户则可以在用户帐号层级上启用双重身份验证。

网域

只有 G Suite 管理员才能为网域启用双重身份验证。

要为一个网域启用 2FA,请参阅 G Suite 管理指南中的通过两步验证来保护您的企业

用户帐号

如果您的用户帐号并非由 G Suite 管理员管理,则可以为单个 Google 帐号配置 2FA。

要为单个 Google 帐号配置 2FA,请参阅 Google 两步验证

在您的项目或实例上启用 2FA

在网域或用户帐号层级上启用双重身份验证后,您可以为单个实例或项目启用 OS Login 2FA 配置。

实例或项目必须首先启用 OS Login 才能使用 OS Login 2FA。

您可以在实例创建或项目设置期间同时配置 OS Login 和 OS Login 2FA,也可以在已启用 OS Login 的现有实例或项目上配置 OS Login 2FA。

要将您的项目或实例配置为使用 OS Login 双重身份验证,请在项目或实例元数据中设置“enable-oslogin-2fa=TRUE”。

Console

创建实例时,请在实例元数据中设置 enable-oslogin-2fa

  1. 在 GCP Console 中,转到“虚拟机实例”页面。

    转到“虚拟机实例”页面

  2. 点击创建实例
  3. 创建新实例页面上,为实例填写所需的属性。
  4. 元数据部分中,添加以下元数据条目:

    • enable-oslogin,其值为 TRUE
    • enable-oslogin-2fa,其值为 TRUE
  5. 点击创建以创建实例。

在项目范围的元数据中设置 enable-oslogin-2fa,使其应用于项目中的所有实例:

  1. 转到“元数据”页面。

    转到“元数据”页面

  2. 点击修改
  3. 添加一个元数据条目,其中键为 enable-oslogin-2fa,值为 TRUE。或者,将该值设置为 FALSE 以停用该功能。
  4. 点击保存以应用更改。

对于未运行 CoreOS 的虚拟机,此更改将立即生效;您无需重启实例。对于 CoreOS 发行版,请重新启动(重启)实例,以使更改生效。要重新启动,请先在实例上执行停止,然后再执行启动操作。

在现有实例的元数据中设置 enable-oslogin-2fa

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

    转到“虚拟机实例”页面

  2. 点击要为其设置元数据值的实例的名称。
  3. 在实例详情页面的顶部,点击修改以修改实例设置。
  4. 自定义元数据下方,添加一个元数据条目,其中键为 enable-oslogin-2fa,值为 TRUE。或者,将该值设置为 FALSE 以在实例上停用该功能。您还应验证 enable-oslogin 是否设置为 True
  5. 在实例详情页面的底部,点击保存以将更改应用于实例。

对于除 CoreOS 之外的所有操作系统,此更改将立即生效;您无需重启实例。对于 CoreOS 发行版,请重新启动(重启)实例,以使更改生效。要重新启动,请先在实例上执行停止,然后再执行启动操作。

gcloud

创建实例时,请在实例元数据中设置 enable-oslogin-2fa

gcloud compute instances create [INSTANCE_NAME] \
  --metadata enable-oslogin=True,enable-oslogin-2fa=True

在项目范围的元数据中设置 enable-oslogin-2fa,使其应用于项目中的所有实例:

gcloud compute project-info add-metadata \
  --metadata enable-oslogin=True,enable-oslogin-2fa=True

在现有实例的元数据中设置 enable-oslogin-2fa

gcloud compute instances add-metadata \
  --metadata enable-oslogin=True,enable-oslogin-2fa=True [INSTANCE_NAME]

其中 [INSTANCE_NAME] 是实例的名称。

连接到实例

当您配置必要的角色后,请使用 Compute Engine 工具连接到实例。Compute Engine 会自动生成 SSH 密钥并将其与您的用户帐号关联。或者,如果您创建自己的 SSH 密钥并将公钥添加到您的用户帐号,则可以使用第三方工具连接到实例。该实例从您的用户帐号获取您的公钥,还允许您在提供正确的用户名和匹配的 SSH 私钥后连接到该实例。

当您连接到该实例时,您将收到基于所选 2FA 方法或验证类型的消息。

  • 如果选择的是 Google 身份验证器,您将看到以下消息:

    "Enter your one-time password:"

  • 如果选择的是短信或电话验证,您将看到以下消息:

    "A security code has been sent to your phone. Enter code to continue:"

  • 如果选择的是电话提示,您将看到以下消息:

    A login prompt has been sent to your enrolled device:"

    在使用电话提示方法时,请接受手机或平板电脑上的提示以继续操作。使用其他方法时,请输入您的安全代码或动态密码。

连接到实例后,请查看预期的登录行为

查看 OS Login 2FA 审核日志

Compute Engine 提供审核日志以跟踪双重身份验证请求。双重身份验证请求有两种类型:

  • StartSession - 启动新的身份验证会话。在 StartSession 调用中,客户端向服务器声明其功能,并获取有关第一项验证的信息。StartSession 调用会返回以下内容:

    • 会话 ID - 此会话 ID 会传递给所有后续 ContinueSession 调用。
    • 有关此新身份验证会话中所用验证方法或 2FA 方法的信息。
  • ContinueSession - 继续现有身份验证会话。使用所提供的会话 ID,ContinueSession API 可以执行如下两项操作之一:

    • 接收对于验证或相应身份方法的响应,随后执行身份验证、拒绝验证请求或要求用户提供额外的验证信息。
    • 切换到与服务器最初在上一轮 API 调用中提出的验证类型不同的验证。如果客户端选择使用不同的验证类型(例如,选择 Google 身份验证器而非电话提示),则客户端可以使用所需类型的 request.challengeId,在对服务器的调用中请求不同的验证类型。

要查看日志,您需要具有日志查看器的权限,或者具有项目查看者或编辑者身份。

  1. 转到 GCP Console 中的“日志”页面。

    转到“日志”页面

  2. 展开下拉菜单,然后选择 Audited Resource
  3. 在搜索栏中,输入 oslogin.googleapis.com 并按 Enter 键。
  4. 系统将显示描述双重身份验证请求的审核日志列表。展开其中任一条目可以了解详情:

    双重身份验证审核日志的屏幕截图

对于任何审核日志,您可以执行以下操作:

  1. 展开 protoPayload 属性。

    双重身份验证审核日志指标的屏幕截图

  2. 查找 methodName 以查看此日志对应的活动(StartSessionContinueSession 请求)。例如,如果此日志跟踪的是 StartSession 请求,则方法名称将显示为 "google.cloud.oslogin.OsLoginService.v1.StartSession"。类似地,ContinueSession 日志会显示为 "google.cloud.oslogin.OsLoginService.v1.ContinueSession"。每项启动会话和继续会话请求都会记录一个审核日志条目。

不同的日志类型有不同的审核日志属性。例如,与 StartSession 相关的审核日志具有特定于启动会话的属性,ContinueSession 审核日志则具有其自己的属性集。某些审核日志属性同时适用于这两种日志类型。

所有双重身份验证审核日志

属性
serviceName oslogin.googleapis.com
resourceName 包含项目编号的字符串。此项目编号指示审核日志属于哪项登录请求。例如,projects/myproject12345
severity 日志消息的严重级别。例如 INFOWARNING
request.email API 调用正在执行身份验证的用户的电子邮件地址。
request.numericProjectId Google Cloud Platform 项目的项目编号。
response.@type type.googleapis.com/google.cloud.oslogin.OsLoginService.v1.StartOrContinueSessionResponse
response.sessionId 唯一地识别会话的 ID 字符串。此会话 ID 将传递给序列中的下一项 API 调用。
response.authenticationStatus 会话状态。例如,AuthenticatedChallenge requiredChallenge pending
response.challenges 可供您为通过此轮身份验证而尝试的一组验证。其中最多可有一项验证已经开始,并且状态为 READY。其他验证则作为可选项提供,用户可以指定这些可选项来取代系统推荐的主要验证方案。

StartSession 审核日志

属性
methodName google.cloud.oslogin.OsLoginService.v1.StartSession
request.@type type.googleapis.com/google.cloud.oslogin.OsLoginService.v1.StartSessionRequest
request.supportedChallengeTypes 可供您从中选择的验证类型或 2FA 方法列表。

ContinueSession 审核日志

属性
methodName google.cloud.oslogin.OsLoginService.v1.ContinueSession
request.sessionId 唯一地识别上一次会话的 ID 字符串。此会话 ID 是由序列中的上一项 API 调用传递而来的。
request.@type type.googleapis.com/google.cloud.oslogin.OsLoginService.v1.ContinueSessionRequest
request.challengeId 识别要启动或执行哪项验证的 ID 字符串。此 ID 必须属于 response.challenges 调用在上一次 API 响应中返回的验证类型。
request.action 要执行的操作。
此页内容是否有用?请给出您的反馈和评价:

发送以下问题的反馈:

此网页
Compute Engine 文档