Faça a gestão dos controlos de políticas

Este tutorial mostra como implementar controlos de políticas em recursos do serviço de autoridade de certificação.

Objetivos

Este tutorial fornece informações sobre a configuração de um conjunto de autoridades de certificação (AC) partilhado para a emissão de certificados de DNS com os seguintes controlos de políticas:

  • O utilizador prod-dns-requester pode pedir certificados TLS do servidor de entidade final para o domínio *.prod.example.com.
  • O utilizador test-dns-requester pode pedir certificados TLS do servidor de entidade final para o domínio *.test.example.com.
  • O utilizador blank-check-requester pode pedir qualquer tipo de certificado ao conjunto de ACs.

Este tutorial usa a política de emissão de certificados de um conjunto de ACs, modelos de certificados e associações IAM condicionais para alcançar este cenário.

Antes de começar

Criar um grupo de ACs

Para criar um conjunto de ACs, siga estas instruções:

  1. Para criar um CA pool que use o ficheiro issuance-policy.yaml, use o seguinte comando gcloud:

    gcloud

    gcloud privateca pools create POOL_NAME --location=LOCATION --tier=ENTERPRISE
    

    Onde:

    • LOCATION é a localização onde quer criar o grupo de AC. Para ver a lista completa de localizações, consulte Localizações.
    • A flag --tier é usada para especificar o nível do conjunto de ACs. Para mais informações sobre os níveis, consulte Selecione os níveis de operação.
  2. Para criar uma CA com recursos geridos pela Google no conjunto de CAs recém-criado, use o seguinte comando gcloud:

    gcloud

    gcloud privateca roots create CA_NAME \
        --pool=POOL_NAME \
        --location=LOCATION \
        --subject="CN=Example DNS Root, O=Example LLC, C=US" \
        --validity="10Y" \
        --max-chain-length=1 \
        --auto-enable
    

    Onde:

    • POOL_NAME é o identificador exclusivo do conjunto de ACs.
    • LOCATION é a localização onde quer criar o grupo de AC. Para ver a lista completa de localizações, consulte Localizações.
    • --subject é usado para transmitir o nome do assunto do certificado.
    • A flag --validity determina o período de validade da CA. O período de validade predefinido é de 10 anos.
    • A flag --max-chain-length determina a profundidade máxima das ACs subordinadas permitidas numa AC.
    • A flag --auto-enable cria a AC no estado ENABLED, em vez de no estado STAGED. Para mais informações sobre os estados da CA, consulte o artigo Estados da CA.

Configurar controlos de políticas para certificados de teste

As alterações à política de emissão entram em vigor imediatamente. Recomendamos que configure os controlos da política de teste antes de os usar para produção. Esta secção descreve como pode configurar os controlos de políticas de teste.

Tanto para os modelos de DNS de teste como de produção, tem de usar os mesmos valores predefinidos para os certificados TLS do servidor. Crie um ficheiro YAML leaf_server_tls_predefined_values.yaml e copie a seguinte configuração de TLS do servidor da entidade final para o ficheiro.

    keyUsage:
      baseKeyUsage:
        digitalSignature: true
        keyEncipherment: true
      extendedKeyUsage:
        serverAuth: true
    caOptions:
      isCa: false

Configure controlos de políticas para certificados DNS de teste

Esta secção descreve como pode definir controlos de políticas para permitir que o utilizador test-dns-requester peça certificados TLS do servidor de entidade final para DNS no domínio *.test.example.com.

Crie um modelo de certificado DNS para certificados de teste

