Tutorial: como gerenciar controles de políticas
Neste tutorial, mostramos como implementar controles de política em recursos do serviço de autoridade certificadora.
Objetivos
Este tutorial fornece informações sobre como configurar um pool de autoridades certificadoras (ACs) compartilhadas para emissão de certificados DNS com os seguintes controles de política:
- O usuário
prod-dns-requester
pode solicitar certificados TLS de servidor de entidade final para o domínio*.prod.example.com
. - O usuário
test-dns-requester
pode solicitar certificados TLS de servidor de entidade final para o domínio*.test.example.com
. - O usuário
blank-check-requester
pode 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 certificados 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 serviço de CA.
- Saiba como criar modelos de certificado.
- Leia sobre os perfis de certificado que podem ser usados em vários cenários de emissão de certificados.
- Leia como usar o Common Expression Language (CEL) para aplicar vários controles de política para emissão de certificados.
- Leia como usar uma política de emissão de certificados.
- Saiba como configurar, modificar e remover políticas do IAM para criar e gerenciar recursos do serviço de AC.
Como criar um pool de ACs
Para criar um pool de ACs, siga estas instruções:
Para criar um pool de CAs que use o arquivo
issuance-policy.yaml
, use o comandogcloud
a seguir:gcloud
gcloud privateca pools create POOL_NAME --location=LOCATION --tier=ENTERPRISE
Em 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 ACs. Para mais informações sobre os níveis, consulte Selecionar os níveis de operação.
Para criar uma AC com recursos gerenciados pelo Google no pool de ACs recém-criado, use o comando
gcloud
a seguir: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
Em que:
- POOL_NAME é o identificador exclusivo do pool de ACs.
- 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
--validity
determina o período de validade da AC. O período de validade padrão é de 10 anos. - A flag
--max-chain-length
determina a profundidade máxima de ACs subordinadas permitidas em uma AC. - A flag
--auto-enable
cria a AC no estadoENABLED
, em vez de no estadoSTAGED
. Para mais informações sobre os estados da CA, consulte Estados da CA.
Como configurar controles de política 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ítica 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, é necessário usar 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 de TLS do servidor de entidade final
no arquivo.
keyUsage:
baseKeyUsage:
digitalSignature: true
keyEncipherment: true
extendedKeyUsage:
serverAuth: true
caOptions:
isCa: false
Configurar controles de política para certificados DNS de teste
Esta seção descreve como definir controles de política para permitir que o usuário
test-dns-requester
solicite certificados de TLS de servidor de entidade final para DNS no
domínio *.test.example.com
.
Criar modelo de certificado DNS para certificados de teste
Esta seção descreve como criar um modelo de certificado que contenha a configuração do TLS do servidor de entidade final. Esse modelo de certificado restringe os certificados a usar apenas
SANs DNS no domínio *.test.example.com
. Essas restrições são implementadas
usando uma expressão da Common Expression Language (CEL). O modelo de certificado
também descarta qualquer assunto especificado na solicitação de certificado.
Use o comando
gcloud
abaixo para criar o modelo de certificado que contém as extensões TLS do servidor de entidade final, exclui qualquersubject
especificado na solicitação 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'))"
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-subject
remove todos os sujeitos especificados pelo autor da chamada da solicitação de certificado. - A flag
--copy sans
garante 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 de CEL que é avaliada em relação à identidade no certificado antes de ser emitido. Para mais informações sobre como usar expressões da CEL para implementar vários controles de políticas, consulte Como usar a 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 do DNS solicite certificados TLS
de servidor de teste, crie uma vinculação condicional do IAM no pool
de ACs. Conceda a função 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 serviço de CA, consulte Controle de acesso com
IAM.
Crie um arquivo YAML de política
test_dns_condition.yaml
e copie a seguinte configuração de 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 ser idêntico ao nome do modelo na solicitação de certificado. Portanto, se você estiver fornecendo um ID de projeto no atributo
privateca.googleapis.com/template
da expressão CEL, também precisará fornecer um ID de projeto ao solicitar o certificado. Se você informar um número de projeto na expressão CEL, também precisará informar um número de projeto na solicitação de certificado.Use o comando
gcloud
a seguir para adicionar controles de política 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.yaml
Em que:
- A flag
--role
é usada para transmitir o nome do papel que será atribuído a um membro. Para mais informações sobre papéis e permissões do IAM para o serviço de CA, consulte Controle de acesso com o IAM. - A flag
--member
é usada para transmitir o membro para adicionar a vinculação. - A flag
condition-from-file
é usada para transmitir o nome do arquivo com a condição CEL.
- A flag
Use o
gcloud
a seguir para adicionar controles de política 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 que será atribuído a um membro. Para mais informações sobre papéis e permissões do IAM para o serviço de CA, consulte Controle de acesso com o IAM. - A flag
--member
é usada para transmitir o membro para adicionar a 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ítica 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ítica para certificados DNS de produção
Esta seção descreve como definir controles de política para permitir que o usuário
prod-dns-requester
solicite certificados TLS de entidade final para o domínio
.prod.example.com
do DNS.
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 de TLS do servidor de entidade final.
Este modelo de certificado restringe os certificados a usar apenas SANs DNS no
domínio *.prod.example.com
. Essas restrições são implementadas usando uma expressão da 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 comando
gcloud
abaixo.
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. - A flag
--no-copy-subject
exclui todos os sujeitos especificados pelo autor da chamada da solicitação de certificado. - A flag
--copy sans
garante 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 de ser emitida. Para mais informações sobre as expressões CEL, consulte Como 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 de DNS de produção do IAM
Para permitir que o usuário prod-dns-requester@
no pool de ACs do DNS solicite certificados TLS
de servidor de produção, crie uma vinculação condicional do IAM no
pool de ACs. Dê 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.yaml
e copie a seguinte configuração de 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 comando
gcloud
a seguir para adicionar controles de política 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.yaml
Em que:
- A flag
--role
é usada para transmitir o nome do papel que será atribuído a um membro. Para mais informações sobre papéis e permissões do IAM para o serviço de CA, consulte Controle de acesso com o IAM. - A flag
--member
é usada para transmitir o membro para adicionar a 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ítica 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 que será atribuído a um membro. Para mais informações sobre papéis e permissões do IAM para o serviço de CA, consulte Controle de acesso com o IAM. - A flag
--member
é usada para transmitir o membro para adicionar a vinculação.
- A flag
Controles de política de usuário sem restrições
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 concedam 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
--role
determina a função atribuída ao usuário. Para mais informações sobre papéis e permissões do IAM para o serviço de CA, consulte Controle de acesso com o IAM. - O valor da flag
--member
determina o usuário a quem a função é atribuída.
Substitua:
- POOL_NAME: o identificador exclusivo do pool de ACs.
- LOCATION: o local do pool de ACs. 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 IAM, é importante revisar e testar essas políticas para garantir que elas funcionem conforme o esperado.
Extrair todas as vinculações de políticas
Extraia todas as políticas do IAM implementadas no seu pool de ACs.
Para recuperar todas as políticas do IAM para o pool de ACs, use o comando gcloud
privateca pools get-iam-policy
:
gcloud
gcloud privateca pools get-iam-policy POOL_NAME --location=LOCATION
Substitua:
- POOL_NAME: o identificador exclusivo do pool de ACs.
- LOCATION: o local do pool de ACs. 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 de produção.
Gerar certificados DNS de teste
Para permitir que o usuário test-dns-requester@
solicite certificados DNS de teste do pool
de AC, use o comando gcloud
a seguir:
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 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 na 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 é gravado (ordenado da entidade final até 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 ACs emissor. 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 em que o certificado é solicitado. Para conferir a lista completa de locais, consulte Locais.
- POOL_NAME: o identificador exclusivo do pool de ACs.
Gerar certificados de produção
O usuário prod-dns-requester
agora pode solicitar certificados DNS de produção do
pool de AC. O --dns-san=foo.bar.prod.example.com
adiciona um 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-pool
define o pool de AC em que o certificado é solicitado. - 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 na 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 é gravado (ordenado da entidade final até 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 AC emissor. Para mais informações sobre modelos de certificado, consulte Visão geral dos modelos de certificado e 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 ACs, use uma chave pública/privada criada pelo serviço de AC. Para mais informações sobre como solicitar certificados, consulte Solicitar um certificado e conferir o certificado emitido.
Limpar
Esta seção explica como remover políticas do IAM em um pool de AC.
Remover uma vinculação específica do IAM
Para remover as vinculações condicionais do IAM no pool de AC do 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
--role
determina a função atribuída ao usuário. Para mais informações sobre papéis e permissões do IAM para o serviço de CA, consulte Controle de acesso com o IAM. - O valor da flag
--member
determina o usuário a quem a função é atribuída.
Ao remover uma vinculação específica do IAM, é necessário fornecer todas as
informações relacionadas a ela 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 comando gcloud privateca pools
remove-iam-policy-binding
. Ao remover uma vinculação condicional do IAM, é necessário fornecer todas as informações sobre ela. Um
usuário e uma função podem ter mais de uma vinculação condicional. Para remover todas as vinculações condicionais, use a flag --all
no comando gcloud
.
Use o comando gcloud
abaixo 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
--role
determina a função atribuída ao usuário. Para mais informações sobre papéis e permissões do IAM para o serviço de CA, consulte Controle de acesso com o IAM. - O valor da flag
--member
determina o usuário a quem a função é atribuída.