O SSH permite estabelecer uma conexão de shell interativa e segura com as instâncias de contêiner em execução. Isso dá acesso direto ao sistema de arquivos e ao ambiente de execução do contêiner, permitindo que você inspecione os recursos do sistema, verifique as configurações e solucione problemas.
O SSH para Cloud Run adiciona automaticamente os binários sshd
necessários ao sistema de arquivos do contêiner. Esses binários só ficam acessíveis durante a
sessão SSH e são removidos quando ela termina. As configurações SSH atuais, incluindo entradas /etc/passwd, são ignoradas pelo SSH do Cloud Run em favor das configurações gerenciadas pelo Google.
Os avisos de direitos autorais de código aberto de terceiros para dependências SSH gerenciadas pelo Google
são montados no contêiner quando uma sessão SSH é estabelecida no
seguinte caminho: /usr/share/licenses/google_ssh/THIRD_PARTY_NOTICES.
Limitações
As seguintes limitações se aplicam ao SSH:
- O SSH só está disponível para serviços executados no ambiente de segunda geração do Cloud Run e em instâncias do Cloud Run.
- Ao usar o SSH, as chaves de host na imagem são substituídas. As chaves permanecem substituídas após o término da sessão SSH até que a instância do serviço seja reiniciada.
- Windows: o PuTTY não é compatível. Use o cliente OpenSSH.
- É necessário ter cuidado extra para proteger o contêiner ao usar o SSH. Considere as práticas recomendadas de segurança, como executar o código do aplicativo como um usuário não raiz.
Antes de começar
- Faça login na sua conta do Google Cloud . Se você começou a usar o Google Cloudagora, crie uma conta para avaliar o desempenho dos nossos produtos em situações reais. Clientes novos também recebem US $300 em créditos para executar, testar e implantar cargas de trabalho.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
Roles required to select or create a project
- Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
-
Create a project: To create a project, you need the Project Creator role
(
roles/resourcemanager.projectCreator), which contains theresourcemanager.projects.createpermission. Learn how to grant roles.
-
Verify that billing is enabled for your Google Cloud project.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
Roles required to select or create a project
- Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
-
Create a project: To create a project, you need the Project Creator role
(
roles/resourcemanager.projectCreator), which contains theresourcemanager.projects.createpermission. Learn how to grant roles.
-
Verify that billing is enabled for your Google Cloud project.
-
Ative as APIs Cloud Run Admin, Cloud Resource Manager, Identity-Aware Proxy e Cloud OS Login:
gcloud services enable run.googleapis.com \ iap.googleapis.com \ oslogin.googleapis.com
- Instale e inicialize a CLI gcloud.
-
Atualize os componentes:
gcloud components update
-
Windows:verifique se o cliente OpenSSH está instalado.
O cliente OpenSSH geralmente é instalado por padrão no Windows 10 e em versões mais recentes. Se ele não estiver instalado, execute o seguinte comando no PowerShell como administrador:
Add-WindowsCapability -Online -Name OpenSSH.Client~~~~0.0.1.0
Para mais informações, consulte Instalar o OpenSSH.
- Consulte a página de preços do Cloud Run. Para gerar uma estimativa de custo baseada na projeção de uso deste tutorial, use a calculadora de preços. O SSH cobra pelos bytes de saída da rede.
-
Se o projeto usa o
VPC Service Controls
(VPC-SC), o processo de tunelamento verifica
iaptunnel.googleapis.comcomo o nome do serviço, em vez derun.googleapis.com.
Funções exigidas
Para conseguir as permissões necessárias a fim de concluir estas etapas, peça ao administrador para conceder a você os seguintes papéis do IAM:
- 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 - Administrador de políticas do IAP (
roles/iap.admin) no projeto para operações de gerenciamento do IAP
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.
Se você não for membro da organização a que o projeto pertence, o Cloud Run
bloqueará o acesso SSH. Para ter acesso SSH, adicione o papel roles/compute.osLoginExternalUser ou use um papel personalizado com a permissão compute.oslogin.updateExternalUser.
É possível conceder o papel de usuário de túnel protegido por IAP no nível do projeto para restringir esse papel a um serviço ou instância específica do Cloud Run. Para isso, execute o comando a seguir:
Para um serviço específico
gcloud beta iap tcp add-iam-policy-binding \
--resource-type=cloud-run \
--service=SERVICE \
--region=REGION \
--member=MEMBER \
--role=roles/iap.tunnelResourceAccessor
Substitua:
SERVICE: o nome do serviço.REGION: a região em que o serviço está implantado.MEMBER: a identidade a que o acesso será concedido.
Para uma instância específica
gcloud beta iap tcp add-iam-policy-binding \
--resource-type=cloud-run \
--instance=INSTANCE \
--region=REGION \
--member=MEMBER \
--role=roles/iap.tunnelResourceAccessor
Substitua:
INSTANCE: o nome da instância.REGION: a região em que o serviço está implantado.MEMBER: a identidade a que o acesso será concedido.
Para conceder o roles/iap.tunnelResourceAccessor no nível do projeto e da região, consulte Configurar políticas de acesso do IAP.
Usar SSH com serviços do Cloud Run
Configure o acesso SSH no nível do serviço e conecte-se a ele usando SSH.
Configurar o acesso SSH no nível do serviço
É possível permitir o acesso de inspeção em um serviço específico usando a CLI gcloud ou YAML:
gcloud
Para ativar o acesso em um serviço atual, use o seguinte comando:
gcloud beta run services update SERVICE --ssh
Também é possível permitir o acesso de inspeção a um serviço usando a flag --ssh ao
implantar o serviço.
YAML
Se você estiver criando um novo serviço, pule esta etapa. Se você estiver atualizando um serviço existente, faça o download da configuração YAML correspondente:
gcloud run services describe SERVICE --format export > service.yaml
O exemplo a seguir contém a configuração YAML:
apiVersion: serving.knative.dev/v1 kind: Service metadata: name: SERVICE labels: cloud.googleapis.com/location: REGION annotations: run.googleapis.com/ssh-enabled: "true" run.googleapis.com/launch-stage: BETA spec: template: spec: containers: image: IMAGE_URLSubstitua:
SERVICE: o nome do serviço do Cloud Run.REGION: a região Google Cloud . Por exemplo,us-central1.IMAGE_URL: uma referência à imagem do contêiner, por exemplo,us-docker.pkg.dev/cloudrun/container/hello:latest. Se você usa o Artifact Registry, o repositório REPO_NAME já precisará ter sido criado. O URL segue o formatoLOCATION-docker.pkg.dev/PROJECT_ID/REPO_NAME/PATH:TAG
Crie ou atualize o serviço usando o seguinte comando:
gcloud run services replace service.yaml
Por padrão, o comando
gcloud run services replaceusa o arquivoservice.yaml, se ele estiver presente.
É possível desativar o acesso SSH por serviço usando a CLI gcloud ou YAML:
gcloud
Para desativar o acesso ao serviço, use o seguinte comando:
gcloud beta run services update SERVICE --no-ssh
YAML
Se você estiver criando um novo serviço, pule esta etapa. Se você estiver atualizando um serviço existente, faça o download da configuração YAML correspondente:
gcloud run services describe SERVICE --format export > service.yaml
O exemplo a seguir contém a configuração YAML:
apiVersion: serving.knative.dev/v1 kind: Service metadata: name: SERVICE labels: cloud.googleapis.com/location: REGION annotations: run.googleapis.com/ssh-enabled: "false" run.googleapis.com/launch-stage: BETA spec: template: spec: containers: image: IMAGE_URLSubstitua:
SERVICE: o nome do serviço do Cloud Run.REGION: a região Google Cloud . Por exemplo,us-central1.IMAGE_URL: uma referência à imagem do contêiner, por exemplo,us-docker.pkg.dev/cloudrun/container/hello:latest. Se você usa o Artifact Registry, o repositório REPO_NAME já precisará ter sido criado. O URL segue o formatoLOCATION-docker.pkg.dev/PROJECT_ID/REPO_NAME/PATH:TAG
Crie ou atualize o serviço usando o seguinte comando:
gcloud run services replace service.yaml
Por padrão, o comando
gcloud run services replaceusa o arquivoservice.yaml, se ele estiver presente.
Conectar-se ao serviço com SSH
Para se conectar a um serviço usando SSH, use a CLI gcloud:
Para se conectar a um serviço usando SSH, use o seguinte comando da Google Cloud CLI:
gcloud beta run services ssh SERVICE --region=REGION --project=PROJECT_ID
Substitua:
SERVICE: o nome do serviço.REGION: a região em que o serviço está implantado.PROJECT_ID: o ID do projeto do Google Cloud .Se for preciso digitar uma senha longa para a chave SSH, deixe em branco. No entanto, se você inserir uma senha, use a mesma em todas as sessões SSH subsequentes do mesmo espaço de trabalho.
Quando a sessão SSH for concluída, o Cloud Run vai mostrar a seguinte mensagem:
Project: my-project Region:REGIONService: busybox Revision: busybox-REVISION Instance: INSTANCE-ID Container: busybox-1 Image: IMAGEPara encerrar a sessão SSH, digite
exit. Todas as mudanças feitas no contêiner serão mantidas enquanto ele estiver ativo. Sair da sessão não reinicia nem encerra o contêiner.
Especificar uma instância de serviço
Para se conectar a uma instância de serviço específica usando SSH, use a Google Cloud CLI.
Para se conectar a uma instância de serviço do Cloud Run usando SSH, use o seguinte comando da Google Cloud CLI:
gcloud beta run services ssh SERVICE --region=REGION --project=PROJECT_ID --instance=INSTANCE_ID
Substitua:
SERVICE: o nome do serviço.REGION: a região em que o serviço está implantado.PROJECT_ID: o ID do projeto do Google Cloud .INSTANCE_ID: o ID da instância Para encontrar o ID da instância de serviço, acesse a página Registros na seção Observabilidade. O ID da instância está localizado no campolabelsde uma entrada de registro. Não é possível encontrar o ID da instância se você encerrar a instância específica antes de se conectar a ela.
Especificar uma revisão
Para se conectar a uma revisão específica usando SSH, use a Google Cloud CLI.
Para se conectar a uma revisão de serviço do Cloud Run usando SSH, use o seguinte comando da Google Cloud CLI:
gcloud beta run services ssh SERVICE --region=REGION --project=PROJECT_ID --revision=REVISION
Substitua:
SERVICE: o nome do serviço.REGION: a região em que o serviço está implantado.PROJECT_ID: o ID do projeto do Google Cloud .REVISION: o nome da revisão.
Usar SSH com instâncias do Cloud Run
Configure o acesso SSH no nível da instância e conecte-se a ela usando SSH.
Configurar o acesso SSH no nível da instância
O SSH é ativado por padrão para instâncias.
É possível desativar o acesso SSH por instância usando a CLI gcloud ou YAML:
gcloud
Para desativar o acesso na instância, use o seguinte comando:
gcloud beta run instances update INSTANCE --no-ssh
YAML
Se você estiver criando uma nova instância, pule esta etapa. Se você estiver atualizando uma instância, baixe a configuração YAML correspondente:
gcloud beta run instances describe INSTANCE --format export > instance.yaml
O exemplo a seguir contém a configuração YAML:
apiVersion: run.googleapis.com/v1 kind: Instance metadata: name: INSTANCE labels: cloud.googleapis.com/location: REGION annotations: run.googleapis.com/ssh-enabled: "false" run.googleapis.com/launch-stage: BETA spec: containers: image: IMAGE_URLSubstitua:
INSTANCE: o nome da sua instância do Cloud Run.REGION: a região Google Cloud . Por exemplo,us-central1.IMAGE_URL: uma referência à imagem de contêiner, comous-docker.pkg.dev/cloudrun/container/hello:latest.
Crie ou atualize a instância usando o seguinte comando:
gcloud beta run instances replace instance.yaml
É possível permitir o acesso de inspeção em uma instância específica usando a CLI gcloud ou YAML.
gcloud
Para ativar o acesso em uma instância atual, use o seguinte comando:
gcloud beta run instances update INSTANCE --ssh
Também é possível permitir o acesso de inspeção em uma instância usando a flag --ssh ao
fazer a implantação.
YAML
Se você estiver criando uma nova instância, pule esta etapa. Se você estiver atualizando uma instância, baixe a configuração YAML correspondente:
gcloud beta run instances describe INSTANCE --format export > instance.yaml
O exemplo a seguir contém a configuração YAML:
apiVersion: run.googleapis.com/v1 kind: Instance metadata: name: INSTANCE labels: cloud.googleapis.com/location: REGION annotations: run.googleapis.com/ssh-enabled: "true" run.googleapis.com/launch-stage: BETA spec: containers: image: IMAGE_URLSubstitua:
INSTANCE: o nome da sua instância do Cloud Run.REGION: a região Google Cloud . Por exemplo,us-central1.IMAGE_URL: uma referência à imagem de contêiner, comous-docker.pkg.dev/cloudrun/container/hello:latest.
Crie ou atualize a instância usando o seguinte comando:
gcloud beta run instances replace instance.yaml
Conectar-se à instância usando SSH
Para se conectar a uma instância usando SSH, use o seguinte comando da Google Cloud CLI:
gcloud beta run instances ssh INSTANCE --region=REGION --project=PROJECT_ID
Substitua:
INSTANCE: o nome da instância.REGION: a região em que o serviço está implantado.PROJECT_ID: o ID do projeto do Google Cloud .
Se for preciso digitar uma senha longa para a chave SSH, deixe em branco. No entanto, se você inserir uma senha, use a mesma em todas as sessões SSH subsequentes do mesmo espaço de trabalho.
Quando a sessão SSH for concluída, o Cloud Run vai mostrar a seguinte mensagem:
Project: my-project
Region: REGION
Instance: INSTANCE
Revision: REVISION
Container: CONTAINER
Image: IMAGE
Para encerrar a sessão SSH, digite exit.
Usar o cliente OpenSSH para se conectar
Para usar o cliente OpenSSH para se conectar:
- Execute o comando
gcloud beta run services sshno serviço de destino. - Inicie o túnel SSH e gere o certificado.
Adicione o seguinte à sua configuração de SSH:
Host cloud-run-ssh HostName cloud-run-default User root IdentityFile /Users/USER/.ssh/google_compute_engine CertificateFile /Users/USER/.ssh/google_compute_engine_cert/PROJECT_ID_REGION_SERVICE-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 /Users/USER/google-cloud-sdk/lib/gcloud.py alpha run start-iap-tunnel --project_number=PROJECT_NUMBER --project_id=PROJECT_ID --workload_type=service --deployment_name=SERVICE --region=REGIONSubstitua:
USER: o nome de usuário na sua máquina local.PROJECT_ID: o ID do projeto do Google Cloud .PROJECT_NUMBER: o número do projeto Google Cloud .REGION: a região em que o serviço está implantado.SERVICE: o nome do serviço.
Se a CLI gcloud estiver instalada em outra pasta, talvez seja necessário atualizar o local na última linha.
Execute este comando:
ssh cloud-run-ssh
Seu certificado SSH expira após cinco minutos. Se você tentar estabelecer uma conexão SSH com seu serviço após cinco minutos, será necessário executar gcloud beta run services ssh novamente para gerar o certificado.
Registros de acesso SSH
Para capturar registros de auditoria do gerenciamento de chaves SSH, é necessário ativar os registros de auditoria da API Login do SO do Cloud. Consulte Ver registros de auditoria de login do SO. Para acessar os registros SSH dos recursos do Cloud Run, você precisa ter acesso aos Registros de auditoria do Cloud desse projeto.
O exemplo a seguir consulta todos os serviços do Cloud Run do último dia:
gcloud logging read '
logName="projects/PROJECT_ID/logs/cloudaudit.googleapis.com%2Fdata_access" AND
protoPayload.serviceName="oslogin.googleapis.com" AND
protoPayload.request.instance:"run.googleapis.com"
' --project=PROJECT_ID \
--freshness=1d \
--format="table(timestamp, protoPayload.authenticationInfo.principalSubject:label=USER, protoPayload.request.instance:label=CLOUD_RUN_SERVICE)"
Proteger e controlar o acesso SSH
Você pode controlar quem pode usar o SSH e como ele é restrito no seu ambiente.
Desativar o acesso SSH com políticas da organização
Para definir uma política da organização que desative o SSH, use a restrição personalizada que impede a ativação do acesso de depuração SSH nos serviços do Cloud Run.
A seguir
- Saiba mais sobre como resolver problemas do Cloud Run.
- Saiba mais sobre como resolver problemas com serviços do Cloud Run.
- Leia sobre os problemas conhecidos no Cloud Run.