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
Enable the IAM API.
Entenda as credenciais da conta de serviço.
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:
-
Administrador de políticas da organização (
roles/orgpolicy.policyAdmin
) -
Leitor da organização (
roles/resourcemanager.organizationViewer
) -
Administrador de tags (
roles/resourcemanager.tagAdmin
)
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:
-
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 valoresenforced
enot_enforced
.Para saber como criar chaves e valores de tag, consulte Como criar e definir uma nova tag.
-
Anexe a tag
disableServiceAccountKeyUpload
à organização e defina o valor comoenforced
. 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.
-
Para cada projeto ou pasta que você quer isentar da política da organização, anexe a tag
disableServiceAccountKeyUpload
e defina-a com o valornot_enforced
. Definir um valor de tag para um projeto ou uma pasta dessa maneira substitui o valor da tag herdado da organização. -
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 tagdisableServiceAccountKeyUpload: 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
- No console do Google Cloud, acesse a página Contas de serviço.
As etapas restantes aparecem no console do Google Cloud.
- Selecione um projeto.
- 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.
- Clique na guia Chaves.
- Clique no menu suspenso Adicionar chave e selecione Fazer upload de uma chave atual.
- 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.
- 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, comomy-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
- Saiba como criar e gerenciar chaves de contas de serviço.
- Saiba como listar e receber chaves de conta de serviço.
- Saiba mais sobre alternativas às chaves de contas de serviço para autenticação.
- Saiba como usar chaves de contas de serviço para autenticar como uma conta de serviço.
- Noções básicas sobre as práticas recomendadas para gerenciar chaves de conta de serviço.
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