Configurar a autenticação de identidade da carga de trabalho gerenciada

Nesta página, explicamos como configurar identidades de carga de trabalho gerenciadas usando a gcloud CLI.

Nesta página, também descrevemos como configurar o provisionamento automático e o gerenciamento do ciclo de vida de identidades de cargas de trabalho gerenciadas para o Compute Engine. Configure pools de autoridade certificadora (CA) para emitir certificados usando o Certificate Authority Service. O CA Service é um serviço do Google Cloud altamente disponível e escalonável que simplifica e automatiza a implantação, o gerenciamento e a segurança dos serviços de CA. É possível criar instâncias de máquina virtual (VMs) provisionadas com credenciais X.509 do pool de AC configurado. Essas credenciais podem ser usadas para estabelecer conexões mTLS entre cargas de trabalho.

Antes de começar

  1. Crie ou selecione um projeto do Google Cloud.

    • Crie um projeto do Google Cloud:

      gcloud projects create PROJECT_ID

      Substitua PROJECT_ID por um nome para o projeto do Google Cloud que você está criando.

    • Selecione o projeto do Google Cloud que você criou:

      gcloud config set project PROJECT_ID

      Substitua PROJECT_ID pelo nome do projeto do Google Cloud.

  2. Solicitar acesso à visualização das identidades de carga de trabalho gerenciada.

    .
  3. Entenda as identidades das cargas de trabalho gerenciadas.

  4. Saiba mais sobre a emissão de certificados usando o Certificate Authority Service.

  5. Saiba como autenticar cargas de trabalho do Compute Engine usando identidades de carga de trabalho gerenciadas.

  6. Ative as APIs IAM and Certificate Authority Service:

    gcloud services enable iam.googleapis.com privateca.googleapis.com

  7. Configure a CLI do Google Cloud para usar o projeto adicionado à lista de permissões para faturamento e cota.

    gcloud config set billing/quota_project PROJECT_ID
    

    Substitua PROJECT_ID pelo ID do projeto que foi adicionado à lista de permissões para a visualização da identidade da carga de trabalho gerenciada.

Funções exigidas

Para receber as permissões necessárias para criar identidades de cargas de trabalho gerenciadas e provisionar certificados de identidade de carga de trabalho gerenciada, peça ao administrador para conceder a você os seguintes papéis do IAM no projeto:

Para mais informações sobre como conceder papéis, consulte Gerenciar acesso.

Também é possível conseguir as permissões necessárias com papéis personalizados ou outros papéis predefinidos.

Como alternativa, o papel básico de proprietário do IAM (roles/owner) também inclui permissões para configurar identidades de carga de trabalho gerenciada. Não conceda papéis básicos em um ambiente de produção, recomendamos que você faça isso em um ambiente de desenvolvimento ou teste.

Visão geral

Para usar identidades de carga de trabalho gerenciada nos aplicativos, execute as tarefas a seguir:

  1. Administrador de segurança:

  2. Administrador de computação:

    Ative as identidades das cargas de trabalho gerenciadas para cargas de trabalho em execução no Compute Engine:

Criar identidades de carga de trabalho gerenciada

As identidades de carga de trabalho gerenciadas permitem que o Google Cloud provisione automaticamente as credenciais para identidades do pool de identidades de cargas de trabalho nas cargas de trabalho. As identidades de carga de trabalho são definidas em um pool de identidades de carga de trabalho e organizadas em limites administrativos chamados namespaces.

Criar um pool de identidade da carga de trabalho

É preciso criar um pool no modo TRUST_DOMAIN para criar identidades de carga de trabalho gerenciadas. Para criar um pool de identidades de cargas de trabalho para identidades de cargas de trabalho gerenciadas, use o workload-identity-pools create comando.

gcloud iam workload-identity-pools create POOL_ID \
    --location="global" \
    --mode="TRUST_DOMAIN"

Substitua:

  • POOL_ID: o ID exclusivo do pool. O ID precisa ter entre 4 e 32 caracteres, incluir apenas caracteres alfanuméricos minúsculos e traços, além de começar e terminar com um caractere alfanumérico. Depois de criar um pool de identidades de cargas de trabalho, não é possível alterar o ID dele.

Para verificar se o pool de identidades de cargas de trabalho foi criado no modo TRUST_DOMAIN, use o workload-identity-pools describecomando .

gcloud iam workload-identity-pools describe POOL_ID \
    --location="global"

A resposta ao comando precisa ser semelhante ao exemplo a seguir:

