При входе в ОС, как gcloud s sh из одного GCE в другой GCE? - PullRequest
1 голос
/ 02 марта 2020

У меня есть два GCE, у обоих включена регистрация ОС:

1) a_vm, обеспеченный служебной учетной записью a_sv c

2) b_vm, предоставленный служебной учетной записью b_sv c

a_sv c имеет доступ к ОС для входа в b_vm. a_sv c имеет role / compute.osAdminLogin на уровне проекта и role / iam.serviceAccountUser на уровне b_sv c.

Что я пытался:

  • S sh в a_vm и gcloud compute ssh a_vm, затем gcloud compute ssh b_vm

Что случилось:

Время ожидания постоянно. Запросы gcloud, сделанные до зависания, основаны на --log-http:

uri: http://metadata.google.internal/computeMetadata/v1/instance/service-accounts/a_svc@fredzqm-terraform-5.iam.gserviceaccount.com/?recursive=True
uri: http://metadata.google.internal/computeMetadata/v1/instance/service-accounts/ca_svc@my_project.iam.gserviceaccount.com/token
uri: https://compute.googleapis.com/batch/compute/v1
uri: https://compute.googleapis.com/batch/compute/v1
uri: http://metadata.google.internal/computeMetadata/v1/instance/service-accounts/a_svc@my_project.iam.gserviceaccount.com/?recursive=True
uri: https://oslogin.googleapis.com/v1/users/a_svc@my_project.gserviceaccount.com/loginProfile?projectId=fredzqm-terraform-5&alt=json

Что я ожидаю:

На основании https://cloud.google.com/compute/docs/instances/connecting-advanced#sa_ssh_manual, gcloud должен выбрать приложение по умолчанию учетные данные (a_sv c) и использовать их для получения доступа к b_vm через вход в систему ОС.

Что работает:

  • Я проверил, что a_sv c имеет s sh доступ к b_vm. Это работает с моей рабочей станции, используя личные кредиты:

    gcloud compute ssh b_vm --impersonate-service-account a_svc

  • Если я добавлю как sh publi c ключ к a_sv c, а затем используйте ключ publi c для ввода sh в b_vm.

    gcloud compute os-login ssh-keys add --key-file

    ssh sa_<id_of_a_svc>@b_vm -i private_key_path

1 Ответ

1 голос
/ 03 марта 2020

Я пытался воспроизвести вашу проблему и не смог. Мне удалось подключиться к service-account-b-instance из service_account_a_instance в качестве учетной записи службы и выполнять команды в качестве этой учетной записи службы.

Посмотрите на мои шаги ниже:

  1. создать учетную запись службы service_account_a
  2. создать экземпляр виртуальной машины, связанный с service_account_a_instance:

    $ gcloud compute instances create service-account-a-instance --zone=europe-west3-a --machine-type=n1-standard-1 --service-account=service-account-a@test-prj.iam.gserviceaccount.com --scopes=https://www.googleapis.com/auth/cloud-platform --metadata enable-oslogin=TRUE
    
    Created [https://www.googleapis.com/compute/v1/projects/test-prj/zones/europe-west3-a/instances/service-account-a-instance].
    NAME                        ZONE            MACHINE_TYPE   PREEMPTIBLE  INTERNAL_IP  EXTERNAL_IP    STATUS
    service-account-a-instance  europe-west3-a  n1-standard-1               10.156.0.14  35.XXX.75.XXX  RUNNING
    
  3. создать учетную запись службы service_account_b

  4. создать экземпляр виртуальной машины service_account_b_instance, связанный с service_account_b:

    $ gcloud compute instances create service-account-b-instance --zone=europe-west3-a --machine-type=n1-standard-1 --service-account=service-account-b@test-prj.iam.gserviceaccount.com --scopes=https://www.googleapis.com/auth/cloud-platform --metadata enable-oslogin=TRUE
    
    Created [https://www.googleapis.com/compute/v1/projects/test-prj/zones/europe-west3-a/instances/service-account-b-instance].
    NAME                        ZONE            MACHINE_TYPE   PREEMPTIBLE  INTERNAL_IP  EXTERNAL_IP    STATUS
    service-account-b-instance  europe-west3-a  n1-standard-1               10.156.0.16  35.XXX.255.XXX  RUNNING
    
  5. сгенерировать s sh ключей:

    $ ssh-keygen
    Generating public/private rsa key pair.
    
  6. import s sh key:

    $ gcloud compute os-login ssh-keys add --key-file id_rsa.pub
    
  7. подключиться к экземпляру service-account-a-instance:

    $ gcloud compute ssh service-account-a-instance
    Linux service-account-a-instance 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 Mar  2 14:34:51 2020 from 104.132.189.65
    user_domain_com@service-account-a-instance:~$ 
    
  8. подключиться к экземпляру service-account-b-instance из service-account-a-instance:

    user_domain_com@service-account-a-instance:~$ gcloud compute ssh service-account-b-instance --project test-prj --zone europe-west3-a
    
    ...
    
    ssh: connect to host 35.242.255.44 port 22: Connection timed out
    ERROR: (gcloud.compute.ssh) [/usr/bin/ssh] exited with return code [255].
    
  9. включить s sh подключение по VPC network -> Firewall и повторите попытку:

    user_domain_com@service-account-a-instance:~$ gcloud compute ssh service-account-b-instance --project test-prj --zone europe-west3-a
    Permission denied (publickey).
    ERROR: (gcloud.compute.ssh) [/usr/bin/ssh] exited with return code [255].
    
  10. добавьте роль roles/iam.serviceAccountUser в service-account-a и повторите попытку:

    user_domain_com@service-account-a-instance:~$ gcloud compute ssh service-account-b-instance --project test-prj --zone europe-west3-a
    
    Linux service-account-b-instance 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 Mar  2 16:52:28 2020 from 35.198.75.226
    sa_116762935227008431464@service-account-b-instance:~$
    sa_116762935227008431464@service-account-b-instance:~$ uname -a
    Linux service-account-b-instance 4.9.0-12-amd64 #1 SMP Debian 4.9.210-1 (2020-01-20) x86_64 GNU/Linux
    

    и наконец это работает.

...