Esta secção descreve como pode criar um modelo de certificado que contenha a configuração do servidor TLS da entidade final. Este modelo de certificado restringe os certificados à utilização apenas de SANs de DNS no domínio *.test.example.com. Estas restrições são implementadas através de uma expressão do Idioma de expressão comum (IEC). O modelo de certificado também elimina qualquer assunto especificado no pedido de certificado.

  1. Use o comando gcloud seguinte para criar o modelo de certificado que contém as extensões TLS do servidor de entidade final, elimina qualquer subject especificado no pedido de certificado e limita os SANs permitidos.

    gcloud

    gcloud privateca templates create test-server-tls-template \
    --predefined-values-file  ./leaf_server_tls_predefined_values.yaml \
    --no-copy-subject \
    --copy-sans \
    --identity-cel-expression "subject_alt_names.all(san, san.type == DNS && san.value.endsWith('.test.example.com'))"
    

    Onde:

    • A flag --predefined-values-file é usada para transmitir um ficheiro YAML que descreve quaisquer valores X.509 predefinidos definidos pelo modelo de certificado.
    • A flag --no-copy-subject remove todos os assuntos especificados pelo autor da chamada do pedido de certificado.
    • A flag --copy sans garante que a extensão SAN do pedido de certificado é copiada para o certificado assinado.
    • A flag --identity-cel-expression é usada para transmitir uma expressão CEL que é avaliada em função da identidade no certificado antes de ser emitida. Para mais informações sobre a utilização de expressões CEL para implementar vários controlos de políticas, consulte o artigo Usar o IEC.

    Para mais informações sobre a criação de modelos de certificados, consulte o artigo Crie um modelo de certificado.

Crie associações da IAM para certificados de teste de DNS

Para permitir que o utilizador test-dns-requester@ no conjunto da AC de DNS peça certificados TLS do servidor de teste, crie uma associação condicional da IAM no conjunto da AC. Conceda a função privateca.certificateRequester ao utilizador test-dns-requester@ apenas se o pedido de certificado contiver uma referência ao modelo test-server-tls-template. Para mais informações sobre as funções e as autorizações do IAM para o serviço de CA, consulte o artigo Controlo de acesso com o IAM.

  1. Crie um ficheiro YAML de políticas test_dns_condition.yaml e copie a seguinte configuração de TLS para o ficheiro.

      title: test DNS binding
      description: allows user to only create DNS test certificates
      expression: api.getAttribute("privateca.googleapis.com/template", "") == "PROJECT_ID/-/test-server-tls-template"
    

    O nome do modelo fornecido na condição do IAM tem de corresponder ao nome do modelo no pedido de certificado. Assim, se estiver a fornecer um ID do projeto no atributo privateca.googleapis.com/template da expressão CEL, também tem de fornecer um ID do projeto quando solicitar o certificado. Se fornecer um número de projeto na expressão CEL, também tem de fornecer um número de projeto no pedido de certificado.

  2. Use o seguinte comando gcloud para adicionar controlos de políticas que permitam que test-dns-requester@ solicite apenas certificados TLS de teste de produção do conjunto de ACs.

    gcloud

    gcloud privateca pools add-iam-policy-binding POOL_NAME \
        --location=LOCATION \
        --role='roles/privateca.certificateRequester' \
        --member='user:test-dns-requester@' \
        --condition-from-file=./test_dns_condition.yaml
    

    Onde:

    • A flag --role é usada para transmitir o nome da função que vai ser atribuída a um membro. Para mais informações sobre as funções e as autorizações da IAM para o serviço de AC, consulte o artigo Controlo de acesso com a IAM.
    • A flag --member é usada para transmitir o membro ao qual adicionar a associação.
    • O sinalizador condition-from-file é usado para transmitir o nome do ficheiro com a condição CEL.
  3. Use o seguinte gcloud para adicionar controlos de políticas que permitam que test-dns-requester@ use o modelo de certificado "test-server-tls-template".

    gcloud

    gcloud privateca templates add-iam-policy-binding test-server-tls-template \
        --role='roles/privateca.templateUser' \
        --member='user:test-dns-requester@'
    

    Onde:

    • A flag --role é usada para transmitir o nome da função que vai ser atribuída a um membro. Para mais informações sobre as funções e as autorizações da IAM para o serviço de AC, consulte o artigo Controlo de acesso com a IAM.
    • A flag --member é usada para transmitir o membro ao qual adicionar a associação.

    Para mais informações sobre a configuração de políticas de IAM, consulte o artigo Configure políticas de IAM.

Configurar controlos de políticas para certificados de produção

Depois de testar os controlos de políticas, pode usá-los no seu ambiente de produção.

Configure controlos de políticas para certificados DNS de produção