mode: TRUST_DOMAIN
name: projects/PROJECT_NUMBER/locations/global/workloadIdentityPools/POOL_ID
state: ACTIVE

Se mode: TRUST_DOMAIN não estiver presente na resposta ao comando, verifique se o projeto foi adicionado à lista de permissões da visualização da identidade da carga de trabalho gerenciada e se você configurou corretamente a gcloud CLI para usar o projeto correto para faturamento e cota. Talvez seja necessário atualizar para uma versão mais recente da gcloud CLI.

Criar um namespace

O comando workload-identity-pools namespaces create permite criar um namespace em um pool de identidades de cargas de trabalho.

gcloud iam workload-identity-pools namespaces create NAMESPACE_ID \
    --workload-identity-pool="POOL_ID" \
    --location="global"

Substitua:

  • NAMESPACE_ID: o ID exclusivo do namespace. O ID precisa ter entre 2 e 63 caracteres, conter apenas caracteres alfanuméricos minúsculos e traços, além de começar e terminar com um caractere alfanumérico. Depois de criar um namespace, não será possível alterar o ID dele.
  • POOL_ID: o ID do pool de Identidade da carga de trabalho que você criou anteriormente.

Criar uma identidade de carga de trabalho gerenciada

O comando workload-identity-pools managed-identities create permite criar uma identidade de carga de trabalho gerenciada em um pool de identidades de cargas de trabalho.

gcloud iam workload-identity-pools managed-identities create MANAGED_IDENTITY_ID \
    --namespace="NAMESPACE_ID" \
    --workload-identity-pool="POOL_ID" \
    --location="global"

Substitua:

  • MANAGED_IDENTITY_ID: o ID exclusivo da identidade gerenciada. O ID precisa ter entre 2 e 63 caracteres, conter apenas caracteres alfanuméricos minúsculos e traços, além de começar e terminar com um caractere alfanumérico. Depois de criar uma identidade de carga de trabalho gerenciada, não é possível alterar o ID dela.
  • NAMESPACE_ID: o ID do namespace que você criou anteriormente.
  • POOL_ID: o ID do pool de Identidade da carga de trabalho que você criou anteriormente.

A identidade SPIFFE da identidade da carga de trabalho gerenciada é igual ao seguinte:

spiffe://POOL_ID.global.PROJECT_NUMBER.workload.id.goog/ns/NAMESPACE_ID/sa/MANAGED_IDENTITY_ID

Definir a política de atestado da carga de trabalho

Uma política de atestado de carga de trabalho garante que apenas cargas de trabalho confiáveis possam usar a identidade gerenciada. É necessário permitir que a carga de trabalho use a identidade da carga de trabalho gerenciada para que ela possa ser emitida.

Para isso, crie uma conta de serviço gerenciada pelo usuário e a anexe à sua carga de trabalho. A carga de trabalho usará a identidade da carga de trabalho gerenciada como identidade ao se autenticar em outras cargas de trabalho com TLS mútuo (mTLS), e a carga de trabalho usará a conta de serviço como identidade dela quando acessar outros serviços e recursos do Google Cloud.

O comando service-accounts create permite criar uma identidade de carga de trabalho gerenciada em um pool de identidades de cargas de trabalho.

Para criar a conta de serviço, use o seguinte comando:

gcloud iam service-accounts create SERVICE_ACCOUNT_NAME

Substitua:

  • SERVICE_ACCOUNT_NAME: o nome da conta de serviço

Para criar uma política de atestado de carga de trabalho que permita que as cargas de trabalho com a conta de serviço anexada recebam credenciais para a identidade da carga de trabalho gerenciada, use o comando workload-identity-pools managed-identities workload-sources create:

gcloud iam workload-identity-pools managed-identities workload-sources create \
    project-WORKLOAD_PROJECT_NUMBER \
    --single-attribute-selectors "compute.googleapis.com/Instance.attached_service_account.email=SERVICE_ACCOUNT_NAME@PROJECT_ID.iam.gserviceaccount.com" \
    --managed-identity MANAGED_IDENTITY_ID \
    --namespace NAMESPACE_ID \
    --workload-identity-pool POOL_ID \
    --location "global"

