Configure segredos para serviços

O seu serviço pode ter dependências que exijam chaves da API, palavras-passe, certificados ou outras informações confidenciais. Para o Cloud Run, a Google recomenda que armazene este tipo de informações confidenciais num segredo criado no Secret Manager.

Pode disponibilizar um segredo aos seus contentores de duas formas:

  • Monte cada segredo como um volume, o que torna o segredo disponível para o contentor como ficheiros. A leitura de um volume obtém sempre o valor secreto do Secret Manager, pelo que pode ser usado com a versão mais recente. Este método também funciona bem com a rotação de segredos.
  • Transmita um segredo através de variáveis de ambiente. As variáveis de ambiente são resolvidas no momento do arranque da instância. Por isso, se usar este método, a Google recomenda que fixe o segredo a uma versão específica em vez de usar latest.

Para mais informações, consulte o documento de práticas recomendadas do Secret Manager.

Como os segredos são verificados na implementação e no tempo de execução

Durante a implementação do serviço, todos os segredos usados, quer como variável de ambiente ou montados como um volume, são verificados para garantir que a conta de serviço usada para executar o contentor tem acesso aos mesmos. Se qualquer verificação falhar, a implementação do serviço falha.

Durante o tempo de execução, quando as instâncias são iniciadas:

  • Se o segredo for uma variável de ambiente, o valor do segredo é obtido antes de iniciar a instância. Por isso, se a obtenção do segredo falhar, a instância não é iniciada.
  • Se o segredo estiver montado como um volume, não é feita nenhuma verificação durante o arranque da instância. No entanto, durante a execução, se um segredo estiver inacessível, as tentativas de leitura do volume montado falham.

A propriedade do volume difere consoante o ambiente de execução e o tipo de implementação

Quando monta um volume secreto, a identidade proprietária dos ficheiros e diretórios varia consoante o ambiente de execução da carga de trabalho e se a implementação consiste num ou em vários contentores.

No ambiente de execução de primeira geração onde está a implementar um único contentor, o volume secreto é propriedade da identidade usada para o contentor. Em todos os outros casos, o volume é propriedade da raiz. Isto inclui:

  • Ambiente de execução de primeira geração onde está a implementar vários contentores
  • O ambiente de segunda geração

Antes de começar

  1. Enable the Secret Manager API.

    Enable the API

  2. Use um Secret existente ou crie um Secret no Secret Manager, conforme descrito em Crie um Secret.

Funções necessárias

Para receber as autorizações de que precisa para configurar segredos, peça ao seu administrador que lhe conceda as seguintes funções de IAM:

Para permitir que o Cloud Run aceda ao segredo, a identidade do serviço tem de ter a seguinte função:

Para obter instruções sobre como adicionar o principal da identidade do serviço à função Secret Accessor do Secret Manager, consulte o artigo Faça a gestão do acesso aos segredos.

Para ver uma lista de funções e autorizações de IAM associadas ao Cloud Run, consulte os artigos Funções de IAM do Cloud Run e Autorizações de IAM do Cloud Run. Se o seu serviço do Cloud Run interage com Google Cloud APIs, como as bibliotecas cliente da Google Cloud, consulte o guia de configuração da identidade do serviço. Para mais informações sobre a atribuição de funções, consulte as autorizações de implementação e faça a gestão do acesso.

Torne um segredo acessível ao Cloud Run

Qualquer alteração de configuração leva à criação de uma nova revisão. As revisões subsequentes também vão receber automaticamente esta definição de configuração, a menos que faça atualizações explícitas para a alterar.

Pode tornar um segredo acessível ao seu serviço através da Google Cloud consola, da Google Cloud CLI ou de um ficheiro YAML quando implementa um novo serviço ou atualiza um serviço existente e implementa uma revisão. Clique no separador que quer:

