本页介绍了如何使用通过 Endpoint Verification 预配的证书启用基于证书的访问 (CBA)。
您可以使用端点验证为设备自动配置自签名证书。借助端点验证预配的证书,您无需 PKI 基础架构即可使用 CBA。这些证书存储在 macOS 上的钥匙串中、Windows 上的证书存储区中,以及 Linux 上的文件系统中。
如果您拥有 PKI 基础架构,请参阅使用企业证书启用基于证书的访问以启用 CBA。
您可以在以下操作系统上启用已预配的端点验证证书:
- 使用 Chrome 浏览器的 macOS 和 Windows 设备
- 使用 Google Cloud CLI 的 macOS、Windows 和 Linux
如果您的操作系统未列出,请参阅使用不完全受支持的操作系统。
准备工作
在继续之前,请确保您满足以下要求:
您为 Google Cloud 项目创建了 CBA 访问权限级别。
您可以使用以下任一方法对资源强制执行 CBA: Google Cloud
- (推荐)通过使用情境感知访问权限政策强制执行基于证书的访问,针对用户配置规则。
- 通过使用 VPC Service Controls 强制执行基于证书的访问,配置与数据相关的规则。
您有权使用有效的客户端证书完成 mTLS 连接流程。
设置“端点验证”
按照说明为贵组织中的所有用户设备安装 Chrome 端点验证扩展程序。该扩展程序会将自签名证书预配到您的设备,并将证书元数据同步到 Google Cloud。
安装端点验证帮助程序应用。若要将端点验证与 CBA 搭配使用,必须安装此应用。
配置用户的 Chrome 浏览器
若要将用户的 Chrome 浏览器配置为使用端点验证预配的证书,您必须配置 AutoSelectCertificateFor网址s Chrome 政策,以允许端点验证搜索设备证书并通过 Chrome 收集。
- 确保用户的 Chrome 浏览器由 Chrome 浏览器云管理。
在 Google 管理控制台中,添加 AutoSelectCertificateForUrls 政策。
- 依次选择设备 > Chrome > 设置 > 用户和浏览器设置 > 客户端证书。
- 选择适当的组织单元。
添加政策。以下示例添加了 AutoSelectCertificateForUrls 政策:
{"pattern":"https://[*.]clients6.google.com","filter":{"ISSUER":{"CN":"Google Endpoint Verification"}}} {"pattern":"https://console-secure.cloud.google.com","filter":{"ISSUER":{"CN":"Google Endpoint Verification"}}} {"pattern":"https://storage.mtls.cloud.google.com","filter":{"ISSUER":{"CN":"Google Endpoint Verification"}}}
完成配置后,用户可以使用 Chrome 浏览器访问 console-secure.cloud.google.com 上受保护的Google Cloud 资源。
(可选)验证政策配置
- 在 Chrome 浏览器中,输入
chrome://policy
。 - 验证 AutoSelectCertificateForUrls 是否已列在 Chrome 政策下。
- 验证适用对象的值是否为机器。在 ChromeOS 上,适用于的值为当前用户。
- 确保政策的状态没有冲突。如果状态存在冲突,请参阅了解 Chrome 政策管理了解详情。
配置命令行工具
您可以配置以下工具以使用端点验证预配的证书:
- Google Cloud CLI
- Terraform CLI(需要 gcloud CLI 来安装和配置辅助组件。)
由于设备证书存储在 macOS 和 Windows 密钥库中,因此 gcloud CLI 与 Enterprise Certificate Proxy (ECP) 开源组件捆绑在一起,以便与密钥管理 API 交互。
如果您使用的是 Windows 系统,则必须安装 Visual Studio C++ 运行时库。
- 安装 gcloud CLI。在启用捆绑的 Python 选项的情况下进行安装。
- 启用 CBA。
对于 macOS 和 Linux,请下载并运行
install.sh
脚本。./google-cloud-sdk/install.sh
Linux 用户请前往启用预配的 CBA 和 Endpoint Verification 证书 步骤。macOS 和 Windows 用户请完成以下步骤。
使用 gcloud CLI 安装 ECP 辅助组件。
gcloud components install enterprise-certificate-proxy
使用 gcloud CLI 初始化 ECP 证书配置。
macOS
gcloud auth enterprise-certificate-config create macos \ --issuer="Google Endpoint Verification"
Windows
gcloud auth enterprise-certificate-config create windows \ --issuer="Google Endpoint Verification" \ --provider=current_user \ --store=MY
(可选)运行以下命令,手动配置 ECP 证书。
macOS
ECP 配置存储在位于
~/.config/gcloud/certificate_config.json
中的 JSON 文件中。{ "cert_configs": { "macos_keychain": { "issuer": "Google Endpoint Verification" } }, "libs": { "ecp": "<YOUR_GCLOUD_INSTALL_PATH>/google-cloud-sdk/bin/ecp", "ecp_client": "<YOUR_GCLOUD_INSTALL_PATH>/google-cloud-sdk/platform/enterprise_cert/libecp.dylib", "tls_offload": "<YOUR_GCLOUD_INSTALL_PATH>/google-cloud-sdk/platform/enterprise_cert/libtls_offload.dylib" } }
Windows
ECP 配置存储在位于
%APPDATA%\gcloud\certificate_config.json
中的 JSON 文件中。{ "cert_configs": { "windows_store": { "store": "MY", "provider": "current_user", "issuer":"Google Endpoint Verification" } }, "libs": { "ecp": "C:/Users/<USERNAME>/AppData/Local/Google/Cloud SDK/google-cloud-sdk/bin/ecp.exe", "ecp_client": "C:/Users/<USERNAME>/AppData/Local/Google/Cloud SDK/google-cloud-sdk/platform/enterprise_cert/libecp.dll", "tls_offload": "C:/Users/<USERNAME>/AppData/Local/Google/Cloud SDK/google-cloud-sdk/platform/enterprise_cert/libtls_offload.dll" } }
启用 CBA 和 Endpoint Verification 预配的证书。
对于 gcloud CLI,请运行以下命令。
gcloud config set context_aware/use_client_certificate true
对于所有其他命令行工具(包括 Terraform),请设置环境变量。
export GOOGLE_API_USE_CLIENT_CERTIFICATE=1
使用不完全受支持的操作系统
如果您的操作系统不在受支持的操作系统列表中,并且您想使用端点验证预配的证书,则可以将相应环境从基于证书的强制执行中豁免,改为使用其他类型的强制执行来保护它们。例如,使用公司自有设备政策。
请注意,与其他类型的强制执行相比,基于证书的强制执行可提供更强的保护,因为它会通过 mTLS 握手强制执行来自设备的每个请求。
以下示例展示了如何将环境从基于证书的强制执行中豁免,并使用其他类型的强制执行来保护它们。
在本示例中,某个组织使用 macOS、Windows 和 ChromeOS 设备。该组织希望保护来自 Google Cloud 控制台的访问。
创建一个访问权限级别,为所有设备强制执行基于证书的访问权限(ChromeOS 设备除外,此类设备需要使用公司自有设备政策)。将 YAML 文件替换为以下自定义表达式:
certificateBindingState(origin, device) == CertificateBindingState.CERT_MATCHES_EXISTING_DEVICE || (device.os_type == OsType.DESKTOP_CHROME_OS && device.is_corp_owned_device)
完成上文中所述的步骤。