Esta secção descreve como pode definir controlos de políticas para permitir que o utilizador prod-dns-requester peça certificados TLS de entidade final para o domínio DNS .prod.example.com.

Crie um modelo de certificado para certificados DNS de produção

Use as instruções seguintes para criar um modelo de certificado que contenha a configuração de TLS do servidor de entidade final. Este modelo de certificado restringe os certificados à utilização apenas de SANs de DNS no domínio *.prod.example.com. Estas restrições são implementadas através de uma expressão do Idioma de expressão comum (IEC). O modelo de certificado também elimina qualquer assunto especificado no pedido de certificado.

Crie um modelo de certificado prod-server-tls-template usando o seguinte comando gcloud.

gcloud

gcloud privateca templates create prod-server-tls-template \
  --predefined-values-file ./leaf_server_tls_predefined_values.yaml \
  --no-copy-subject \
  --copy-sans \
  --identity-cel-expression "subject_alt_names.all(san, san.type == DNS && san.value.endsWith('.prod.example.com'))"

Onde:

  • O sinalizador --predefined-values-file é usado para transmitir um ficheiro YAML que descreve quaisquer valores X.509 predefinidos definidos pelo modelo de certificado.
  • A flag --no-copy-subject remove todos os assuntos especificados pelo autor da chamada do pedido de certificado.
  • A flag --copy sans garante que a extensão SAN do pedido de certificado é copiada para o certificado assinado.
  • A flag --identity-cel-expression é usada para transmitir uma expressão CEL que é avaliada em função da identidade no certificado antes de ser emitida. Para mais informações sobre expressões CEL, consulte o artigo Usar expressões CEL.

Para mais informações sobre a criação de modelos de certificados, consulte o artigo Crie um modelo de certificado.

Para mais informações sobre o comando gcloud privateca templates create, consulte o artigo gcloud privateca templates create.

Crie uma associação de IAM de DNS de produção

Para permitir que o utilizador prod-dns-requester@ no conjunto de ACs de DNS peça certificados TLS do servidor de produção, crie uma associação condicional da IAM no conjunto de ACs. Atribua ao utilizador prod-dns-requester@ a função privateca.certificateRequester apenas se o pedido de certificado contiver uma referência ao modelo prod-server-tls-template. Para mais informações sobre as funções e as autorizações do IAM, consulte: Controlo de acesso com o IAM.

  1. Crie um ficheiro YAML de política prod_dns_condition.yaml e copie a seguinte configuração de TLS para o ficheiro.

    title: Production DNS binding
    description: allows user to only create DNS production certificates
    expression: api.getAttribute("privateca.googleapis.com/template", "") == "PROJECT_ID/-/prod-server-tls-template"
    
  2. Use o seguinte comando gcloud para adicionar controlos de políticas que permitam que prod-dns-requester@ solicite apenas certificados TLS do servidor de produção ao conjunto de ACs.

    gcloud

    gcloud privateca pools add-iam-policy-binding POOL_NAME \
        --location=LOCATION \
        --role='roles/privateca.certificateRequester' \
        --member='user:prod-dns-requester@' \
        --condition-from-file=./prod_dns_condition.yaml
    

    Onde:

    • A flag --role é usada para transmitir o nome da função que vai ser atribuída a um membro. Para mais informações sobre as funções e as autorizações da IAM para o serviço de AC, consulte o artigo Controlo de acesso com a IAM.
    • A flag --member é usada para transmitir o membro ao qual adicionar a associação.
    • O sinalizador condition-from-file é usado para transmitir o nome do ficheiro com a condição CEL.

    Para mais informações sobre o comando gcloud privateca pools add-iam-policy-binding, consulte gcloud privateca pools add-iam-policy-binding.

  3. Para adicionar controlos de políticas que permitam que prod-dns-requester@ use o modelo de certificado "prod-server-tls-template", use o seguinte comando gcloud:

    gcloud

    gcloud privateca templates add-iam-policy-binding prod-server-tls-template \
        --role='roles/privateca.templateUser' \
        --member='user:prod-dns-requester@'
    

    Onde:

    • A flag --role é usada para transmitir o nome da função que vai ser atribuída a um membro. Para mais informações sobre as funções e as autorizações da IAM para o serviço de AC, consulte o artigo Controlo de acesso com a IAM.
    • A flag --member é usada para transmitir o membro ao qual adicionar a associação.

