Carregue chaves de contas de serviço

Esta página explica como carregar uma chave pública para uma conta de serviço. Depois de carregar a chave pública, pode usar a chave privada do par de chaves para se autenticar como a conta de serviço.

Antes de começar

Funções necessárias

Para receber as autorizações de que precisa para carregar chaves de contas de serviço, peça ao seu administrador que lhe conceda a função de administrador de chaves de contas de serviço (roles/iam.serviceAccountKeyAdmin) do IAM no projeto ou na conta de serviço cujas chaves quer gerir. Para mais informações sobre a atribuição de funções, consulte o artigo Faça a gestão do acesso a projetos, pastas e organizações.

Também pode conseguir as autorizações necessárias através de funções personalizadas ou outras funções predefinidas.

Para mais informações, consulte o artigo Funções das contas de serviço.

Consoante a configuração da política da organização, também pode ter de permitir o carregamento de chaves de contas de serviço no seu projeto antes de carregar uma chave.

Para receber as autorizações de que precisa para permitir o carregamento de chaves de contas de serviço num projeto, peça ao seu administrador para lhe conceder as seguintes funções do IAM na sua organização:

Para mais informações sobre a atribuição de funções, consulte o artigo Faça a gestão do acesso a projetos, pastas e organizações.

Estas funções predefinidas contêm as autorizações necessárias para permitir o carregamento de chaves de contas de serviço num projeto. Para ver as autorizações exatas que são necessárias, expanda a secção Autorizações necessárias:

Autorizações necessárias

São necessárias as seguintes autorizações para permitir o carregamento de chaves de contas de serviço num projeto:

  • orgpolicy.constraints.list
  • orgpolicy.customConstraints.create
  • orgpolicy.customConstraints.delete
  • orgpolicy.customConstraints.get
  • orgpolicy.customConstraints.list
  • orgpolicy.customConstraints.update
  • orgpolicy.policies.create
  • orgpolicy.policies.delete
  • orgpolicy.policies.list
  • orgpolicy.policies.update
  • orgpolicy.policy.get
  • orgpolicy.policy.set
  • resourcemanager.organizations.get
  • resourcemanager.projects.listTagBindings
  • resourcemanager.projects.listEffectiveTags
  • resourcemanager.tagKeys.get
  • resourcemanager.tagKeys.list
  • resourcemanager.tagValues.list
  • resourcemanager.tagValues.get

Também pode conseguir estas autorizações com funções personalizadas ou outras funções predefinidas.

Permita o carregamento da chave da conta de serviço

Antes de criar uma chave de conta de serviço, certifique-se de que a restrição da política da organização iam.disableServiceAccountKeyUpload não é aplicada ao seu projeto. Se esta restrição for aplicada ao seu projeto, não pode carregar chaves de contas de serviço nesse projeto.

Recomendamos que aplique esta restrição à maioria dos projetos e que apenas isente os projetos que realmente necessitam de chaves de contas de serviço. Para mais informações sobre métodos de autenticação alternativos, consulte o artigo Escolha o método de autenticação certo para o seu exemplo de utilização.

Para isentar um projeto da restrição da política de organização iam.disableServiceAccountKeyUpload, peça a um administrador da política de organização que faça o seguinte:

  1. Ao nível da organização, crie uma chave de etiqueta e um valor de etiqueta que vai usar para definir se um recurso deve estar isento da política da organização. Recomendamos que crie uma etiqueta com a chave disableServiceAccountKeyUpload e os valores enforced e not_enforced.

    Para saber como criar chaves de etiquetas e valores de etiquetas, consulte o artigo Criar e definir uma nova etiqueta.

  2. Anexe a etiqueta disableServiceAccountKeyUpload à organização e defina o respetivo valor como enforced. Todos os recursos na organização herdam este valor da etiqueta, a menos que seja substituído por um valor da etiqueta diferente.

    Para saber como anexar etiquetas a recursos, consulte o artigo Anexar etiquetas a recursos.

  3. Para cada projeto ou pasta que quer isentar da política da organização, anexe a etiqueta disableServiceAccountKeyUpload e defina o respetivo valor como not_enforced. Definir um valor de etiqueta para um projeto ou uma pasta desta forma substitui o valor de etiqueta herdado da organização.
  4. Crie ou atualize a política da organização que impede o carregamento de chaves de contas de serviço para que não aplique a restrição a recursos isentos. Esta política deve ter as seguintes regras:

    • Configure a restrição iam.disableServiceAccountKeyUpload para não ser aplicada a recursos com a etiqueta disableServiceAccountKeyUpload: not_enforced. A condição nesta regra deve ter o seguinte aspeto:

      "resource.matchTag('ORGANIZATION_ID/disableServiceAccountKeyUpload', 'not_enforced')"
      
    • Configure a restrição iam.disableServiceAccountKeyUpload para ser aplicada a todos os outros recursos.

Carregue uma chave pública para uma conta de serviço

Pode carregar a parte da chave pública de um par de chaves gerido pelo utilizador para a associar a uma conta de serviço. Depois de carregar a chave pública, pode usar a chave privada do par de chaves como uma chave de conta de serviço.

A chave que carregar tem de ser uma chave pública RSA incluída num certificado X.509 v3 e codificada em base64. Pode usar ferramentas como o OpenSSL para gerar uma chave e um certificado neste formato.

