本页面介绍了如何启用基于证书的访问权限 (CBA) Google Cloud 虚拟机专用虚拟机。您可以使用 CBA 来确保从 连接到 Google Cloud 虚拟机。
概览
适用于虚拟机的 CBA 使用 Google Cloud 情境感知访问权限功能来确保 使用双向 TLS (mTLS) 进行访问。以下是您要构建的主要组件 为虚拟机启用和使用 CBA:
- Access Context Manager:可让您创建在 确定对 Web 应用的访问权限。
- Identity-Aware Proxy (IAP):IAP TCP 转发可让您建立加密的 通过该隧道,您可以将 SSH、RDP 和其他流量转发到虚拟机实例。 此外,IAP 政策还为您提供了 控制哪些用户可以建立通向特定虚拟机的隧道 以及用户必须满足哪些访问条件才能使用此类 隧道。
- Chrome 企业版政策:在用户之间提供双向身份验证 (mTLS) 和虚拟机。
- Google Cloud CLI:在用户和虚拟机之间提供双向身份验证 (mTLS) 。
准备工作
确保您已创建 CBA 访问权限级别 Google Cloud 项目的配额。
授予通过 IAP TCP 转发访问虚拟机的角色
您必须为项目授予适当的 Identity and Access Management (IAM) 角色, 允许用户或用户群组使用 IAP TCP 转发来访问虚拟机。
下表显示了您需要授予受信任角色的预定义角色 TCP 转发和相关任务的管理人员。
任务 | 角色 | 更多信息 |
---|---|---|
TCP 转发 |
IAP 保护的隧道用户 (roles/iap.tunnelResourceAccessor )
|
授予对项目中所有虚拟机实例的访问权限 或授予对特定虚拟机的访问权限 |
通过 SSH 访问 |
计算实例管理员 (v1) (roles/compute.instanceAdmin.v1 )
|
|
OS Login(推荐) | 各种 | <ph type="x-smartling-placeholder"></ph> 为用户账号配置 OS Login 角色 |
使用服务账号 | Service Account User (roles/iam.serviceAccountUser ) |
<ph type="x-smartling-placeholder"></ph> serviceAccountUser 角色 |
如需详细了解如何授予 IAP TCP 转发角色, 请参阅授予 IAP TCP 转发角色。
配置对虚拟机的基于证书的访问权限
虽然使用 IAP-TCP,您可以授予对集群中的所有虚拟机实例的访问权限 项目时,您必须为每个虚拟机实例配置基于证书的访问权限。
要向用户或用户组授予对虚拟机基于证书的访问权限,请授予
虚拟机实例的 roles/iap.tunnelResourceAccessor
角色。其他角色
可以对项目进行授权
控制台
API
要配置对虚拟机基于证书的访问权限,请修改应用的
policy.json
文件。
请参阅管理对受 IAP 保护的资源的访问 详细了解如何使用 IAM API 管理访问权限政策。
导出以下变量。
export IAP_BASE_URL=https://iap.googleapis.com/v1/projects/PROJECT_NUMBER/iap_tunnel # Replace POLICY_FILE.JSON with the name of JSON file to use for setIamPolicy export JSON_NEW_POLICY=POLICY_FILE.JSON
使用
getIamPolicy
方法获取 Compute Engine 实例的 IAM 政策。末尾的空数据位会启动 curl 命令。 请求转换为POST
,而不是GET
。curl -i -H "Authorization: Bearer $(gcloud auth print-access-token)" \ ${IAP_BASE_URL}/zones/ZONE_NAME/instances/INSTANCE_ID or INSTANCE_NAME:getIamPolicy \ -d ''
将
iap.tunnelResourceAccessor
角色和基于证书的访问权限授予 方法是修改 IAM 政策 JSON 文件。以下是一个
policy.json
文件示例,该文件向 向一组虚拟机实例管理员授予iap.tunnelResourceAccessor
角色,从而授予 以便对受 IAP 保护的隧道资源进行基于证书的访问。请注意,如果主账号具有 Owner 角色,则他们有权使用 使用 IAP 进行 TCP 转发。
{ "policy": { "bindings": [ { "role": "roles/iap.tunnelResourceAccessor", "members": ["group:instance-admins@example.com"], "condition": { "expression": "\"accessPolicies/POLICY_NAME/accessLevels/CERTIFICATE_BASED_ACCESS_LEVEL_NAME\" in request.auth.access_levels, "title": "CERTIFICATE_BASED_CONDITION_NAME" } } ] } }
要查找政策名称,请按以下步骤操作: 调用
accessPolicies.list
方法。GET https://accesscontextmanager.googleapis.com/v1/accessPolicies
使用
setIamPolicy
方法设置新的policy.json
文件。curl -i -H "Content-Type:application/json" \ -H "Authorization: Bearer $(gcloud auth print-access-token)" \ ${IAP_BASE_URL}/zones/ZONE_NAME/instances/INSTANCE_ID or INSTANCE_NAME:setIamPolicy \ -d @${JSON_NEW_POLICY}
使用客户端证书访问虚拟机
如需使用客户端证书访问虚拟机,请使用以下方法之一。
- 使用企业证书: 如果您有 PKI 基础架构,请使用此方法。
- 使用端点验证配置的证书: 如果您没有 PKI 基础架构,请使用此方法。端点验证 自动预配和注册自签名证书 适用于各种设备的 Google Cloud。
使用 Chrome 浏览器上的客户端证书访问虚拟机
- 使用以下任一选项配置 Chrome 浏览器。
- 在 Chrome 浏览器中,输入以下域名以访问
Google Cloud 控制台:
console-secure.cloud.google.com
。 - 通过以下方式访问 Google Cloud 虚拟机: IAP 隧道。
使用 gcloud CLI 上的客户端证书访问虚拟机
使用以下方法之一配置 gcloud CLI。
使用 IAP 隧道访问 Google Cloud 虚拟机。