我正在测试操作系统登录并创建了一个元数据为"enable-oslogin=TRUE"的实例。然后,我将操作系统登录角色添加到我的 account(user@mydomainname.com(。当我尝试时:
user@original_host$ gcloud compute ssh my_instance --project my_project --zone my_zone
GCP 允许我登录,但作为用户user_mydomainname而不是我的原始帐户"用户">
当我尝试时:
user@original_host$ ssh my_instance, it denied my login
.
当我尝试时:
user@original_host$ ssh user_mydomainname@my_instance, it allowed me login, but as user_mydomainname of course.
我从谷歌阅读了一堆操作系统登录文档,但无法找出原因。在一个文档中:https://cloud.google.com/compute/docs/instances/managing-instance-access#login_messages
在Expected login behaviors
部分,它写道:"如果用户名不是由G Suite管理员设置的,OS Login会通过组合与用户的Google个人资料关联的电子邮件中的用户名和域来生成默认的Linux用户名。此命名约定可确保唯一性。例如,如果与Google个人资料关联的用户电子邮件是 user@example.com,则他们生成的用户名是user_example_com。
这看起来像我得到的,但我已为我的帐户设置了操作系统登录角色。
我期待使用操作系统登录角色设置,我可以以原始帐户登录实例:用户
我在这里错过了什么,或者这确实是预期的行为?是否可以让我的帐户"用户"使用操作系统登录而不获取user_mydomainname?
谢谢 菲利普
首先,我尝试通过以下文档在我的测试 VM 上检查它的操作系统登录功能:
-
创建虚拟机实例:
$ gcloud compute instances create os-login-instance-1 --machine-type=n1-standard-1 --zone=europe-west3-a Created [https://www.googleapis.com/compute/v1/projects/test-prj/zones/europe-west3-a/instances/os-login-instance-1]. NAME ZONE MACHINE_TYPE PREEMPTIBLE INTERNAL_IP EXTERNAL_IP STATUS os-login-instance-1 europe-west3-a n1-standard-1 10.156.15.226 35.XXX.236.XXX RUNNING
-
为 VM 启用操作系统登录功能:
$ cloud compute instances add-metadata os-login-instance-1 --metadata enable-oslogin=TRUE --zone=europe-west3-a Updated [https://www.googleapis.com/compute/v1/projects/test-prj/zones/europe-west3-a/instances/os-login-instance-1].
-
为 username@domain.com 添加角色
roles/compute.osAdminLogin
,使其能够使用sudo
命令:$ gcloud projects add-iam-policy-binding test-prj --member='user:username@domain.com' --role='roles/compute.osAdminLogin' Updated IAM policy for project [test-prj].
您可以将roles/compute.osLogin
用于非根访问权限。
-
创建用于连接的 SSH 密钥:
$ ssh-keygen Generating public/private rsa key pair.
-
将 SSH 密钥上传到项目:
gcloud compute os-login ssh-keys add --key-file .ssh/id_rsa.pub
-
连接到您的实例:
$ ssh username_domain_com@35.242.236.114 Linux os-login-instance-1 4.9.0-12-amd64 #1 SMP Debian 4.9.210-1 (2020-01-20) x86_64 The programs included with the Debian GNU/Linux system are free software; the exact distribution terms for each program are described in the individual files in /usr/share/doc/*/copyright. Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent permitted by applicable law. Creating directory '/home/username_domain_com'. username_domain_com@os-login-instance-1:~$ $ gcloud compute ssh os-login-instance-1 Linux os-login-instance-1 4.9.0-12-amd64 #1 SMP Debian 4.9.210-1 (2020-01-20) x86_64 The programs included with the Debian GNU/Linux system are free software; the exact distribution terms for each program are described in the individual files in /usr/share/doc/*/copyright. Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent permitted by applicable law. Last login: Mon Feb 17 12:32:56 2020 from 104.132.189.65 username_domain_com@os-login-instance-1:~$ whoami username_domain_com
或者可以使用 FQDN 名称(应解析(而不是 IP。
正如我们所期望的那样,完整的电子邮件地址已转换,所有点和特殊字符都替换为与文档对应的下划线:
如果用户名不是由 G Suite 管理员设置的,则操作系统登录 通过组合用户名和 与用户的 Google 个人资料关联的电子邮件中的域。这 命名约定可确保唯一性。例如,如果用户发送电子邮件 与谷歌个人资料相关联的是
user@example.com
,然后他们的 生成的用户名为user_example_com
。
username@domain.com becomes -> username_domain_com
我能够连接到 VM,但名称username_domain_com
。
让我们看一下文档 如何将username_domain_com
更改为同一文档中的username
:
G Suite 单位可以选择更改其默认设置以移除 新生成的用户名的域后缀。例如,如果 与谷歌个人资料关联的用户电子邮件
user@example.com
, 然后他们生成的用户名是user
.有关详细信息,请参阅 管理操作系统登录 API。
在这里,您可以找到它以这种方式工作的更多详细信息:
操作系统登录将您的 Linux 用户帐户与您的 Google 身份相关联,以便 您具有一致的用户名、UID 和其他 POSIX 信息,在 您登录的每个虚拟机。这允许 VM 授权您的登录 使用 IAM 权限,以便您可以轻松撤销访问权限。这 POSIX 信息对于消费者身份是不可变的(非 G Suite 用户(。这可以防止不良行为者在 项目所有者无法管理的恶意方式。为了防止 不同组织之间的唯一性冲突 (
user@gmail.com
和user@example.com
( 默认情况下包含域名。
因此,您可以在 G Suite 单位中使用username
而不是username_domain.com
,如果您是个人客户,则不能这样做。
用户名等设置取自目录 API。相关文档页面在这里:https://cloud.google.com/compute/docs/oslogin/manage-oslogin-in-an-org#modify-users
有关更多详细信息,您可能需要查看有关此处链接的目录 API 的文档。