Não inclua informações privadas no certificado X.509. Em concreto, use um assunto genérico e não adicione atributos opcionais. Os certificados são visíveis publicamente. Todas as informações privadas no certificado são visíveis para qualquer pessoa que obtenha o certificado. Para mais informações, consulte o artigo Evite a divulgação de informações confidenciais em certificados X.509 carregados.

Se a restrição da política da organização iam.serviceAccountKeyExpiryHours for aplicada ao seu projeto, a chave que carregar tem de expirar no período especificado na restrição. Para definir a hora de validade da chave, use o valor -days no comando que usa para gerar o certificado X.509. Se o valor -days for superior ao período especificado na restrição, o comando falha.

Por exemplo, o comando seguinte gera um par de chaves RSA de 2048 bits e envolve a chave pública num certificado autoassinado válido durante 365 dias:

openssl req -x509 -nodes -newkey rsa:2048 -days 365 \
    -keyout /path/to/private_key.pem \
    -out /path/to/public_key.pem \
    -subj "/CN=unused"

Em seguida, pode carregar o ficheiro public_key.pem como a chave pública de uma conta de serviço.

Consola

  1. Na Google Cloud consola, aceda à página Contas de serviço.

    Aceda a Contas de serviço

    Os passos restantes aparecem na Google Cloud consola.

  2. Selecione um projeto.
  3. Na página Contas de serviço, clique no endereço de email da conta de serviço para a qual quer carregar uma chave.
  4. Clique no separador Chaves.
  5. Clique no menu pendente Adicionar chave e, de seguida, selecione Carregar chave existente.
  6. Clique em Procurar e, de seguida, encontre e selecione o ficheiro de chave pública. Em alternativa, pode copiar e colar o conteúdo do ficheiro de chave pública na caixa Colar chave existente.
  7. Clique em Carregar.

gcloud

Execute o comando gcloud iam service-accounts keys upload para carregar uma chave pública para assinar chaves de contas de serviço.

Substitua os seguintes valores:

  • KEY_FILE: o caminho para o ficheiro que contém os dados principais a carregar, por exemplo, ./public_key.pem.
  • SA_NAME: o nome da conta de serviço para a qual carregar uma chave.
  • PROJECT_ID: o ID do seu Google Cloud projeto.
gcloud iam service-accounts keys upload KEY_FILE \
    --iam-account=SA_NAME@PROJECT_ID.iam.gserviceaccount.com

O resultado contém um identificador exclusivo para a chave carregada:

Name: projects/PROJECT_ID/serviceAccounts/SA_NAME@PROJECT_ID.iam.gserviceaccount.com/keys/c7b74879da78e4cdcbe7e1bf5e129375c0bfa8d0

Para determinar se o comando foi bem-sucedido, execute o comando gcloud iam service-accounts keys list:

gcloud iam service-accounts keys list \
    --iam-account=SA_NAME@PROJECT_ID.iam.gserviceaccount.com

O resultado vai conter o mesmo identificador exclusivo que foi devolvido após a criação da chave:

KEY_ID CREATED_AT EXPIRES_AT DESATIVADA
c7b74879da78e4cdcbe7e1bf5e129375c0bfa8d0 2019-06-26T21:01:42Z 9999-12-31T23:59:59Z  

REST

O método projects.serviceAccounts.keys.upload carrega a chave pública de um par de chaves gerido pelo utilizador e adiciona esta chave à conta de serviço.

Antes de usar qualquer um dos dados do pedido, faça as seguintes substituições:

  • PROJECT_ID: O ID do seu Google Cloud projeto. Os IDs dos projetos são strings alfanuméricas, como my-project.
  • SA_NAME: o nome da conta de serviço à qual associar a chave.
  • PUBLIC_KEY_DATA: os dados da chave pública para o par de chaves. Tem de ser uma chave pública RSA envolvida num certificado X.509 v3. Codifique os dados da chave pública em base64, incluindo a primeira linha, -----BEGIN CERTIFICATE-----, e a última linha, -----END CERTIFICATE-----.

Método HTTP e URL:

POST https://iam.googleapis.com/v1/projects/PROJECT_ID/serviceAccounts/SA_NAME@PROJECT_ID.iam.gserviceaccount.com/keys:upload

Corpo JSON do pedido:

{
  "publicKeyData": "PUBLIC_KEY_DATA"
}

Para enviar o seu pedido, expanda uma destas opções:

Deve receber uma resposta JSON semelhante à seguinte:

{
  "name": "projects/my-project/serviceAccounts/my-service-account@my-project.iam.gserviceaccount.com/keys/c7b74879da78e4cdcbe7e1bf5e129375c0bfa8d0",
  "validAfterTime": "2020-05-17T19:31:19Z",
  "validBeforeTime": "2021-05-17T19:31:19Z",
  "keyAlgorithm": "KEY_ALG_RSA_2048",
  "keyOrigin": "USER_PROVIDED",
  "keyType": "USER_MANAGED"
}

Desative os carregamentos de chaves públicas

Para desativar a capacidade de carregar chaves para o seu projeto, consulte o artigo Restringir o carregamento de chaves de contas de serviço.

O que se segue?

Experimente

Se for um novo utilizador do Google Cloud, crie uma conta para avaliar o desempenho dos nossos produtos em cenários reais. Os novos clientes também recebem 300 USD em créditos gratuitos para executar, testar e implementar cargas de trabalho.

Comece gratuitamente