Controlos da política do utilizador sem restrições

Para permitir que o utilizador blank-check-requester@ peça qualquer certificado sem limitações, crie uma associação do IAM sem condições que atribua ao utilizador a função privateca.certificateRequester.

gcloud

gcloud privateca pools add-iam-policy-binding POOL_NAME \
    --location=LOCATION \
    --role='roles/privateca.certificateRequester' \
    --member='user:blank-check-requester@example.com'

Onde:

  • O valor da flag --role determina a função atribuída ao utilizador. Para mais informações sobre as funções e as autorizações da IAM para o serviço de AC, consulte o artigo Controlo de acesso com a IAM.
  • O valor da flag --member determina o utilizador ao qual a função é atribuída.

Substitua o seguinte:

  • POOL_NAME: o identificador exclusivo do conjunto de ACs.
  • LOCATION: a localização do grupo de ACs. Para ver a lista completa de localizações, consulte Localizações.

Testar os controlos de políticas

Depois de implementar a emissão de certificados e as políticas de IAM, é importante rever e testar estas políticas para garantir que funcionam conforme esperado.

Obtenha todas as associações de políticas

Obtenha todas as políticas IAM implementadas no seu conjunto de ACs. Para obter todas as políticas de IAM para o conjunto de ACs, use o comando gcloud privateca pools get-iam-policy:

gcloud

gcloud privateca pools get-iam-policy POOL_NAME --location=LOCATION

Substitua o seguinte:

  • POOL_NAME: o identificador exclusivo do conjunto de ACs.
  • LOCATION: a localização do grupo de ACs. Para ver a lista completa de localizações, consulte Localizações.

Para mais informações sobre o comando gcloud privateca pools get-iam-policy, consulte gcloud privateca pools get-iam-policy.

A gerar certificados

Esta secção fornece informações sobre a geração de certificados de uso geral, bem como certificados de DNS de teste e produção.

Gere certificados DNS de teste

Para permitir que o utilizador test-dns-requester@ peça certificados DNS de teste ao conjunto da AC, use o seguinte comando gcloud:

gcloud

gcloud privateca certificates create test-dns-1 \
    --project=PROJECT_ID \
    --issuer-location=LOCATION \
    --issuer-pool=POOL_NAME \
    --dns-san=foo.bar.test.example.com \
    --generate-key \
    --key-output-file=KEY_FILE_NAME \
    --cert-output-file=test_dns_cert.pem \
    --template=projects/PROJECT_ID/locations/LOCATION/certificateTemplates/test-server-tls-template

Onde:

  • A flag --dns-san é usada para definir um ou mais SANs de DNS separados por vírgulas.
  • A flag --generate-key aciona a geração de uma nova chave privada RSA-2048 no seu computador.
  • O sinalizador --key-output-file é usado para definir o caminho onde a chave privada gerada é escrita (no formato PEM).
  • --cert-output-file é usado para definir o caminho onde o ficheiro de cadeia de certificados codificado em PEM resultante é escrito (ordenado da entidade final para a raiz).
  • A flag --template é usada para definir o nome do modelo de certificado que quer usar para emitir este certificado. O modelo especificado tem de estar na mesma localização que o conjunto da AC de emissão. Para mais informações sobre os modelos de certificados, consulte o artigo Vista geral dos modelos de certificados e das políticas de emissão.

Substitua o seguinte:

  • PROJECT_ID: o identificador exclusivo do projeto.
  • LOCATION: a localização do grupo de ACs a partir do qual o certificado é pedido. Para ver a lista completa de localizações, consulte Localizações.
  • POOL_NAME: o identificador exclusivo do conjunto de ACs.

Gere certificados de produção

O utilizador prod-dns-requester pode agora pedir certificados DNS de produção ao conjunto de ACs. O elemento --dns-san=foo.bar.prod.example.com adiciona um SAN do tipo DNS com o valor especificado ao pedido de certificado.