Consola

  1. Na Google Cloud consola, aceda ao Cloud Run:

    Aceda ao Cloud Run

  2. Selecione Serviços no menu e clique em Implementar contentor para configurar um novo serviço. Preencha a página de definições do serviço inicial e, de seguida, clique em Contentores, volumes, rede, segurança para expandir a página de configuração do serviço.

  3. Se estiver a configurar um serviço existente, clique no serviço e, de seguida, em Editar e implementar nova revisão.

  4. Siga os passos para montar o segredo como um volume ou expor o segredo como uma variável de ambiente.

    • Para expor o segredo como uma variável de ambiente:

      1. Clique no separador Recipientes.
      2. No separador Variáveis e segredos, clique em Referenciar um segredo.
      3. No campo Nome 1, introduza o nome da variável de ambiente.
      4. Na lista Segredo, selecione o segredo que quer usar.
      5. Na lista Versão 1, selecione a versão do segredo a referenciar.
      6. Clique em Concluído.
      7. Clique em Criar ou Implementar.
    • Para montar o segredo como um volume:

      1. Clique no separador Volumes e selecione Adicionar volume.
      2. Na lista Tipo de volume, selecione Secreto.
      3. No campo Nome do volume, introduza um nome ou aceite o nome predefinido.
      4. Na lista Segredo, selecione o segredo que quer usar.
      5. No campo Caminho 1, introduza o nome do ficheiro a montar.
      6. Na lista Versão 1, selecione a versão do segredo a que quer fazer referência. Por predefinição, a versão mais recente está selecionada. Se quiser, pode selecionar uma versão específica.
      7. Clique em Concluído.
      8. Navegue para o separador Contentores para montar o segredo no contentor.
      9. No separador Volume mounts, clique em Mount volume.
      10. Na lista Nome 1, selecione o nome do volume.
      11. No campo Caminho de montagem 1, introduza o caminho de montagem para este segredo. Este é o diretório onde são colocadas todas as versões do seu segredo.
      12. Clique em Concluído.
      13. Clique em Criar ou Implementar.

gcloud

Para tornar um segredo acessível ao seu serviço, introduza um dos seguintes comandos.

  • Para montar o segredo como um volume ao implementar um serviço:

    gcloud run deploy SERVICE --image IMAGE_URL  \
    --update-secrets=PATH=SECRET_NAME:VERSION

    Substitua o seguinte:

    • SERVICE: o nome do seu serviço.
    • IMAGE_URL: uma referência à imagem do contentor, por exemplo, us-docker.pkg.dev/cloudrun/container/hello:latest. Se usar o Artifact Registry, o repositório REPO_NAMEtem de já estar criado. O URL segue o formato LOCATION-docker.pkg.dev/PROJECT_ID/REPO_NAME/PATH:TAG
    • PATH: o caminho de montagem do volume e o nome do ficheiro da chave secreta. Tem de começar com uma barra inicial, por exemplo: /etc/secrets/dbconfig/password, onde /etc/secrets/dbconfig/ é o caminho de montagem do volume e password é o nome do ficheiro do segredo.
    • SECRET_NAME: o nome secreto no mesmo projeto, por exemplo, mysecret.
    • VERSION: a versão do secret. Use latest para a versão mais recente ou um número, por exemplo, 2.
  • Para expor o segredo como uma variável de ambiente ao implementar um serviço:

    gcloud run deploy SERVICE \
    --image IMAGE_URL \
    --update-secrets=ENV_VAR_NAME=SECRET_NAME:VERSION

    Substitua o seguinte:

    • SERVICE: o nome do seu serviço.
    • IMAGE_URL: uma referência à imagem do contentor, por exemplo, us-docker.pkg.dev/cloudrun/container/hello:latest. Se usar o Artifact Registry, o repositório REPO_NAMEtem de já estar criado. O URL segue o formato LOCATION-docker.pkg.dev/PROJECT_ID/REPO_NAME/PATH:TAG .
    • ENV_VAR_NAME: o nome da variável de ambiente que quer usar com o segredo.
    • SECRET_NAME: o nome secreto no mesmo projeto, por exemplo, mysecret.
    • VERSION: a versão do secret. Use latest para a versão mais recente ou um número, por exemplo, 2.
  • Pode atualizar vários segredos em simultâneo. Para o fazer, separe as opções de configuração de cada segredo com uma vírgula. O comando seguinte atualiza um segredo montado como um volume e outro segredo exposto como uma variável de ambiente.

    Para atualizar segredos existentes, introduza o seguinte comando:

    gcloud run deploy SERVICE --image IMAGE_URL \
    --update-secrets=PATH=SECRET_NAME:VERSION,ENV_VAR_NAME=SECRET_NAME:VERSION
  • Para limpar os segredos existentes e tornar um novo segredo acessível ao serviço, use a flag --set-secrets:

    gcloud run services update SERVICE \
    --set-secrets="ENV_VAR_NAME=SECRET_NAME:VERSION"