Substitua:

  • SERVICE_ACCOUNT_NAME: o nome da conta de serviço.
  • WORKLOAD_PROJECT_NUMBER: o número do projeto que contém a carga de trabalho. A política permite que as cargas de trabalho deste projeto usem a identidade da carga de trabalho gerenciada.
  • PROJECT_ID: o ID do projeto que contém a conta de serviço.
  • MANAGED_IDENTITY_ID: o ID exclusivo da identidade gerenciada.
  • NAMESPACE_ID: o ID do namespace que você criou anteriormente.
  • POOL_ID: o ID do pool de Identidade da carga de trabalho que você criou anteriormente.

Em um determinado pool de identidades de cargas de trabalho, é possível definir no máximo 50 seletores de atributos únicos para o projeto de carga de trabalho.

Para saber como atualizar ou excluir uma política de atestado, execute o seguinte comando:

gcloud iam workload-identity-pools managed-identities workload-sources --help

Configurar o Certificate Authority Service para emitir certificados para identidades de cargas de trabalho gerenciadas

Crie a configuração recomendada para autoridades de certificação (CAs) raiz e subordinadas usando pools do Certificate Authority Service. O pool de CA subordinada emite os certificados de identidade da carga de trabalho X.509 para as VMs.

Depois de configurar os pools de AC, você autoriza as identidades de carga de trabalho gerenciadas a solicitar e receber os certificados assinados dos pools de AC.

Configurar o pool de CAs raiz

Use a interface da CLI do Google Cloud para o Certificate Authority Service e configure um pool de CAs raiz.

gcloud

Crie o pool de ACs raiz.

  1. Crie o pool de CAs raiz no nível Enterprise, que se destina à emissão de certificados de longa duração e baixo volume usando o comando gcloud privateca pools create.

    gcloud privateca pools create ROOT_CA_POOL_ID \
       --location=REGION \
       --tier=enterprise
    

    Substitua:

    • ROOT_CA_POOL_ID: um ID exclusivo para o pool de ACs raiz. O ID pode ter até 64 caracteres e precisa conter apenas caracteres alfanuméricos minúsculos e maiúsculos, sublinhados ou hifens. O ID do pool precisa ser exclusivo na região.
    • REGION: a região em que o pool de ACs raiz está localizado.

    Para mais informações, consulte Como criar pools de AC.

  2. Crie uma AC raiz no pool de AC raiz usando o comando gcloud privateca roots create. Talvez você precise ativar a AC raiz se essa for a única AC no pool de AC raiz.

    Por exemplo, é possível usar um comando semelhante ao seguinte para criar uma AC raiz.

    gcloud privateca roots create ROOT_CA_ID \
       --pool=ROOT_CA_POOL_ID \
       --subject "CN=ROOT_CA_CN, O=ROOT_CA_ORGANIZATION" \
       --key-algorithm="ec-p256-sha256" \
       --max-chain-length=1 \
       --location=REGION
    

    Substitua:

    • ROOT_CA_ID: um nome exclusivo para a CA raiz. O nome da CA pode ter até 64 caracteres e precisa conter apenas caracteres alfanuméricos minúsculos e maiúsculos, sublinhados ou hifens. O nome da AC precisa ser exclusivo na região.
    • ROOT_CA_POOL_ID: o ID do pool de ACs raiz.
    • ROOT_CA_CN: o nome comum da CA raiz
    • ROOT_CA_ORGANIZATION: a organização da CA raiz.
    • REGION: a região em que o pool de ACs raiz está localizado.

    Para mais informações, consulte Criar uma autoridade certificadora raiz. Para mais informações sobre os campos subject da AC, consulte Assunto.

  3. Opcional: repita as etapas anteriores para criar outra CA raiz no pool de CAs raiz. Isso pode ser útil para rotação de CA raiz.

Configurar as CAs subordinadas

Use a interface da CLI do Google Cloud para o Certificate Authority Service e criar um pool de CAs subordinados e uma CA subordinada.

Se você tiver vários cenários de emissão de certificados, poderá criar uma CA subordinada para cada um deles. Além disso, adicionar várias ACs subordinadas a um pool de ACs ajuda você a conseguir um melhor balanceamento de carga das solicitações de certificado.

gcloud