gcloud

gcloud privateca certificates create prod-dns-1 \
    --project=PROJECT_ID \
    --issuer-location=LOCATION \
    --issuer-pool=POOL_NAME \
    --dns-san=foo.bar.prod.example.com \
    --generate-key \
    --key-output-file=KEY_FILE_NAME \
    --cert-output-file=prod_dns_cert.pem \
    --template=projects/PROJECT_ID/locations/LOCATION/certificateTemplates/prod-server-tls-template

Onde:

  • O sinalizador --issuer-location é usado para definir a localização do certificado. Para ver a lista completa de localizações, consulte Localizações.
  • A flag --issuer-pool define o conjunto de CA a partir do qual o certificado é pedido.
  • A flag --dns-san é usada para definir um ou mais SANs de DNS separados por vírgulas.
  • A flag --generate-key aciona a geração de uma nova chave privada RSA-2048 no seu computador.
  • O sinalizador --key-output-file é usado para definir o caminho onde a chave privada gerada é escrita (no formato PEM).
  • --cert-output-file é usado para definir o caminho onde o ficheiro de cadeia de certificados codificado em PEM resultante é escrito (ordenado da entidade final para a raiz).
  • A flag --template é usada para definir o nome do modelo de certificado a usar para emitir este certificado. O modelo especificado tem de estar na mesma localização que o conjunto da AC emissora. Para mais informações acerca dos modelos de certificados, consulte o artigo Vista geral dos modelos de certificados e das políticas de emissão.

Gere certificados de uso geral

O utilizador blank-check-requester@ pode pedir qualquer certificado do conjunto de ACs usando o comando gcloud privateca certificates create.

Para pedir um certificado a um conjunto de ACs, pode usar uma chave pública/privada criada pelo serviço de ACs. Para mais informações sobre como pedir certificados, consulte o artigo Peça um certificado e veja o certificado emitido.

Limpar

Esta secção explica como pode remover políticas de IAM num conjunto de ACs.

Remova uma associação de IAM específica

Para remover as associações condicionais do IAM no conjunto de ACs para o utilizador blank-check-requester, use o seguinte comando gcloud:

gcloud

gcloud privateca pools remove-iam-policy-binding POOL_NAME \
    --location=LOCATION \
    --role='roles/privateca.certificateRequester' \
    --member='user:blank-check-requester@'

Onde:

  • O valor da flag --role determina a função atribuída ao utilizador. Para mais informações sobre as funções e as autorizações da IAM para o serviço de AC, consulte o artigo Controlo de acesso com a IAM.
  • O valor da flag --member determina o utilizador ao qual a função é atribuída.

Quando remove uma associação da IAM específica, tem de fornecer todas as informações relacionadas com a associação da IAM no comando gcloud privateca pools remove-iam-policy-binding. Uma função e um membro podem ter várias associações do IAM com condições diferentes. É importante que faculte todos os detalhes relacionados com a associação de IAM para evitar eliminar acidentalmente uma associação diferente.

Para mais informações sobre o comando gcloud privateca pools remove-iam-policy-binding, consulte gcloud privateca pools remove-iam-policy-binding.

Remova todas as associações condicionais da IAM

Para remover uma associação do IAM, pode usar o comando gcloud privateca pools remove-iam-policy-binding. Quando remove uma associação condicional da IAM, tem de fornecer todas as informações sobre a associação. Um utilizador e uma função podem ter mais do que uma associação condicional. Para remover todas as associações condicionais, use a flag --all no comando gcloud.

Use o seguinte comando gcloud para remover todas as associações do utilizador prod-code-signing-requester.

gcloud

gcloud privateca pools remove-iam-policy-binding POOL_NAME \
    --location=LOCATION \
    --role='roles/privateca.certificateRequester' \
    --member='user:prod-code-signing-requester@' \
    --all

Onde:

  • O valor da flag --role determina a função atribuída ao utilizador. Para mais informações sobre as funções e as autorizações da IAM para o serviço de AC, consulte o artigo Controlo de acesso com a IAM.
  • O valor da flag --member determina o utilizador ao qual a função é atribuída.