Fazer upload das chaves da conta de serviço

Nesta página, explicamos como fazer upload de uma chave pública para uma conta de serviço. Depois de fazer upload da chave pública, use a chave privada do par de chaves para autenticar como a conta de serviço.

Antes de começar

Funções exigidas

Para ter as permissões necessárias para fazer upload das chaves da conta de serviço, peça ao administrador que conceda a você o papel do IAM Administrador da chave da conta de serviço (roles/iam.serviceAccountKeyAdmin) no projeto ou a conta de serviço com as chaves que você quer gerenciar. 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 por meio de papéis personalizados ou de outros papéis predefinidos.

Para mais informações, consulte papéis de contas de serviço.

Dependendo da configuração da política da organização, talvez seja necessário permitir o upload de chaves de conta de serviço no projeto antes de fazer o upload de uma chave.

Para receber as permissões necessárias para permitir o upload de chaves de conta de serviço em um projeto, peça ao administrador para conceder a você os seguintes papéis do IAM na sua organização:

Para mais informações sobre a concessão de papéis, consulte Gerenciar o acesso a projetos, pastas e organizações.

Esses papéis predefinidos contêm as permissões necessárias para permitir que as chaves de conta de serviço sejam enviadas por upload em um projeto. Para conferir as permissões exatas necessárias, expanda a seção Permissões necessárias:

Permissões necessárias

As permissões a seguir são necessárias para permitir que as chaves de conta de serviço sejam enviadas em um 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

Essas permissões também podem ser concedidas com funções personalizadas ou outros papéis predefinidos.

Permitir o upload da chave da conta de serviço

Antes de criar uma chave de conta de serviço, verifique se a restrição de política da organização iam.disableServiceAccountKeyUpload não está aplicada ao seu projeto. Se essa restrição for aplicada ao seu projeto, não será possível fazer upload de chaves de conta de serviço nele.

Recomendamos que você aplique essa restrição para a maioria dos projetos e apenas isente os projetos que realmente exigem chaves de conta de serviço. Para mais informações sobre métodos de autenticação alternativos, consulte Escolher o método de autenticação certo para seu caso de uso.

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

  1. No nível da organização, crie uma chave de tag e um valor de tag que serão usados para definir se um projeto ou uma pasta será isento da política da organização. Recomendamos criar uma tag com a chave disableServiceAccountKeyUpload e os valores enforced e not_enforced.

    Para saber como criar chaves e valores de tag, consulte Como criar e definir uma nova tag.

  2. Anexe a tag disableServiceAccountKeyUpload à organização e defina o valor como enforced. Todos os projetos ou pastas da organização herdam esse valor de tag, a menos que ele seja substituído por um valor de tag diferente.

    Para saber como anexar tags aos recursos, consulte Como anexar tags aos recursos.

  3. Para cada projeto ou pasta que você quer isentar da política da organização, anexe a tag disableServiceAccountKeyUpload e defina-a com o valor not_enforced. Definir um valor de tag para um projeto ou uma pasta dessa maneira substitui o valor da tag herdado da organização.
  4. Crie ou atualize a política da organização que impede o upload de chaves de conta de serviço para que ela não aplique a restrição a recursos isentos. Essa política precisa ter as seguintes regras:

    • Configure a restrição iam.disableServiceAccountKeyUpload para que não seja aplicada aos recursos com a tag disableServiceAccountKeyUpload: not_enforced. A condição nessa regra precisa ser semelhante a esta:

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

    Para saber como criar políticas da organização com condições de tag, consulte Como definir uma política da organização com tags.

Fazer upload de uma chave pública em uma conta de serviço

É possível fazer upload parte pública da chave de um par de chaves gerenciadas pelo usuário para associá-la a uma conta de serviço. Depois de fazer upload da chave pública, é possível usar a chave privada do par de chaves como uma chave de conta de serviço.

A chave enviada precisa ser uma chave pública RSA, encapsulada em um certificado X.509 v3 e codificada em base64. É possível usar ferramentas como o OpenSSL para gerar uma chave e um certificado nesse formato.

Não inclua informações particulares no certificado X.509. Especificamente, use um assunto genérico e não adicione atributos opcionais. Os certificados são visíveis publicamente. As informações particulares no certificado ficam visíveis para qualquer pessoa que recupere o certificado. Para mais informações, consulte Evitar divulgar informações confidenciais em certificados X.509 enviados.

Por exemplo, o comando a seguir gera um par de chaves RSA de 2.048 bits e encapsula a chave pública em um certificado autoassinado válido por 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, faça o upload do arquivo public_key.pem como a chave pública de uma conta de serviço.

Console

  1. No console do Google Cloud, acesse a página Contas de serviço.

    Acesse as Contas de serviço

    As etapas restantes aparecem no console do Google Cloud.

  2. Selecione um projeto.
  3. Na página Contas de serviço, clique no endereço de e-mail da conta de serviço para onde quer fazer o upload de uma chave.
  4. Clique na guia Chaves.
  5. Clique no menu suspenso Adicionar chave e selecione Fazer upload de uma chave atual.
  6. Clique em Procurar e depois localize e selecione o arquivo da chave pública. Se preferir, copie e cole o conteúdo do arquivo da chave pública na caixa Cole a chave atual.
  7. Clique em Fazer upload.

gcloud

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

Substitua os seguintes valores:

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

A saída contém um identificador exclusivo para a chave enviada:

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

A saída terá o mesmo identificador exclusivo que foi retornado após a criação da chave:

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

REST

O método projects.serviceAccounts.keys.upload faz upload da chave pública de um par de chaves gerenciado pelo usuário e adiciona essa chave à conta de serviço.

Antes de usar os dados da solicitação abaixo, faça as substituições a seguir:

  • PROJECT_ID: o ID do projeto do Google Cloud. Os IDs do projeto 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 do par de chaves. Precisa ser uma chave pública RSA encapsulada em um certificado X.509 v3. Codifique os dados da chave pública em base64, incluindo a primeira linha, -----BEGIN CERTIFICATE-----, e a última, -----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 da solicitação:

{
  "publicKeyData": "PUBLIC_KEY_DATA"
}

Para enviar a solicitação, expanda uma destas opções:

Você receberá uma resposta JSON semelhante a esta:

{
  "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"
}

Desativar uploads de chave pública

Para desativar a capacidade de fazer upload de chaves no seu projeto, consulte Como restringir o upload da chave de conta de serviço.

A seguir

Faça um teste

Se você começou a usar o Google Cloud agora, 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.

Comece a usar gratuitamente