YAML

  1. Se estiver a criar um novo serviço, ignore este passo. Se estiver a atualizar um serviço existente, transfira a respetiva configuração YAML:

    gcloud run services describe SERVICE --format export > service.yaml
  2. Para segredos expostos como variáveis de ambiente, em env, atualize ENV_VAR, VERSION e/ou SECRET_NAME conforme pretendido. Se tiver vários segredos montados como variáveis de ambiente, terá vários destes atributos.

    apiVersion: serving.knative.dev/v1
    kind: Service
    metadata:
      name: SERVICE
    spec:
      template:
        metadata:
          name: REVISION
        spec:
          containers:
          - image: IMAGE_URL
            env:
            - name: ENV_VAR
              valueFrom:
                secretKeyRef:
                  key: VERSION
                  name: SECRET_NAME
  3. Para segredos montados como caminhos de ficheiros, atualize os campos MOUNT_PATH, VOLUME_NAME, VERSION, FILENAME e/ou SECRET_NAME conforme pretendido. Se tiver vários segredos montados como caminhos de ficheiros, terá vários destes atributos.

    apiVersion: serving.knative.dev/v1
    kind: Service
    metadata:
      name: SERVICE
    spec:
      template:
        metadata:
          name: REVISION
        spec:
          containers:
          - image: IMAGE_URL
            volumeMounts:
            - mountPath: MOUNT_PATH
              name: VOLUME_NAME
          volumes:
          - name: VOLUME_NAME
            secret:
              items:
              - key: VERSION
                path: FILENAME
              secretName: SECRET_NAME

    Tenha em atenção que VOLUME_NAME pode ser definido com qualquer nome.

    Substitua o seguinte:

    • SERVICE: o nome do seu serviço do Cloud Run.
    • IMAGE_URL: uma referência à imagem do contentor, por exemplo, us-docker.pkg.dev/cloudrun/container/hello:latest. Se usar o Artifact Registry, o repositório REPO_NAMEtem de já estar criado. O URL segue o formato LOCATION-docker.pkg.dev/PROJECT_ID/REPO_NAME/PATH:TAG .
    • REVISION com um novo nome de revisão ou elimine-o (se existir). Se fornecer um novo nome de revisão, este tem de cumprir os seguintes critérios:
      • Começa com SERVICE-
      • Contém apenas letras minúsculas, números e -
      • Não termina com um -
      • Não exceder 63 carateres
  4. Substitua o serviço pela respetiva nova configuração através do seguinte comando:

    gcloud run services replace service.yaml

Terraform

  1. Crie um Secret e uma versão do Secret.

    resource "google_secret_manager_secret" "default" {
      secret_id = "my-secret"
      replication {
        auto {}
      }
    }
    
    resource "google_secret_manager_secret_version" "default" {
      secret      = google_secret_manager_secret.default.name
      secret_data = "this is secret data"
    }
  2. Crie uma conta de serviço e conceda-lhe acesso ao segredo:

    resource "google_service_account" "default" {
      account_id   = "cloud-run-service-account"
      display_name = "Service account for Cloud Run"
    }
    
    resource "google_secret_manager_secret_iam_member" "default" {
      secret_id = google_secret_manager_secret.default.id
      role      = "roles/secretmanager.secretAccessor"
      # Grant the new deployed service account access to this secret.
      member     = "serviceAccount:${google_service_account.default.email}"
      depends_on = [google_secret_manager_secret.default]
    }
  3. Pode aceder aos segredos do Secret Manager a partir do Cloud Run como caminhos de ficheiros montados ou como variáveis de ambiente.

    1. Para Secrets montados como caminhos de ficheiros, faça referência ao recurso do Gestor Secreto no parâmetro volumes. O name corresponde a uma entrada no parâmetro volume_mounts:

      resource "google_cloud_run_v2_service" "mounted_secret" {
        name     = "service-with-mounted-secret"
        location = "us-central1"
        ingress  = "INGRESS_TRAFFIC_ALL"
      
        deletion_protection = false # set to "true" in production
      
        template {
          volumes {
            name = "my-service-volume"
            secret {
              secret = google_secret_manager_secret.default.secret_id
              items {
                version = "latest"
                path    = "my-secret"
                mode    = 0 # use default 0444
              }
            }
          }
          containers {
            image = "us-docker.pkg.dev/cloudrun/container/hello"
            volume_mounts {
              name       = "my-service-volume"
              mount_path = "/secrets"
            }
          }
          service_account = google_service_account.default.email
        }
        depends_on = [google_secret_manager_secret_version.default]
      }
    2. Para segredos expostos como variáveis de ambiente, referencie o recurso Secret Manager no parâmetro env:

      resource "google_cloud_run_v2_service" "env_variable_secret" {
        name     = "service-with-env-var-secret"
        location = "us-central1"
        ingress  = "INGRESS_TRAFFIC_ALL"
      
        deletion_protection = false # set to "true" in production
      
        template {
          containers {
            image = "us-docker.pkg.dev/cloudrun/container/hello"
            env {
              name = "MY_SECRET"
              value_source {
                secret_key_ref {
                  secret  = google_secret_manager_secret.default.secret_id
                  version = "latest"
                }
              }
            }
          }
          service_account = google_service_account.default.email
        }
        depends_on = [google_secret_manager_secret_version.default]
      }