Use o comando gcloud privateca pools create para criar um pool de CAs subordinadas.

  1. Crie o pool de CA subordinada no nível DevOps, que se destina à emissão de certificados de alto volume e curta duração .

    gcloud privateca pools create SUBORDINATE_CA_POOL_ID \
       --location=REGION \
       --tier=devops
    

    Substitua:

    • SUBORDINATE_CA_POOL_ID: um ID exclusivo para o pool de ACs subordinadas. O ID pode ter até 64 caracteres e precisa conter apenas caracteres alfanuméricos minúsculos e maiúsculos, sublinhados ou hifens. O ID do pool precisa ser exclusivo na região.
    • REGION: a região na qual criar o pool de CAs subordinadas.

    Para mais informações, consulte Como criar pools de AC.

  2. Crie uma CA subordinada no pool de CA subordinada usando o comando gcloud privateca subordinates create. Não altere o modo de emissão baseado em configuração padrão.

    Por exemplo, é possível usar um comando semelhante ao seguinte para criar uma CA subordinada.

    gcloud privateca subordinates create SUBORDINATE_CA_ID \
       --pool=SUBORDINATE_CA_POOL_ID \
       --location=REGION \
       --issuer-pool=ROOT_CA_POOL_ID \
       --issuer-location=REGION \
       --subject="CN=SUBORDINATE_CA_CN, O=SUBORDINATE_CA_ORGANIZATION" \
       --key-algorithm="ec-p256-sha256" \
       --use-preset-profile=subordinate_mtls_pathlen_0
    

    Substitua:

    • SUBORDINATE_CA_ID: um nome exclusivo para a CA subordinada. O nome pode ter até 64 caracteres e precisa conter apenas caracteres alfanuméricos minúsculos e maiúsculos, sublinhados ou hifens. O nome do pool precisa ser exclusivo na região.
    • SUBORDINATE_CA_POOL_ID: o nome do pool de ACs subordinadas.
    • REGION: a região em que o pool de ACs subordinadas está localizado.
    • ROOT_CA_POOL_ID: o ID do pool de ACs raiz.
    • REGION: a região do pool de ACs raiz.
    • SUBORDINATE_CA_CN: o nome comum da CA subordinada.
    • SUBORDINATE_CA_ORGANIZATION: o nome da organização emissora de CA subordinada.

    Para mais informações, consulte Como criar pools de AC. Para mais informações sobre os campos subject da AC, consulte Assunto.

Autorizar que identidades das cargas de trabalho gerenciadas solicitem certificados do pool de ACs

As identidades de cargas de trabalho gerenciadas exigem permissões para solicitar certificados do serviço de AC e receber os certificados públicos.

gcloud

  1. Conceda o papel do IAM de Solicitante de certificado da carga de trabalho de serviço de CA (roles/privateca.workloadCertificateRequester) em cada pool de CA subordinada à identidade da carga de trabalho gerenciada. O comando gcloud privateca pools add-iam-policy-binding a seguir autoriza a identidade da carga de trabalho gerenciada a solicitar certificados das cadeias de certificados de serviço de CA.

    gcloud privateca pools add-iam-policy-binding SUBORDINATE_CA_POOL_ID \
     --location=REGION \
     --role=roles/privateca.workloadCertificateRequester \
     --member="principalSet://iam.googleapis.com/projects/PROJECT_NUMBER/locations/global/workloadIdentityPools/POOL_ID/*"
    

    Substitua:

    • SUBORDINATE_CA_POOL_ID: o ID do pool de AC subordinado.
    • REGION: a região do pool de CAs subordinadas
    • PROJECT_NUMBER: o número do projeto que contém o pool de identidade da carga de trabalho
    • POOL_ID: o ID do pool de identidade da carga de trabalho
  2. Conceda o papel do IAM Leitor do pool de serviços da CA (roles/privateca.poolReader) nos pools de CAs subordinadas à identidade da carga de trabalho gerenciada. Isso autoriza a identidade da carga de trabalho gerenciada a receber os certificados X.509 assinados das cadeias de certificados da AC.

    gcloud privateca pools add-iam-policy-binding SUBORDINATE_CA_POOL_ID \
     --location=REGION \
     --role=roles/privateca.poolReader \
     --member="principalSet://iam.googleapis.com/projects/PROJECT_NUMBER/locations/global/workloadIdentityPools/POOL_ID/*"
    

    Substitua:

    • SUBORDINATE_CA_POOL_ID: o ID do pool de AC subordinado.
    • REGION: a região do pool de CAs subordinadas
    • PROJECT_NUMBER: o número do projeto que contém o pool de identidade da carga de trabalho
    • POOL_ID: o ID do pool de identidade da carga de trabalho

Definir a configuração de emissão de certificados e confiança

Use essas informações para criar um arquivo JSON que será carregado como dados do parceiro ao criar uma VM.

Definir a configuração de emissão de certificados

A configuração de emissão de certificados a seguir é necessária para ativar identidades de carga de trabalho gerenciadas para o Compute Engine.

