Nesta página, descrevemos como usar o SSH para se conectar aos serviços do Cloud Run por encaminhamento de TCP do Identity-Aware Proxy (IAP).
Ao proteger suas conexões SSH com o IAP, você pode depurar instâncias de contêiner individuais em um ambiente seguro.
Antes de começar
- Verifique se o serviço do Cloud Run está sendo executado em um ambiente de execução de segunda geração e inclui as ferramentas de depuração necessárias para executar comandos depois de conectado. Para mais informações, consulte ambientes de execução.
Para garantir que você está usando a versão mais recente da Google Cloud CLI, execute o seguinte comando:
gcloud components updateAtive as APIs Cloud Run, Cloud Resource Manager, Cloud OS Login e Identity-Aware Proxy no projeto.
Para ativar as APIs, execute o seguinte comando:
gcloud services enable \ cloudresourcemanager.googleapis.com \ oslogin.googleapis.com \ iap.googleapis.com \ run.googleapis.com
Funções exigidas
Para receber as permissões necessárias para configurar políticas e se conectar a cargas de trabalho, peça ao administrador que conceda a você os seguintes papéis do IAM:
-
Configure políticas:
- Administrador de políticas do IAP (
roles/iap.admin) no projeto - Administrador do Cloud Run (
roles/run.admin) no projeto
- Administrador de políticas do IAP (
-
Conectar a cargas de trabalho:
- Usuário da conta de serviço (
roles/iam.serviceAccountUser) na conta de serviço - Acesso raiz SSH do Cloud Run (
roles/run.sshRoot) no serviço - Leitor do Cloud Run (
roles/run.viewer) no serviço - Usuário do túnel protegido pelo IAP (
roles/iap.tunnelResourceAccessor) no serviço - Desenvolvedor do Cloud Run (
roles/run.developer) no serviço - Acessador de exibição de registros (
roles/logging.viewAccessor) no projeto - Navegador (
roles/browser) no projeto - Consumidor do Service Usage (
roles/serviceusage.serviceUsageConsumer) no projeto
- Usuário da conta de serviço (
Para mais informações sobre a concessão de papéis, consulte Gerenciar o acesso a projetos, pastas e organizações.
Também é possível conseguir as permissões necessárias usando papéis personalizados ou outros papéis predefinidos.
Limitações
O SSH para Cloud Run tem as seguintes limitações:
- Somente serviços e instâncias do Cloud Run são compatíveis.
- Para serviços, apenas o ambiente de execução de segunda geração é compatível.
- Os jobs do Cloud Run não são compatíveis.
- Os pools de workers não são compatíveis.
- Ao usar o SSH, as chaves de host na imagem são substituídas. As chaves permanecem substituídas após o fim da sessão SSH até que o serviço seja reiniciado.
- Windows: o PuTTY não é compatível. Use o cliente OpenSSH.
Configurar políticas de autorização do IAP
É possível gerenciar o acesso aos recursos do Cloud Run no nível do projeto, da região ou do serviço usando a CLI gcloud ou a API REST do IAP.
É possível configurar políticas para os seguintes identificadores da API Cloud Identity:
- Cloud Identity: por exemplo,
user:EMAIL@example.com - Federação de identidade da força de trabalho: por exemplo:
principal://iam.googleapis.com/locations/global/workforcePools/<var>POOL_ID</var>/subject/<var>SUBJECT_ATTRIBUTE_VALUE</var>
Para mais informações e exemplos de tipos de principais, consulte a lista de identificadores de principais.
Atualizar um serviço do Cloud Run
Para atualizar o serviço e ativar o SSH, execute o seguinte comando:
gcloud beta run services update \
SERVICE_NAME \
--ssh
Substitua SERVICE_NAME pelo nome do
serviço do Cloud Run. É possível implantar um serviço do Cloud Run
adicionando --ssh a gcloud beta run deploy.
Conceder acesso a todos os recursos do Cloud Run em um projeto
Para gerenciar o acesso a todos os recursos em um projeto, aplique a vinculação de política do IAM no nível do projeto.
gcloud
Execute este comando:
gcloud beta iap tcp add-iam-policy-binding \
--member='USER' \
--role='roles/iap.tunnelResourceAccessor' \
--resource-type=cloud-run
Substitua USER pelo identificador principal do
usuário, por exemplo, user:user@example.com ou o
principal da Federação de identidade de colaboradores.
API REST
Envie uma solicitação POST para o endpoint da política do projeto:
curl -X POST \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "Content-Type: application/json" \
-d '{
"policy": {
"bindings": [
{
"role": "roles/iap.tunnelResourceAccessor",
"members": ["USER"]
}
]
}
}' \
"https://iap.googleapis.com/v1/projects/\
PROJECT_NUMBER/iap_tunnel/cloudRun:setIamPolicy"
Substitua:
USER: o identificador principal do usuário.PROJECT_NUMBER: o número do projeto Google Cloud em que os recursos estão hospedados.
Conceder acesso a todos os recursos do Cloud Run em um local específico
Para restringir o acesso a todos os recursos em uma região específica (por exemplo,
us-central1), aplique a vinculação de política no nível do local.
gcloud
Execute este comando:
gcloud beta iap tcp add-iam-policy-binding \
--member='USER' \
--role='roles/iap.tunnelResourceAccessor' \
--resource-type=cloud-run \
--region=LOCATION
Substitua:
USER: o identificador principal do usuário.LOCATION: a região Google Cloud em que os recursos são implantados (por exemplo,us-central1).
API REST
Envie uma solicitação POST para o endpoint da política de local:
curl -X POST \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "Content-Type: application/json" \
-d '{
"policy": {
"bindings": [
{
"role": "roles/iap.tunnelResourceAccessor",
"members": ["USER"]
}
]
}
}' \
"https://iap.googleapis.com/v1/projects/\
PROJECT_NUMBER/iap_tunnel/cloudRun/locations/\
LOCATION:setIamPolicy"
Substitua:
USER: o identificador principal do usuárioPROJECT_NUMBER: o número do projeto Google CloudLOCATION: a Google Cloud região
Conceder acesso a um serviço específico do Cloud Run
Para restringir o acesso a um único serviço nomeado no seu projeto, aplique a vinculação de política no nível do serviço.
gcloud
Execute este comando:
gcloud beta iap tcp add-iam-policy-binding \
--member='USER' \
--role='roles/iap.tunnelResourceAccessor' \
--resource-type=cloud-run \
--service=SERVICE_NAME \
--region=LOCATION
Substitua:
USER: o identificador principal do usuárioSERVICE_NAME: o nome da lógica de serviço a ser conectadaLOCATION: a Google Cloud região em que o serviço é implantado
API REST
Envie uma solicitação POST para o endpoint da política de serviço:
curl -X POST \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "Content-Type: application/json" \
-d '{
"policy": {
"bindings": [
{
"role": "roles/iap.tunnelResourceAccessor",
"members": ["USER"]
}
]
}
}' \
"https://iap.googleapis.com/v1/projects/\
PROJECT_NUMBER/iap_tunnel/cloudRun/locations/\
LOCATION/services/\
SERVICE_NAME:setIamPolicy"
Substitua:
USER: o identificador principal do usuárioPROJECT_NUMBER: o número do projeto Google CloudLOCATION: a Google Cloud regiãoSERVICE_NAME: o nome do serviço
Conectar usando SSH
Para estabelecer um túnel SSH com um recurso do Cloud Run, use a CLI gcloud.
Conectar-se a um serviço
Execute este comando:
gcloud beta run services ssh SERVICE_NAME \
--region=LOCATION \
--project=PROJECT_ID
Substitua:
SERVICE_NAME: o nome do serviço a ser conectadoLOCATION: a Google Cloud região em que o serviço está localizado.PROJECT_ID: o ID do seu projeto Google Cloud
Sair da sessão
Para encerrar a sessão SSH, digite exit.
As modificações feitas no contêiner persistem apenas enquanto ele estiver ativo. Sair da sessão não interrompe nem reinicia o contêiner automaticamente.
Usar um cliente OpenSSH local
Para usar um cliente OpenSSH local para conexões:
Para iniciar o túnel SSH e gerar o certificado necessário, execute o seguinte comando:
gcloud beta run services ssh SERVICE_NAME \ --region=LOCATION \ --project=PROJECT_IDSubstitua:
SERVICE_NAME: o nome do serviçoLOCATION: a Google Cloud regiãoPROJECT_ID: o ID do projeto do Google Cloud
Adicione o seguinte código de configuração ao arquivo
~/.ssh/configlocal:Host cloud-run-ssh HostName cloud-run-default User root IdentityFile ~/.ssh/google_compute_engine CertificateFile ~/.ssh/google_compute_engine_cert/PROJECT_ID_LOCATION_SERVICE_NAME-cert.pub CheckHostIP no HashKnownHosts no HostKeyAlias cloud-run-default IdentitiesOnly yes StrictHostKeyChecking no UserKnownHostsFile /dev/null ProxyUseFdpass no ProxyCommand /usr/local/bin/python3 -S ~/google-cloud-sdk/lib/gcloud.py beta run start-iap-tunnel --project_number=PROJECT_NUMBER --project_id=PROJECT_ID --workload_type=service --deployment_name=SERVICE_NAME --region=LOCATIONSe o caminho de instalação do
gcloudfor diferente, atualize o prefixo no caminho doProxyCommand.Substitua:
PROJECT_ID: o ID do projeto do Google CloudLOCATION: a Google Cloud regiãoSERVICE_NAME: o nome do serviçoPROJECT_NUMBER: o número do projeto do Google Cloud
Conecte-se ao serviço usando OpenSSH:
ssh cloud-run-ssh