IAP 重新验证

借助 IAP 重新身份验证,服务和应用所有者或Google Cloud 管理员可以要求经过身份验证的最终用户在访问受 IAP 保护的服务或应用时在指定时间后重新进行身份验证,并限制用户在需要进行身份验证之前可以访问受 IAP 保护的服务或应用的时长。

IAP 重新身份验证(或重新验证)旨在为受 IAP 保护的服务和应用强制执行重新身份验证政策。借助此服务,您可以针对处理机密信息的关键服务和应用强制执行重新身份验证政策。例如,您可以指定访问重要人力资源应用的用户每小时使用第二重身份验证方式重新进行身份验证。

支持的重新身份验证方法

您可以使用以下方法来管理重新身份验证设置:

  • 登录:最终用户使用其登录凭证重新进行身份验证。

  • 安全密钥:最终用户使用其配置的安全密钥重新进行身份验证。

  • 已注册的双重身份验证方法:最终用户使用其已注册的双重身份验证方法之一重新进行身份验证。

如需了解详情,请参阅 IapSettings。

设置重新身份验证政策

reauthSettings 作为 IapSettings 的一部分包含在内,可以在资源层次结构中的任何资源类型上设置。您可以在组织、文件夹、项目或服务级设置 reauthSettings,以应用限制。例如,您可以将组织中所有应用或特定应用的会话时长限制为最长 1 小时。

有两种政策类型可用于设置重新身份验证:

  • 最小值:如果对某个资源(例如组织)将政策类型设置为 MINIMUM,则在评估较低级别资源(例如文件夹)的重新身份验证设置时,系统会合并这两项设置。如果较低级别的资源没有重新身份验证设置,则合并结果为较高级别资源的非空设置。否则,合并操作会采用两个资源中较短的会话时长和优先级较高的重新身份验证方法。生成的合并政策类型设置为 MINIMUM。

  • 默认:如果政策类型在资源(例如组织)上设置为 DEFAULT,则在评估较低级层资源(例如文件夹)上的重新身份验证设置时,如果已配置较低级层资源设置,则使用该设置;否则,将应用较高级层资源重新身份验证设置。

对于这两种政策类型,系统都会重复评估流程,以确定目标服务或应用的 reauthSettings。任何级别的有效 reauthSettings 均按如下方式确定:

  • 继承:较高级别资源的设置会与较低级别资源的设置合并。

  • 合并规则:如果较低级别的资源没有特定的重新身份验证设置,则会继承较高级别的设置。

    如果两个级别都有 reauthSettings,则合并结果会使用以下内容:

    • 会话时长较短。

    • 优先级较高的重新身份验证方法。

    • 优先级顺序为 Secure key(最高)、Enrolled second factors(中等)和 Login(最低)。

  • 生成的政策类型:合并设置的政策类型为 MINIMUM。

以下示例展示了评估前后的设置。在评估期间,文件夹和组织 reauthSettings 会合并,从而将文件夹的政策类型更改为 MINIMUM。然后,合并后的设置将与服务或应用 reauthSettings 合并。

组织 IapSettings:

accessSettings:
  reauthSettings:
    method: "ENROLLED_SECOND_FACTORS"
    maxAge: "3600s"
    policyType: "MINIMUM"

文件夹 IapSettings:

accessSettings:
  reauthSettings:
    method: "LOGIN"
    maxAge: "1200s"
    policyType: "DEFAULT"

服务或应用 IapSettings:

accessSettings:
  reauthSettings:
    method: "SECURE_KEY"
    maxAge: "7200s"
    policyType: "DEFAULT"

合并后的设置:

组织 IapSettings:

accessSettings:
  reauthSettings:
    method: "ENROLLED_SECOND_FACTORS"
    maxAge: "3600s"
    policyType: "MINIMUM"

文件夹 IapSettings:

accessSettings:
  reauthSettings:
    method: "ENROLLED_SECOND_FACTORS"
    maxAge: "1200s"
    policyType: "MINIMUM"

服务或应用 IapSettings:

accessSettings:
  reauthSettings:
    method: "SECURE_KEY"
    maxAge: "1200s"
    policyType: "MINIMUM"

在此示例中,如果每个资源的政策类型都设置为 DEFAULT,则使用服务或应用的 reauthSettings。

MaxAge

使用 maxAge 参数指定最终用户必须重新进行身份验证的频率(以秒为单位)。例如,如需设置一小时重新身份验证政策,请将 seconds 设置为 3600,如以下示例所示:

accessSettings:
  reauthSettings:
    method: "LOGIN"
    maxAge: "3600s"
    policyType: "MINIMUM"

