本文档介绍如何使用 OS Login 管理对组织中虚拟机实例的访问权限。
本主题介绍了以下任务:
- 使用组织政策为组织启用 OS Login:使用组织政策以确保组织中的所有新虚拟机实例都启用了 OS Login。
- 向组织外部的用户授予实例访问权限:允许组织外部的用户账号使用 SSH 连接到您的实例。
- 管理 OS Login API:允许或拒绝用户使用 OS Login API。此外,您还可以启用或停用 OS Login API 的功能。
- 审核 OS Login 事件:跟踪与 OS Login 相关的事件和活动,例如添加、删除或更新 SSH 密钥或删除 POSIX 信息。
- 使用 Directory API 修改用户账号:使用 Directory API 更新用户属性,例如用户名和 POSIX 账号信息。
- 将 Linux 组与 OS Login 搭配使用:通过将 Linux 组与 OS Login 搭配使用,管理虚拟机中的用户权限。
- 将 OS Login 与员工身份联合(预览版)搭配使用:在组织使用外部身份提供方时连接到启用了 OS Login 的虚拟机 (IdP)。
准备工作
-
设置身份验证(如果尚未设置)。身份验证是通过其进行身份验证以访问 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
-
Install the Google Cloud CLI, then initialize it by running the following command:
gcloud init
- Set a default region and zone.
enable-oslogin=true
包括在所有新项目的项目元数据中。- 对于新的和现有的虚拟机和项目,将实例或项目元数据中的
enable-oslogin
设置为false
的请求会被拒绝。 - Cloud Data Fusion 6.1.4 版及更低版本
- Cloud Composer 1
- 运行版本低于 1.23.5 的 Google Kubernetes Engine (GKE) 公共集群
- 运行版本低于 1.20.5 的节点池的 GKE 专用集群
- Dataproc Serverless
- Windows Server 和 SQL Server 虚拟机
- Fedora CoreOS 虚拟机。如需管理对使用这些映像创建的虚拟机的实例访问权限,请使用 Fedora CoreOS Ignition 系统
- 在 Google Cloud 控制台中,转到组织政策页面。
- 在政策列表中,点击要求 OS Login 查看 OS Login 限制条件。
- 点击修改,修改现有 OS Login 限制条件。
- 在修改页面,选择自定义。
- 如需对相关限制条件启用强制执行,请选择启用。
- 点击保存应用限制设置。
查找您的组织 ID。
gcloud organizations list
在组织中设置限制条件。将
organization-id
替换为您的组织 ID。gcloud beta resource-manager org-policies enable-enforce compute.requireOsLogin \ --organization=organization-id
- 在 Google Cloud 控制台中,转到项目和组织选择页面。
- 在组织下拉菜单中,选择您的组织。
- 点击全部以查看您的所有组织。
- 点击组织的名称。
- 点击添加以将新角色添加给用户。
- 指定要为其配置实例访问权限的用户的用户名。
- 点击选择角色以指定要向用户授予的角色。
- 在 Compute Engine 角色列表中,选择 Compute OS Login External User 角色。
- 点击添加以确认您要向用户授予选定的角色。
- 如果您尚未这样做,请在项目或组织级别向用户授予其他 OS Login 实例访问权限角色。
- 选择是否在 OS Login API 生成的用户名中包含域名后缀。例如,如果未选中包含域名后缀的设置,则在网域
example.com
中,用户user@example.com
将拥有用户名user
。 - 确定您组织的成员能否使用 OS Login API 管理 SSH 密钥。
- 限制或允许您组织外部的用户访问虚拟机。
- 修改实例登录设置。
- 将用户设为管理员
- 修改账号名称和电子邮件等用户属性
- 为用户添加和移除 SSH 密钥
- 修改 POSIX 账号信息
- 更改用户在实例上连接的用户名。
USER_KEY
:用户的主电子邮件地址、别名电子邮件地址或唯一用户 ID。USERNAME
:Compute Engine 为用户添加到虚拟机的用户名。此值在您的组织中必须唯一,并且不得以波浪号(“~”)结尾,也不能包含英文句点(“.”)。UID
:此用户在虚拟机上使用的用户 ID。此属性的值必须介于1001
和60000
之间,或介于65535
和2147483647
之间。如需访问 Container-Optimized OS,UID
的值必须介于65536
和214748646
之间。UID
在您的组织中必须是独一无二的。GID
:用户所属虚拟机的组 ID。USER_HOME_PATH
:(可选)用户在虚拟机上的主目录。例如/home/example_username
。SHELL_PATH
:(可选)用户连接实例后,指向其默认 shell 的路径。例如/bin/bash
或/bin/sh
。KEY_VALUE
:SSH 公钥值。EXPIRATION_TIME
:(可选)密钥的到期时间(以微秒为单位,从新纪元开始计算,1 秒 = 106 微秒)。- 创建员工身份池。
- 设置
google.posix_username
属性映射。 执行以下操作,将虚拟机配置为将 OS Login 与员工身份联合搭配使用:
通过在虚拟机上运行以下命令,确认虚拟机已安装 OpenSSH 7.4 或更高版本:
ssh -V
您要连接的虚拟机必须具有 OpenSSH 7.4 或更高版本,才能将员工身份联合与 OS Login 搭配使用。
使用员工身份联合的组织中的用户无法访问虚拟机的串行端口。
- 在 Google Cloud 控制台中,转到虚拟机实例页面。
-
在虚拟机实例列表中,点击要连接的实例所在行中的 SSH。
-
In the Google Cloud console, 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.
运行以下命令:
gcloud compute ssh --project=PROJECT_ID --zone=ZONE VM_NAME
通过运行以下命令连接到虚拟机:
PROJECT_ID
:包含虚拟机的项目 IDZONE
:该虚拟机所在的可用区的名称VM_NAME
:虚拟机的名称
如果您已为 Google Cloud CLI 设置默认属性,则可以在此命令中省略
--project
和--zone
标志。例如:gcloud compute ssh VM_NAME
-
在工作站上安装 IAP 桌面(如果尚未安装)。
-
打开 IAP 桌面。此时会打开添加项目窗口。
-
出现提示时,使用员工身份联合登录。
-
在添加项目窗口中,输入包含要连接的虚拟机的项目的项目 ID 或名称。
-
在 Project Explorer 窗口中,再次右键点击虚拟机的名称,然后选择连接以连接到虚拟机。
- 如果您还没有 SSH 密钥,请创建 SSH 密钥。
使用
users.projects.locations.signSshPublicKey
方法为您的 SSH 公钥签名:POST https://oslogin.googleapis.com/v1beta/users/USER/projects/PROJECT_ID/locations/LOCATION:signSshPublicKey { "ssh_public_key": "PUBLIC_KEY" }
替换以下内容:
USER
:员工池中的单个身份,格式如下:principal:%2F%2Fiam.googleapis.com%2Flocations%2Fglobal%2FworkforcePools%2POOL_ID%2Fsubject%2FSUBJECT_ATTRIBUTE_VALUE
替换以下内容:
POOL_ID
:用户所属的员工池。SUBJECT_ATTRIBUTE_VALUE
:用户的google.posix_username
属性映射的值。
PROJECT_ID
:要连接的虚拟机所属项目的 ID。LOCATION
:要连接的虚拟机所在的可用区。PUBLIC_KEY
:SSH 公钥文件的内容。
从
user.signSshPublicKey
方法的输出中复制 SSH 证书,并将内容保存在新文件中。运行以下命令,设置 SSH 证书文件的权限:
sudo chmod 600 FILE_NAME
将
FILE_NAME
替换为该文件的名称。使用以下命令连接到虚拟机:
ssh -i PATH_TO_PRIVATE_KEY -o CertificateFile=PATH_TO_SSH_CERTIFICATE USERNAME@EXTERNAL_IP
替换以下内容:
PATH_TO_PRIVATE_KEY
:您的 SSH 私钥文件的路径。PATH_TO_SSH_CERTIFICATE
:SSH 证书文件的路径。USERNAME
:用户的google.posix_username
属性映射的值。EXTERNAL_IP
:虚拟机的外部 IP 地址。
- 了解如何设置 OS Login。
- 了解如何设置 OS Login 及两步验证。
- 阅读 OS Login 功能概览。
- 排查 OS Login 问题。
REST
如需在本地开发环境中使用本页面上的 REST API 示例,请使用您提供给 gcloud CLI 的凭据。
Install the Google Cloud CLI, then initialize it by running the following command:
gcloud init
如需了解详情,请参阅 Google Cloud 身份验证文档中的使用 REST 时进行身份验证。
OS Login 组织政策
您可以在组织中设置 OS Login 限制条件,以确保所有新项目和在这些新项目中创建的虚拟机实例都启用了 OS Login。
设置此限制条件后,将应用以下条件:
限制
以下产品、功能和虚拟机不支持 OS Login:Cloud Data Fusion、Cloud Composer 和 GKE 的解决方法
如需在使用 Cloud Data Fusion、Cloud Composer 和 GKE 的组织中使用 OS Login,您可以在组织级层启用 OS Login 限制条件,然后选择性地为受影响的项目或文件夹停用限制条件。
如需详细了解如何修改组织政策,请参阅创建和修改政策。
启用组织政策
如需启用 OS Login 政策,您可以使用 Google Cloud CLI 为特定项目和文件夹设置 OS Login 限制条件。您还可以使用 Google Cloud 控制台或 Google Cloud CLI 为整个组织设置 OS Login 限制条件。
控制台
如需通过控制台设置 OS Login 组织政策,请完成以下步骤:
gcloud
如需设置 OS Login 组织政策,请使用
gcloud beta resource-manager org-policies enable-enforce
命令。您还可以将 OS Login 组织政策应用于分别带有
--folder
或--project
标志以及文件夹 ID 和项目 ID 的文件夹或项目。对于文件夹,请运行以下命令:
gcloud beta resource-manager org-policies enable-enforce compute.requireOsLogin \ --folder=folder-id
对于项目,请运行以下命令:
gcloud beta resource-manager org-policies enable-enforce compute.requireOsLogin \ --project=project-id
替换以下内容:
向组织外部的用户授予实例访问权限。
默认情况下,组织外部的用户无法为组织中的实例设置 SSH 密钥,也无法获取对组织中实例的访问权限。但在某些情况下,您可能需要向属于其他组织的用户或拥有消费者 Google
gmail.com
账号的用户授予实例访问权限。roles/compute.osLoginExternalUser
IAM 角色允许外部 Google 账号配置 POSIX 账号信息,以便与其他 OS Login 角色互动。如需向组织外部的用户授予
roles/compute.osLoginExternalUser
和其他必需的 OS Login 实例访问权限角色,请完成以下步骤:现在,用户可以连接项目中启用了 OS Login 的实例。
管理 OS Login API
在组织级层,您可以通过设置 Google Workspace 管理员控制机制来限制对 OS Login API 的访问权限。如需配置 Google Workspace 管理员控制机制或查看配置选项,请参阅控制组织中的哪些人可以使用 Google Cloud。作为 Google Workspace 管理员,您还可以启用或停用 OS Login API 的某些功能。这包括以下选项:
如需详细了解如何启用或停用 OS Login API 设置,请参阅选择 Google Cloud Platform 设置。
审核 OS Login 事件
作为 Google Workspace 管理员,您可以使用 Google Workspace Admin SDK 审核通过 OS Login API 执行的操作。通过查看这些事件,您可以跟踪用户何时添加、删除或更新 SSH 密钥,或何时删除 POSIX 账号信息。
您可以通过使用
applicationName=gcp
调用Activities.list()
,从 Google Workspace Admin SDK 中检索 OS Login API 审核活动事件。如需了解详情,请参阅 Google Workspace Admin SDK Reports API 文档中的 Google Cloud 活动事件。使用 Directory API 修改用户账号
在连接实例时,OS Login 会使用您的 Cloud Identity 或 Google Workspace 用户设置。如果您是组织管理员,则可以使用 Directory API 为您的 Google Workspace 或 Cloud Identity 用户账号完成以下任务:
以下示例展示了如何使用 Directory API 修改或者移除用户账号。如需详细了解您可以修改的账号属性,请参阅 Directory API 参考文档。
修改账号属性
如需修改用户的 POSIX 账号信息或管理用户的 SSH 密钥,请向
directory.users.update
方法发出PUT
请求,并指定要在用户账号中更改的一个或多个属性。如果您修改了用户的
posixAccounts
属性,则必须在请求中指定当前或新的username
、uid
和gid
值。如果您修改了用户的
sshPublicKeys
属性,则必须在请求中指定key
值。以下是
PUT
请求的示例:PUT https://admin.googleapis.com/admin/directory/v1/users/USER_KEY { "posixAccounts": [ { "username": "USERNAME", "uid": "UID", "gid": "GID", "homeDirectory": "USER_HOME_PATH", "shell": "SHELL_PATH" } ], "sshPublicKeys": [ { "key": "KEY_VALUE", "expirationTimeUsec": EXPIRATION_TIME } ], }
替换以下内容:
移除账号属性
如需清除用户的
posixAccounts
和sshPublicKeys
数据,请向directory.users.update
方法发出PUT
请求,并将posixAccounts
和sshPublicKeys
字段设置为null
:PUT https://admin.googleapis.com/admin/directory/v1/users/USER_KEY { "posixAccounts": null, "sshPublicKeys": null }
将
USER_KEY
替换为用户的主电子邮件地址、别名电子邮件地址或唯一身份用户 ID。将 Linux 群组与 OS Login 搭配使用
组织管理员可以通过创建和管理 POSIX 组,使用 Cloud Identity Groups API 为 OS Login 用户配置补充的 Linux 组。OS Login 将 POSIX 组与组织虚拟机中的补充 Linux 组相关联,以便您可以管理用户在虚拟机中拥有的权限。
管理 Linux 群组中的用户成员资格
如需创建 POSIX 组,请参阅创建和更新 POSIX 组。
如需将用户添加到组,请参阅将用户添加到组或邀请用户加入组。
成员资格更新会在 10 分钟内生效。组更改将在所有新创建的虚拟机中反映。POSIX 组更新最多可能需要六小时才能传播到所有正在运行的虚拟机。用户可能需要退出或使用
newgrp
命令来观察组更改。采用 OS Login 的 Linux 群组的速率限制
采用 OS Login 的 Linux 群组使用
oslogin.googleapis.com/metadata_server_groups_requests
配额。默认情况下,针对特定区域,每个项目的配额限制为 60 个请求/分钟。如果您需要更高的速率限制,可以在 Google Cloud 控制台的“配额”页面中申请更多配额。
将员工身份联合与 OS Login 搭配使用
使用员工身份联合的组织可以使用 OS Login 管理对虚拟机的访问权限。为组织启用员工身份联合后,OS Login 会使用基于证书的身份验证,而不是基于密钥的身份验证来验证用户身份。
须知事项
限制
连接到使用 OS Login 和员工身份联合的虚拟机
您可以使用 Google Cloud 控制台、gcloud CLI 或其他 SSH 客户端连接到将 OS Login 与员工身份联合搭配使用的虚拟机。
控制台
当您通过 SSH-in-browser 连接到将 OS Login 和员工身份联合搭配使用的虚拟机时,Compute Engine 会在您尝试连接时代表您配置 SSH 证书。
如需连接到虚拟机,请执行以下操作:
gcloud
使用 gcloud CLI 连接到将 OS Login 与员工身份联合搭配使用的虚拟机时,Compute Engine 会在您尝试连接时代表您配置 SSH 证书。
通过运行
gcloud compute ssh
命令使用 SSH 连接到虚拟机:IAP 桌面
使用 IAP 桌面连接到将 OS Login 与员工身份联合搭配使用的虚拟机时,Compute Engine 会在您尝试连接时代表您配置 SSH 证书。
要使用 IAP 桌面连接到虚拟机,请执行以下操作:
SSH 客户端
如需使用 SSH 客户端连接到将 OS Login 与员工身份联合搭配使用的虚拟机,请执行以下操作:
后续步骤
如未另行说明,那么本页面中的内容已根据知识共享署名 4.0 许可获得了许可,并且代码示例已根据 Apache 2.0 许可获得了许可。有关详情,请参阅 Google 开发者网站政策。Java 是 Oracle 和/或其关联公司的注册商标。
最后更新时间 (UTC):2024-08-15。
[{ "type": "thumb-down", "id": "hardToUnderstand", "label":"Hard to understand" },{ "type": "thumb-down", "id": "incorrectInformationOrSampleCode", "label":"Incorrect information or sample code" },{ "type": "thumb-down", "id": "missingTheInformationSamplesINeed", "label":"Missing the information/samples I need" },{ "type": "thumb-down", "id": "translationIssue", "label":"翻译问题" },{ "type": "thumb-down", "id": "otherDown", "label":"其他" }] [{ "type": "thumb-up", "id": "easyToUnderstand", "label":"易于理解" },{ "type": "thumb-up", "id": "solvedMyProblem", "label":"解决了我的问题" },{ "type": "thumb-up", "id": "otherUp", "label":"其他" }] -