Gerenciar controles de políticas
Neste tutorial, mostramos como implementar controles de políticas nos recursos do Certificate Authority Service.
Objetivos
Este tutorial fornece informações sobre como configurar um pool de autoridade certificadora (CA) compartilhado para emissão de certificados DNS com os seguintes controles de políticas:
- O usuário
prod-dns-requesterpode solicitar certificados TLS de servidor de entidade final para o domínio*.prod.example.com. - O usuário
test-dns-requesterpode solicitar certificados TLS de servidor de entidade final para o domínio*.test.example.com. - O usuário
blank-check-requesterpode solicitar qualquer tipo de certificado do pool de ACs.
Este tutorial usa a política de emissão de certificados de um pool de ACs, modelos de certificado e vinculações condicionais do IAM para alcançar esse cenário.
Antes de começar
- Leia sobre os vários controles de políticas oferecidos pelo CA Service.
- Leia como criar modelos de certificado.
- Leia sobre os perfis de certificado que podem ser usados para vários cenários de emissão de certificados.
- Leia como usar o Common Expression Language (CEL) para aplicar vários controles de políticas para emissão de certificados.
- Leia como você pode usar uma política de emissão de certificados.
- Leia como configurar, modificar e remover políticas do IAM para criar e gerenciar recursos do CA Service.
Como criar um pool de CAs
Para criar um pool de ACs, siga estas instruções:
Para criar um pool de ACs que usa o arquivo
issuance-policy.yaml, use o seguinte comandogcloud:gcloud
gcloud privateca pools create POOL_NAME --location=LOCATION --tier=ENTERPRISEEm que:
- LOCATION é o local em que você quer criar o pool de ACs. Para conferir a lista completa de locais, consulte Locais.
- A flag
--tieré usada para especificar o nível do pool de CAs. Para mais informações sobre níveis, consulte Selecionar os níveis de operação.
Para criar uma CA com recursos gerenciados pelo Google no pool 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-enableEm que:
- POOL_NAME é o identificador exclusivo do pool de CAs.
- LOCATION é o local em que você quer criar o pool de ACs. Para conferir a lista completa de locais, consulte Locais.
- A flag
--subjecté usada para transmitir o nome do assunto do certificado. - A flag
--validitydetermina o período de validade da CA. O período de validade padrão é de 10 anos. - A flag
--max-chain-lengthdetermina a profundidade máxima de CAs subordinadas permitidas em uma CA. - A flag
--auto-enablecria a CA no estadoENABLED, em vez do estadoSTAGED. Para mais informações sobre os estados da CA, consulte Estados da CA.
Como configurar controles de políticas para certificados de teste
As mudanças na política de emissão entram em vigor imediatamente. Recomendamos que você configure os controles de políticas de teste antes de usá-los na produção. Esta seção descreve como configurar controles de políticas de teste.
Para os modelos de DNS de teste e de produção, use os mesmos valores predefinidos para certificados TLS do servidor. Crie um arquivo YAML leaf_server_tls_predefined_values.yaml e copie a seguinte configuração TLS do servidor de entidade final para o arquivo.
keyUsage:
baseKeyUsage:
digitalSignature: true
keyEncipherment: true
extendedKeyUsage:
serverAuth: true
caOptions:
isCa: false
Configurar controles de políticas para certificados DNS de teste
Esta seção descreve como definir controles de políticas para permitir que o usuário
test-dns-requester solicite servidor de entidade final
TLS certificados para DNS no
*.test.example.com domínio.
Criar modelo de certificado DNS para certificados de teste
Esta seção descreve como criar um modelo de certificado que contenha
a configuração TLS do servidor de entidade final
. Esse modelo de certificado restringe os certificados ao uso apenas de SANs de DNS no domínio *.test.example.com. Essas restrições são implementadas usando uma expressão do Common Expression Language (CEL). O modelo de certificado também descarta qualquer assunto especificado na solicitação de certificado.
Use o seguinte comando
gcloudpara criar o modelo de certificado que contém as extensões TLS do servidor de entidade final, descarta qualquersubjectespecificado na solicitação de certificado e limita as SANs permitidas.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'))"Em que:
- A flag
--predefined-values-fileé usada para transmitir um arquivo YAML que descreve todos os valores X.509 predefinidos definidos pelo modelo de certificado. - A flag
--no-copy-subjectdescarta todos os assuntos especificados pelo autor da chamada da solicitação de certificado. - A flag
--copy sansgarante que a extensão SAN da solicitação de certificado seja copiada para o certificado assinado. - A flag
--identity-cel-expressioné usada para transmitir uma expressão CEL que é avaliada em relação à identidade no certificado antes da emissão. Para mais informações sobre como usar expressões CEL para implementar vários controles de políticas, consulte Usar o CEL.
Para mais informações sobre como criar modelos de certificado, consulte Criar um modelo de certificado.
- A flag
Criar vinculações do IAM para certificados de teste de DNS
Para permitir que o usuário test-dns-requester@ no pool de ACs de DNS solicite certificados TLS de servidor de teste, crie uma vinculação condicional do IAM no pool de ACs. Conceda o papel privateca.certificateRequester ao usuário test-dns-requester@ somente se a solicitação de certificado contiver uma referência ao modelo test-server-tls-template. Para mais informações sobre
papéis e permissões do IAM para o CA Service, consulte Controle
de acesso com
o IAM.
Crie um arquivo YAML de política
test_dns_condition.yamle copie a seguinte configuração TLS para o arquivo.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 precisa corresponder ao nome do modelo na solicitação de certificado. Portanto, se você estiver fornecendo um ID do projeto no atributo
privateca.googleapis.com/templateda expressão CEL, também será necessário fornecer um ID do projeto ao solicitar o certificado. Se você fornecer um número do projeto na expressão CEL, também será necessário fornecer um número do projeto na solicitação de certificado.Use o seguinte comando
gcloudpara adicionar controles de políticas que permitam quetest-dns-requester@solicite apenas certificados TLS de teste de produção do pool 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.yamlEm que:
- A flag
--roleé usada para transmitir o nome do papel a ser atribuído a um membro. Para mais informações sobre papéis e permissões do IAM para o CA Service, consulte Controle de acesso com o IAM. - A flag
--memberé usada para transmitir o membro para adição da vinculação. - A flag
condition-from-fileé usada para transmitir o nome do arquivo com a condição CEL.
- A flag
Use o seguinte
gcloudpara adicionar controles de políticas que permitam quetest-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@'Em que:
- A flag
--roleé usada para transmitir o nome do papel a ser atribuído a um membro. Para mais informações sobre papéis e permissões do IAM para o CA Service, consulte Controle de acesso com o IAM. - A flag
--memberé usada para transmitir o membro para adição da vinculação.
Para mais informações sobre como configurar políticas do IAM, consulte Configurar políticas do IAM.
- A flag
Como configurar controles de políticas para certificados de produção
Depois de testar os controles de políticas, você poderá usá-los no ambiente de produção.
Configurar controles de políticas para certificados DNS de produção
Esta seção descreve como definir controles de políticas para permitir que o usuário prod-dns-requester solicite certificados TLS de entidade final para o domínio DNS .prod.example.com.
Criar modelo de certificado para certificados DNS de produção
Use as instruções a seguir para criar um modelo de certificado que contenha
a configuração TLS do servidor de entidade final.
Esse modelo de certificado restringe os certificados ao uso apenas de SANs de DNS no domínio *.prod.example.com. Essas restrições são implementadas usando uma expressão do Common Expression Language (CEL). O modelo de certificado também descarta qualquer assunto especificado na solicitação 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'))"
Em que:
- A flag
--predefined-values-fileé usada para transmitir um arquivo YAML que descreve todos os valores X.509 predefinidos definidos pelo modelo de certificado. --no-copy-subjectA flag descarta todos os assuntos especificados pelo autor da chamada da solicitação de certificado.- A flag
--copy sansgarante que a extensão SAN da solicitação de certificado seja copiada para o certificado assinado. - A flag
--identity-cel-expressioné usada para transmitir uma expressão CEL que é avaliada em relação à identidade no certificado antes da emissão. Para mais informações sobre expressões CEL, consulte Usar expressões CEL.
Para mais informações sobre como criar modelos de certificado, consulte Criar um modelo de certificado.
Para mais informações sobre o comando gcloud privateca templates create, consulte
gcloud privateca templates create.
Criar vinculação do IAM de DNS de produção
Para permitir que o usuário prod-dns-requester@ no pool de ACs de DNS solicite certificados TLS de servidor de produção, crie uma vinculação condicional do IAM no pool de ACs. Conceda ao usuário prod-dns-requester@ o papel privateca.certificateRequester somente se a solicitação de certificado contiver uma referência ao modelo prod-server-tls-template. Para mais informações sobre
papéis e permissões do IAM, consulte: Controle de acesso com
o IAM.
Crie um arquivo YAML de política
prod_dns_condition.yamle copie a seguinte configuração TLS para o arquivo.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"Use o seguinte comando
gcloudpara adicionar controles de políticas que permitam queprod-dns-requester@solicite apenas certificados TLS de servidor de produção do pool 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.yamlEm que:
- A flag
--roleé usada para transmitir o nome do papel a ser atribuído a um membro. Para mais informações sobre papéis e permissões do IAM para o CA Service, consulte Controle de acesso com o IAM. - A flag
--memberé usada para transmitir o membro para adição da vinculação. - A flag
condition-from-fileé usada para transmitir o nome do arquivo 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.- A flag
Para adicionar controles de políticas que permitam que
prod-dns-requester@use o modelo de certificado "prod-server-tls-template", use o seguinte comandogcloud:gcloud
gcloud privateca templates add-iam-policy-binding prod-server-tls-template \ --role='roles/privateca.templateUser' \ --member='user:prod-dns-requester@'Em que:
- A flag
--roleé usada para transmitir o nome do papel a ser atribuído a um membro. Para mais informações sobre papéis e permissões do IAM para o CA Service, consulte Controle de acesso com o IAM. - A flag
--memberé usada para transmitir o membro para adição da vinculação.
- A flag
Controles de políticas de usuário irrestritos
Para permitir que o usuário blank-check-requester@ solicite qualquer certificado sem limitações, crie uma vinculação do IAM sem condições que conceda ao usuário o papel 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'
Em que:
- O valor da flag
--roledetermina o papel atribuído ao usuário. Para mais informações sobre papéis e permissões do IAM para o CA Service, consulte Controle de acesso com o IAM. - O valor da flag
--memberdetermina o usuário a quem o papel é atribuído.
Substitua:
- POOL_NAME: o identificador exclusivo do pool de CAs.
- LOCATION: o local do pool de CAs. Para conferir a lista completa de locais, consulte Locais.
Como testar os controles de políticas
Depois de implementar as políticas de emissão de certificados e do IAM, é importante revisar e testar essas políticas para garantir que elas funcionem conforme o esperado.
Recuperar todas as vinculações de políticas
Busque todas as políticas do IAM implementadas no pool de CAs.
Para recuperar todas as políticas do IAM do pool de CAs, use o gcloud
privateca pools get-iam-policy comando:
gcloud
gcloud privateca pools get-iam-policy POOL_NAME --location=LOCATION
Substitua:
- POOL_NAME: o identificador exclusivo do pool de CAs.
- LOCATION: o local do pool de CAs. Para conferir a lista completa de locais, consulte Locais.
Para mais informações sobre o comando gcloud privateca pools get-iam-policy,
consulte gcloud privateca pools
get-iam-policy.
Como gerar certificados
Esta seção fornece informações sobre como gerar certificados de uso geral e certificados DNS de teste e produção.
Gerar certificados DNS de teste
Para permitir que o usuário test-dns-requester@ solicite certificados DNS de teste do pool de ACs, 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
Em que:
- A flag
--dns-sané usada para definir uma ou mais SANs de DNS separadas por vírgula. - A flag
--generate-keyaciona a geração de uma nova chave privada RSA-2048 na sua máquina. - A flag
--key-output-fileé usada para definir o caminho em que a chave privada gerada é gravada (no formato PEM). - A flag
--cert-output-fileé usada para definir o caminho em que o arquivo de cadeia de certificados codificado em PEM resultante é gravado (ordenado da entidade final para a raiz). - A flag
--templateé usada para definir o nome do modelo de certificado que você quer usar para emitir esse certificado. O modelo especificado precisa estar no mesmo local que o pool de CAs emissoras. Para mais informações sobre modelos de certificado, consulte Visão geral dos modelos de certificado e das políticas de emissão.
Substitua:
- PROJECT_ID: o identificador exclusivo do projeto.
- LOCATION: o local do pool de ACs do qual o certificado é solicitado. Para conferir a lista completa de locais, consulte Locais.
- POOL_NAME: o identificador exclusivo do pool de CAs.
Gerar certificados de produção
O usuário prod-dns-requester agora pode solicitar certificados DNS de produção do pool de CAs. A flag --dns-san=foo.bar.prod.example.com adiciona uma SAN do tipo DNS com o valor especificado à solicitação 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
Em que:
- A flag
--issuer-locationé usada para definir o local do certificado. Para conferir a lista completa de locais, consulte Locais. - A flag
--issuer-pooldefine o pool de CAs do qual o certificado é solicitado. - A flag
--dns-sané usada para definir uma ou mais SANs de DNS separadas por vírgula. - A flag
--generate-keyaciona a geração de uma nova chave privada RSA-2048 na sua máquina. - A flag
--key-output-fileé usada para definir o caminho em que a chave privada gerada é gravada (no formato PEM). - A flag
--cert-output-fileé usada para definir o caminho em que o arquivo de cadeia de certificados codificado em PEM resultante é gravado (ordenado da entidade final para a raiz). - A flag
--templateé usada para definir o nome do modelo de certificado a ser usado para emitir esse certificado. O modelo especificado precisa estar no mesmo local que o pool de ACs emissoras. Para mais informações sobre modelos de certificado, consulte Visão geral dos modelos de certificado e das políticas de emissão.
Gerar certificados de uso geral
O usuário blank-check-requester@ pode solicitar qualquer certificado do pool de ACs usando o comando gcloud privateca certificates create.
Para solicitar um certificado de um pool de CAs, você pode usar uma chave pública/privada criada pelo CA Service. Para mais informações sobre como solicitar certificados, consulte Solicitar um certificado e visualizar o certificado emitido.
Limpar
Esta seção explica como remover políticas do IAM em um pool de CAs.
Remover uma vinculação específica do IAM
Para remover as vinculações condicionais do IAM no pool de ACs para o usuário 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@'
Em que:
- O valor da flag
--roledetermina o papel atribuído ao usuário. Para mais informações sobre papéis e permissões do IAM para o CA Service, consulte Controle de acesso com o IAM. - O valor da flag
--memberdetermina o usuário a quem o papel é atribuído.
Ao remover uma vinculação específica do IAM, forneça todas as
informações relacionadas à vinculação do IAM no comando gcloud privateca
pools remove-iam-policy-binding. Um papel e um membro podem ter várias vinculações do IAM com condições diferentes. É importante fornecer todos os detalhes relacionados à vinculação do IAM para evitar a exclusão acidental de uma vinculação diferente.
Para mais informações sobre o comando gcloud privateca pools
remove-iam-policy-binding, consulte gcloud privateca pools
remove-iam-policy-binding.
Remover todas as vinculações condicionais do IAM
Para remover uma vinculação do IAM, use o gcloud privateca pools
remove-iam-policy-binding comando. Ao remover uma vinculação condicional do IAM, forneça todas as informações sobre a vinculação. Um usuário e um papel podem ter mais de uma vinculação condicional. Para remover todas as vinculações condicionais, use a flag --all no comando gcloud.
Use o seguinte comando gcloud para remover todas as vinculações do usuário 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
Em que:
- O valor da flag
--roledetermina o papel atribuído ao usuário. Para mais informações sobre papéis e permissões do IAM para o CA Service, consulte Controle de acesso com o IAM. - O valor da flag
--memberdetermina o usuário a quem o papel é atribuído.