maxAge 的最小值为 300 秒,即 5 分钟。

如需设置重新身份验证政策,请完成以下步骤。

控制台

  1. 前往 IAP 页面。
    转到 Identity-Aware Proxy 页面

  2. 选择一个项目,然后选择要为其设置重新身份验证政策的资源。

  3. 打开资源的设置,然后在重新身份验证政策下,选择配置重新身份验证。

  4. 指定重新身份验证设置,然后点击保存。

gcloud

您可以在组织、项目和文件夹级别为资源和服务设置重新身份验证政策。以下是一些用于设置重新身份验证政策的示例命令。

如需了解详情,请参阅 gcloud iap settings set。

运行以下命令:

gcloud iap settings set SETTING_FILE [--organization=ORGANIZATION --folder=FOLDER --project=/PROJECT --resource-type=RESOURCE_TYPE --service=SERVICE --version=VERSION

如需对组织内的资源设置重新身份验证政策,请运行以下命令:

gcloud iap settings set SETTING_FILE --organization=ORGANIZATION

如需对文件夹中的资源设置重新身份验证政策,请运行以下命令:

gcloud iap settings set SETTING_FILE --folder=FOLDER

如需对项目中的所有 Web 类型资源设置重新身份验证政策,请运行以下命令:

gcloud iap settings set SETTING_FILE --project=PROJECT --resource-type=iap_web

如需对项目中的 App Engine 服务设置重新身份验证政策,请运行以下命令:

gcloud iap settings set SETTING_FILE --project=PROJECT --resource-type=app-engine --service=SERVICE

其中 SETTING_FILE 为:

accessSettings:
  reauthSettings:
    method: "LOGIN"
    maxAge: "3600s"
    policyType: "MINIMUM"

替换以下内容:

  • FOLDER:文件夹 ID。

  • ORGANIZATION:组织 ID。

  • PROJECT:项目 ID。

  • RESOURCE_TYPE:IAP 资源类型。必须为 app-engine、iap_web、compute、organization 或 folder。

  • SERVICE:服务名称。如果 resource-type 设置为 compute 或 app-engine,则此属性为可选属性。

  • VERSION:版本名称。这不适用于 compute 资源类型,对于 app-engine 资源类型是可选的。

API

运行以下命令,准备 iap_settings.json 文件。根据需要更新值。

cat << EOF > iap_settings.json
{
  "access_settings": {
      "reauth_settings": {
            "method": "LOGIN",
            "maxAge": "300s",
            "policy_type": "DEFAULT"
        }
    }
}
EOF

运行 gcloud iap settings get 命令,获取资源名称。从输出中复制名称字段。您将在后续步骤中用到此名称。

gcloud iap settings get [--organization=ORGANIZATION --folder=FOLDER --project=/PROJECT --resource-type=RESOURCE_TYPE --service=SERVICE --version=VERSION]

将以下命令中的 RESOURCE_NAME 替换为上一步中的名称。IapSettings 将会更新。

curl -X PATCH \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "Accept: application/json" \
-H "Content-Type: application/json" \
-d @iap_settings.json \
"https://iap.googleapis.com/v1/RESOURCE_NAME:iapSettings?updateMask=iapSettings.accessSettings.reauthSettings"

了解重新身份验证凭据

重新身份验证成功后,IAP 会在最终用户的浏览器中创建一个 Cookie。为防止同一网域中的应用频繁重新进行身份验证,Cookie 会在顶级私有网域上设置,并且对整个网域有效。

例如,foo.example.com 是受 IAP 保护的资源,并且具有 IAP 重新身份验证政策。成功重新进行身份验证后,IAP 会在 example.com 上设置 Cookie,因为这是顶级私有网域。来自同一顶级私有网域(例如 bar.example.com)的应用使用相同的重新身份验证凭据,并且只要凭据有效,就不会提示用户重新进行身份验证。

对于 myapp.appspot.com 等网址,appspot.com 是公共网域,因此顶级专用网域是 myapp.appspot.com。

已知限制

  • 只有浏览器流支持重新身份验证。不支持以编程方式访问用户账号。例如,移动应用和桌面应用无法重新对用户进行身份验证,因为这些应用无法访问需要重新进行身份验证的资源。

  • 服务账号和 IAP-TCP 不受重新身份验证要求的约束。

  • 重新身份验证不适用于 Identity and Access Management 成员类型 allUsers。

  • 重新身份验证不支持外部身份(例如 OAuth 和 SAML)。

  • IAP 重新身份验证不支持员工身份联合身份。