Referencie segredos de outros projetos

Para fazer referência a um segredo de outro projeto, verifique se a conta de serviço do seu projeto tem acesso ao segredo.

Consola

  1. Na Google Cloud consola, aceda ao Cloud Run:

    Aceda ao Cloud Run

  2. Selecione Serviços no menu e clique em Implementar contentor para configurar um novo serviço. Preencha a página de definições do serviço inicial e, de seguida, clique em Contentores, volumes, rede, segurança para expandir a página de configuração do serviço.

  3. Se estiver a configurar um serviço existente, clique no serviço e, de seguida, em Editar e implementar nova revisão.

  4. Siga os passos para montar o segredo como um volume ou expor o segredo como uma variável de ambiente.

    • Para expor o segredo como uma variável de ambiente:

      1. Clique no separador Recipientes.
      2. No separador Variáveis e segredos, clique em Referenciar um segredo.
      3. No campo Nome 1, introduza o nome da variável de ambiente.
      4. Na lista Secret, clique em Introduzir Secret manualmente.
      5. Introduza o ID do recurso do Secret no seguinte formato:

        projects/PROJECT_NUMBER/secrets/SECRET_NAME
        

        Substitua o seguinte:

        • PROJECT_NUMBER com o seu Google Cloud número do projeto. Para ver instruções detalhadas sobre como encontrar o número do projeto, consulte o artigo Criar e gerir projetos.

        • SECRET_NAME: o nome do segredo no Secret Manager.

      6. Na lista Versão 1, selecione a versão do segredo a referenciar.

      7. Clique em Concluído.

      8. Clique em Criar ou Implementar.

    • Para montar o segredo como um volume:

      1. Clique no separador Volumes e selecione Adicionar volume.
      2. Na lista Tipo de volume, selecione Secreto.
      3. No campo Nome do volume, introduza um nome ou aceite o nome predefinido.
      4. Na lista Secret, clique em Introduzir Secret manualmente.
      5. Introduza o ID do recurso do Secret no seguinte formato:

        projects/PROJECT_NUMBER/secrets/SECRET_NAME
        

        Substitua o seguinte:

        • PROJECT_NUMBER com o seu Google Cloud número do projeto. Para ver instruções detalhadas sobre como encontrar o número do projeto, consulte o artigo Criar e gerir projetos.

        • SECRET_NAME: o nome do segredo no Secret Manager.

      6. No campo Caminho 1, introduza o nome do ficheiro a montar.

      7. Na lista Versão 1, selecione a versão do segredo a que quer fazer referência. Por predefinição, a versão mais recente está selecionada. Se quiser, pode selecionar uma versão específica.

      8. Clique em Concluído.

      9. Navegue para o separador Contentores para montar o segredo no contentor.

      10. No separador Volume mounts, clique em Mount volume.

      11. Na lista Nome 1, selecione o nome do volume.

      12. No campo Caminho de montagem 1, introduza o caminho de montagem para este segredo. Este é o diretório onde são colocadas todas as versões do seu segredo.

      13. Clique em Concluído.

      14. Clique em Criar ou Implementar.