{
  "primary_certificate_authority_config": {
    "certificate_authority_config": {
      "ca_pool": "projects/PROJECT_ID/locations/REGION/caPools/SUBORDINATE_CA_POOL_ID"
    }
  },
  "key_algorithm": "ALGORITHM",
  "workload_certificate_lifetime_seconds": "DURATION",
  "rotation_window_percentage": "ROTATION_WINDOW_PERCENTAGE"
}

Substitua:

  • PROJECT_NAME: o nome do projeto que contém o pool de ACs
  • REGION: a região onde o pool de CAs subordinadas está localizado
  • SUBORDINATE_CA_POOL_ID: o nome do pool de CA subordinada
  • ALGORITHM: o algoritmo de criptografia usado para gerar a chave privada. Os valores válidos são rsa-2048 (padrão), rsa-3072, rsa-4096, ecdsa-p256e ecdsa-p384.
  • DURATION: opcional: a duração da validade do certificado de folha, em segundos. O valor precisa estar entre 3600 e 315360000. Se não for especificado, o valor padrão de 86400 será usado. A validade real do certificado emitido também depende da CA emissora, porque isso pode restringir a vida útil do certificado emitido.
  • ROTATION_WINDOW_PERCENTAGE (opcional): a porcentagem do ciclo de vida do certificado em que uma renovação é acionada. O valor precisa estar entre 1 e 100. O valor padrão é 66%. Você precisa definir a porcentagem da janela de rotação em relação ao ciclo de vida do certificado para que a renovação ocorra pelo menos sete dias após a emissão e pelo menos sete dias antes da expiração.

Definir a configuração de confiança

A configuração de confiança contém o conjunto de âncoras de confiança para validar certificados de peering. Isso inclui o seguinte:

  • URIs de recursos de pool de CAs confiáveis: um conjunto de URIs de recursos de pool de CAs confiáveis para emitir certificados no mesmo domínio de confiança a que as VMs pertencem.
  • Certificados de CA formatados em PEM: um conjunto de certificados de CA no formato PEM confiáveis para emitir certificados no mesmo domínio de confiança a que as VMs pertencem.
{
  "POOL_ID.global.PROJECT_NUMBER.workload.id.goog": {
    "trust_anchors": [
      {
        "ca_pool": "projects/PROJECT_NAME/locations/REGION/caPools/SUBORDINATE_CA_POOL_ID"
      },
      {
        "pem_certificate": "PEM-encoded certificate"
      }
    ]
  }
}

Substitua:

  • POOL_ID: o ID do pool de identidade da carga de trabalho
  • PROJECT_NUMBER: o número do projeto que contém o pool de identidade da carga de trabalho
  • PROJECT_NAME: o nome do projeto que contém o pool de ACs
  • REGION: a região onde o pool de CAs subordinadas está localizado
  • SUBORDINATE_CA_POOL_ID: o ID do pool de CA subordinada
  • PEM-encoded certificate (opcional): um conjunto de certificados de CA no formato PEM que são confiáveis para emitir certificados no mesmo domínio de confiança a que as VMs pertencem.

Criar um arquivo de configuração para fazer upload dos metadados do parceiro em uma VM

Crie um arquivo JSON que contenha o seguinte:

Salve este arquivo como CONFIGS.json. Esse arquivo é usado na criação de VMs para executar aplicativos que usam identidades de carga de trabalho gerenciadas.

O arquivo CONFIGS.json será semelhante ao seguinte:

  {
  "wc.compute.googleapis.com": {
     "entries": {
        "certificate-issuance-config": {
           "primary_certificate_authority_config": {
              "certificate_authority_config": {
                 "ca_pool": "projects/PROJECT_ID/locations/REGION/caPools/SUBORDINATE_CA_POOL_ID"
              }
           },
           "key_algorithm": "ALGORITHM"
        },
        "trust-config": {
           "POOL_ID.global.PROJECT_NUMBER.workload.id.goog": {
               "trust_anchors": [{
                  "ca_pool": "projects/PROJECT_ID/locations/REGION/caPools/SUBORDINATE_CA_POOL_ID"
                }]
           }
     }
  }
  },
  "iam.googleapis.com": {
     "entries": {
        "workload-identity": "spiffe://POOL_ID.global.PROJECT_NUMBER.workload.id.goog/ns/NAMESPACE_ID/sa/MANAGED_IDENTITY_ID"
     }
  }
  }
  

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