gcloud

  • Para montar um segredo como um volume ao implementar um serviço:

    gcloud run deploy SERVICE --image IMAGE_URL  \
    --update-secrets=PATH=projects/PROJECT_NUMBER/secrets/SECRET_NAME:VERSION

    Substitua o seguinte:

    • SERVICE: o nome do seu serviço.
    • IMAGE_URL: uma referência à imagem do contentor, por exemplo, us-docker.pkg.dev/cloudrun/container/hello:latest. Se usar o Artifact Registry, o repositório REPO_NAMEtem de já estar criado. O URL segue o formato LOCATION-docker.pkg.dev/PROJECT_ID/REPO_NAME/PATH:TAG .
    • PATH: o caminho de montagem do volume e o nome do ficheiro da chave secreta. Tem de começar com uma barra inicial, por exemplo: /etc/secrets/dbconfig/password, onde /etc/secrets/dbconfig/ é o caminho de montagem do volume e password é o nome do ficheiro do segredo.
    • PROJECT_NUMBER com o número do projeto do projeto no qual o segredo foi criado.
    • SECRET_NAME: o nome secreto, por exemplo, mysecret.
    • VERSION com a versão do Secret. Use latest para a versão mais recente ou um número, por exemplo, 2.

YAML

  1. Se estiver a criar um novo serviço, ignore este passo. Se estiver a atualizar um serviço existente, transfira a respetiva configuração YAML:

    gcloud run services describe SERVICE --format export > service.yaml

Devido a restrições relacionadas com a compatibilidade da API, as localizações dos segredos têm de ser armazenadas numa anotação.

  1. Para segredos expostos como variáveis de ambiente:

    apiVersion: serving.knative.dev/v1
    kind: Service
    metadata:
      name: SERVICE
    spec:
      template:
        metadata:
          annotations:
            run.googleapis.com/secrets: SECRET_LOOKUP_NAME:projects/PROJECT_NUMBER/secrets/SECRET_NAME
        spec:
          containers:
          - image: IMAGE_URL
            env:
            - name: ENV_VAR
              valueFrom:
                secretKeyRef:
                  key: VERSION
                  name: SECRET_LOOKUP_NAME

    Substitua o seguinte:

    • SERVICE: o nome do seu serviço.
    • IMAGE_URL: uma referência à imagem do contentor, por exemplo, us-docker.pkg.dev/cloudrun/container/hello:latest. Se usar o Artifact Registry, o repositório REPO_NAMEtem de já estar criado. O URL segue o formato LOCATION-docker.pkg.dev/PROJECT_ID/REPO_NAME/PATH:TAG
    • ENV_VAR
    • PROJECT_NUMBER: o número do projeto no qual o segredo foi criado.
    • SECRET_NAME: o nome secreto, por exemplo, mysecret.
    • VERSION: a versão do secret. Use latest para a versão mais recente ou um número, por exemplo, 2.
    • SECRET_LOOKUP_NAME: qualquer nome que tenha uma sintaxe de nome secreto válida, por exemplo, my-secret, pode ser igual a SECRET_NAME.
  2. Para segredos montados como caminhos de ficheiros:

    apiVersion: serving.knative.dev/v1
    kind: Service
    metadata:
      name: SERVICE
    spec:
      template:
        metadata:
          annotations:
            run.googleapis.com/secrets: SECRET_LOOKUP_NAME:projects/PROJECT_NUMBER/secrets/SECRET_NAME
        spec:
          containers:
          - image: IMAGE_URL
            volumeMounts:
            - mountPath: MOUNT_PATH
              name: VOLUME_NAME
          volumes:
          - name: VOLUME_NAME
            secret:
              items:
              - key: VERSION
                path: FILENAME
              secretName: SECRET_LOOKUP_NAME

    Substitua o seguinte:

    • SERVICE: o nome do seu serviço.
    • IMAGE_URL: uma referência à imagem do contentor, por exemplo, us-docker.pkg.dev/cloudrun/container/hello:latest. Se usar o Artifact Registry, o repositório REPO_NAMEtem de já estar criado. O URL segue o formato LOCATION-docker.pkg.dev/PROJECT_ID/REPO_NAME/PATH:TAG .
    • PATH: o caminho de montagem do volume e o nome do ficheiro da chave secreta. Tem de começar com uma barra inicial, por exemplo: /etc/secrets/dbconfig/password, onde /etc/secrets/dbconfig/ é o caminho de montagem do volume e password é o nome do ficheiro do segredo.
    • PROJECT_NUMBER: o número do projeto no qual o segredo foi criado.
    • SECRET_NAME: o nome secreto, por exemplo, mysecret.
    • VERSION: a versão do secret. Use latest para a versão mais recente ou um número, por exemplo, 2.
    • SECRET_LOOKUP_NAME: qualquer nome que tenha uma sintaxe de nome secreto válida, por exemplo, my-secret, pode ser igual a SECRET_NAME.
    • VOLUME_NAME: qualquer nome, por exemplo, my-volume. Pode ser igual a SECRET_NAME.

Terraform

Para saber como aplicar ou remover uma configuração do Terraform, consulte os comandos básicos do Terraform.

Adicione o seguinte a um recurso google_cloud_run_v2_service na sua configuração do Terraform:

Para segredos expostos como variáveis de ambiente:

resource "google_cloud_run_v2_service" "default" {
  name     = "SERVICE_NAME"
  location = "REGION"

  template {
    containers {
      image = "IMAGE_URL"
      env {
        name = "SECRET_NAME"
        value_source {
          secret_key_ref {
            secret = "projects/PROJECT_ID/secrets/SECRET_NAME"
            version = "VERSION"
          }
        }
      }
    }
  }
}

Substitua o seguinte:

  • SERVICE_NAME: o nome da sua tarefa do Cloud Run.
  • REGION: a Google Cloud região. Por exemplo, europe-west1.
  • IMAGE_URL: uma referência à imagem do contentor, por exemplo, us-docker.pkg.dev/cloudrun/container/hello:latest. Se usar o Artifact Registry, o repositório REPO_NAMEtem de já estar criado. O URL segue o formato LOCATION-docker.pkg.dev/PROJECT_ID/REPO_NAME/PATH:TAG .
  • SECRET_NAME: o nome secreto, por exemplo, mysecret.
  • PROJECT_ID: o ID do projeto no qual o segredo foi criado.
  • VERSION: a versão do secret. Use latest para a versão mais recente ou um número, por exemplo, 2.

Para segredos montados como caminhos de ficheiros:

resource "google_cloud_run_v2_service" "default" {
  name     = "SERVICE_NAME"
  location = "REGION"

  template {
    containers {
      image = "IMAGE_URL"

      volume_mounts {
        name       = "VOLUME_NAME"
        mount_path = "MOUNT_PATH"
      }
    }

    volumes {
      name = "VOLUME_NAME"
      secret {
        secret = "projects/PROJECT_ID/secrets/SECRET_NAME"
      }
    }
  }
}

Substitua o seguinte:

  • SERVICE_NAME: o nome da sua tarefa do Cloud Run.
  • REGION com a região Google Cloud . Por exemplo, europe-west1.
  • IMAGE_URL: uma referência à imagem do contentor, por exemplo, us-docker.pkg.dev/cloudrun/container/hello:latest. Se usar o Artifact Registry, o repositório REPO_NAMEtem de já estar criado. O URL segue o formato LOCATION-docker.pkg.dev/PROJECT_ID/REPO_NAME/PATH:TAG
  • VOLUME_NAME: qualquer nome, por exemplo, my-volume. Pode ser igual a SECRET_NAME
  • MOUNT_PATH: o caminho de montagem do volume e o nome do ficheiro da chave secreta. Tem de começar com uma barra inicial, por exemplo: /etc/secrets/dbconfig/password, onde /etc/secrets/dbconfig/ é o caminho de montagem do volume e password é o nome do ficheiro do segredo.
  • PROJECT_ID: o ID do projeto no qual o segredo foi criado.
  • SECRET_NAME: o nome secreto, por exemplo, mysecret.

Veja as definições de segredos

Para ver as definições de segredos atuais do seu serviço do Cloud Run:

Consola

  1. Na Google Cloud consola, aceda ao Cloud Run:

    Aceda ao Cloud Run

  2. Clique no serviço que lhe interessa para abrir a página Detalhes do serviço.

  3. Clique no separador Revisões.

  4. No painel de detalhes à direita, a definição de segredos é apresentada no separador Contentor.

gcloud

  1. Use o seguinte comando:

    gcloud run services describe SERVICE
  2. Localize a definição de segredos na configuração devolvida.

Remova segredos de um serviço

Pode remover segredos de um serviço através da Google Cloud consola ou da CLI gcloud:

Consola

  1. Na Google Cloud consola, aceda ao Cloud Run:

    Aceda ao Cloud Run

  2. Selecione o seu serviço na lista e clique em Editar e implementar nova revisão.

  3. Clique no separador Recipientes.

  4. Para eliminar segredos montados como um volume, selecione o separador Montagens de volumes, passe o ponteiro sobre o segredo que quer remover e, de seguida, clique em Eliminar.

  5. Para eliminar segredos expostos como uma variável de ambiente, selecione o separador Variáveis e segredos, passe o cursor do rato sobre o segredo que quer remover e, de seguida, clique em Eliminar.

  6. Clique em Implementar.

gcloud

Pode remover todos os segredos de um serviço ou especificar um ou mais segredos a remover:

  • Para remover todos os segredos, execute o seguinte comando:

    gcloud run deploy SERVICE --image IMAGE_URL \
    --clear-secrets
    

    Substitua o seguinte:

    • SERVICE: o nome do seu serviço.
    • IMAGE_URL: uma referência à imagem do contentor, por exemplo, us-docker.pkg.dev/cloudrun/container/hello:latest. Se usar o Artifact Registry, o repositório REPO_NAMEtem de já estar criado. O URL segue o formato LOCATION-docker.pkg.dev/PROJECT_ID/REPO_NAME/PATH:TAG .
  • Para especificar uma lista de segredos a remover, use a flag --remove-secrets. O comando seguinte remove um segredo montado como um volume e outro segredo exposto como uma variável de ambiente:

    gcloud run deploy SERVICE --image IMAGE_URL \
    --remove-secrets=ENV_VAR_NAME,SECRET_FILE_PATH
    

    Substitua o seguinte:

    • SERVICE: o nome do seu serviço.
    • IMAGE_URL: uma referência à imagem do contentor, por exemplo, us-docker.pkg.dev/cloudrun/container/hello:latest. Se usar o Artifact Registry, o repositório REPO_NAMEtem de já estar criado. O URL segue o formato LOCATION-docker.pkg.dev/PROJECT_ID/REPO_NAME/PATH:TAG .
    • ENV_VAR_NAME: o nome da variável de ambiente.
    • SECRET_FILE_PATH: o caminho completo do segredo. Por exemplo, /mnt/secrets/primary/latest, em que /mnt/secrets/primary/ é o caminho de montagem e latest é o caminho secreto. Também pode especificar os caminhos de montagem e secretos separadamente:

          --set-secrets MOUNT_PATH:SECRET_PATH=SECRET:VERSION
      

Use segredos no seu código

Para ver exemplos de acesso a segredos no seu código como variáveis de ambiente, consulte o tutorial sobre a autenticação do utilizador final, particularmente a secção Processar a configuração sensível com o Secret Manager.

Caminhos não permitidos e limitações

O Cloud Run não permite montar segredos em /dev, /proc e /sys, nem nos respetivos subdiretórios.

Se estiver a montar segredos no /tmp e estiver a usar o ambiente de execução de primeira geração, consulte o problema conhecido sobre a montagem de segredos no /tmp.

O Cloud Run não permite montar vários segredos no mesmo caminho, porque não é possível montar dois volumes na mesma localização.

Substituir um diretório

Se o segredo estiver montado como um volume no Cloud Run e o último diretório no caminho de montagem do volume já existir, todos os ficheiros ou pastas no diretório existente ficam inacessíveis.

Por exemplo, se um segredo denominado my-secret for montado no caminho /etc/app_data, todo o conteúdo no diretório app_data é substituído, e o único ficheiro visível é /etc/app_data/my-secret.

Para evitar substituir ficheiros num diretório existente, crie um novo diretório para montar o segredo, por exemplo, /etc/app_data/secrets, para que o caminho de montagem do segredo seja /etc/app_data/secrets/my-secret.