Tutorial: gerenciar controles de política
Neste tutorial, mostramos como implementar controles de política nos recursos do Certificate Authority Service.
Objetivos
Este tutorial fornece informações sobre como configurar um pool de autoridades de certificação (CA) compartilhada para a emissão de certificados DNS com os seguintes controles de política:
- O usuário
prod-dns-requester
pode solicitar certificados TLS do servidor de entidade final para o domínio*.prod.example.com
. - O usuário
test-dns-requester
pode solicitar certificados TLS do 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.
Neste tutorial, usamos a política de emissão de certificados de um pool de ACs, modelos de certificado e vinculações condicionais do IAM para criar esse cenário.
Antes de começar
- Leia sobre os diversos controles de política oferecidos pelo serviço de AC.
- 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.
- Saiba como usar a Common Expression Language (CEL) para aplicar vários controles de política na emissão de certificados.
- Saiba 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 de serviço de AC.
Como criar um pool de ACs
Para criar um pool de ACs, use as seguintes 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 \ --tier=ENTERPRISE
Em que:
- A sinalização
--tier
é usada para especificar o nível do pool de ACs. Para mais informações sobre níveis, consulte Selecionar os níveis de operação.
- A sinalização
Para criar uma AC com recursos gerenciados pelo Google no pool de ACs recém-criado, use o seguinte comando
gcloud
:gcloud
gcloud privateca roots create CA_NAME \ --pool=POOL_NAME \ --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.
- A sinalização
--subject
é usada para transmitir o nome do assunto do certificado. - A flag
--validity
determina o período de validade da CA. O período de validade padrão é de 10 anos. - A sinalização
--max-chain-length
determina a profundidade máxima de CAs subordinadas permitidas em uma CA. - A sinalização
--auto-enable
cria a CA no estadoENABLED
, em vez deSTAGED
. Consulte Estados de CA para saber mais.
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. Nesta seção, descrevemos como configurar controles de política de teste.
Use os mesmos valores predefinidos para os certificados TLS do servidor nos modelos DNS de teste e de produção. 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
Nesta seção, descrevemos como definir controles de política para permitir que o usuário test-dns-requester
solicite certificados TLS do servidor de entidade final para DNS no domínio *.test.example.com
.
Criar modelo de certificado DNS para certificados de teste
Nesta seção, descrevemos como criar um modelo de certificado que contém 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 *.test.example.com
. Essas restrições são implementadas usando uma expressão Common Expression Language (CEL). O modelo também remove qualquer assunto especificado na solicitação do certificado.
Use o comando
gcloud
a seguir para criar o modelo de certificado que contém as extensões TLS do servidor de entidade final, descarta qualquersubject
especificado 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 sinalização
--predefined-values-file
é usada para transmitir um arquivo YAML que descreve os valores X.509 predefinidos definidos pelo modelo de certificado. - A sinalização
--no-copy-subject
descarta todos os assuntos especificados pelo autor da chamada da solicitação de certificado. - A sinalização
--copy sans
garante que a extensão SAN da solicitação de certificado seja copiada para o certificado assinado. - A sinalização
--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 como usar expressões CEL para implementar vários controles de política, consulte Como usar CEL.
Para mais informações sobre como criar modelos de certificado, consulte Criar um modelo de certificado.
- A sinalização
Criar vinculações do IAM para certificados de teste de DNS
Para permitir que o usuário test-dns-requester@
no pool de CAs do DNS solicite certificados TLS do servidor de teste, crie uma vinculação condicional do IAM no pool de CAs. 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 os papéis e as permissões do IAM para o serviço de CA, consulte Controle de acesso com o IAM.
Crie um arquivo YAML de política
test_dns_condition.yaml
e copie a seguinte configuração de TLS nele.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 do certificado. Portanto, se você estiver fornecendo um ID do projeto no atributo
privateca.googleapis.com/template
da expressão CEL, também precisará fornecer esse ID ao solicitar o certificado. Se você fornecer um número de projeto na expressão CEL, também precisará fornecer um número na solicitação do certificado.Use o seguinte comando
gcloud
para adicionar controles de política que permitem que otest-dns-requester@
solicite apenas certificados TLS de teste de produção do pool de CAs.gcloud
gcloud privateca pools add-iam-policy-binding POOL_NAME \ --role='roles/privateca.certificateRequester' \ --member='user:test-dns-requester@' \ --condition-from-file=./test_dns_condition.yaml
Em que:
- A sinalização
--role
é usada para transmitir o nome do papel que será atribuído a um membro. Para mais informações sobre os papéis e as permissões do IAM para o serviço de CA, consulte Controle de acesso com o IAM. - A sinalização
--member
é usada para transmitir o membro ao qual a vinculação será adicionada. - A sinalização
condition-from-file
é usada para transmitir o nome do arquivo com a condição CEL.
- A sinalização
Use o
gcloud
a seguir para adicionar controles de política que permitem 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 sinalização
--role
é usada para transmitir o nome do papel que será atribuído a um membro. Para mais informações sobre os papéis e as permissões do IAM para o serviço de CA, consulte Controle de acesso com o IAM. - A sinalização
--member
é usada para transmitir o membro ao qual a vinculação será adicionada.
Para mais informações sobre como configurar políticas do IAM, consulte Configurar políticas do IAM.
- A sinalização
Como configurar controles de política para certificados de produção
Depois de testar seus controles de política, use-os no seu ambiente de produção.
Configurar controles de política para certificados DNS de produção
Nesta seção, descrevemos 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 Common Expression Language (CEL). O modelo também remove qualquer assunto especificado na solicitação do 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 sinalização
--predefined-values-file
é usada para transmitir um arquivo YAML que descreve os valores X.509 predefinidos definidos pelo modelo de certificado. - A sinalização
--no-copy-subject
descarta todos os assuntos especificados pelo autor da chamada da solicitação de certificado. - A sinalização
--copy sans
garante que a extensão SAN da solicitação de certificado seja copiada para o certificado assinado. - A sinalização
--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 models create.
Criar vinculação de IAM do DNS de produção
Para permitir que o usuário prod-dns-requester@
no pool de CAs do DNS solicite certificados TLS do servidor de produção, crie uma vinculação condicional do IAM no pool de CAs. 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 os papéis e as 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 nele.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
gcloud
para adicionar controles de política que permitem que oprod-dns-requester@
solicite apenas certificados TLS do servidor de produção do pool de CAs.gcloud
gcloud privateca pools add-iam-policy-binding POOL_NAME \ --role='roles/privateca.certificateRequester' \ --member='user:prod-dns-requester@' \ --condition-from-file=./prod_dns_condition.yaml
Em que:
- A sinalização
--role
é usada para transmitir o nome do papel que será atribuído a um membro. Para mais informações sobre os papéis e as permissões do IAM para o serviço de CA, consulte Controle de acesso com o IAM. - A sinalização
--member
é usada para transmitir o membro ao qual a vinculação será adicionada. - A sinalização
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 sinalização
Para adicionar controles de política que permitem que o
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 sinalização
--role
é usada para transmitir o nome do papel que será atribuído a um membro. Para mais informações sobre os papéis e as permissões do IAM para o serviço de CA, consulte Controle de acesso com o IAM. - A sinalização
--member
é usada para transmitir o membro ao qual a vinculação será adicionada.
- A sinalização
Controles irrestritos de políticas do usuário
Para permitir que o usuário blank-check-requester@
solicite qualquer certificado sem limitações, crie uma vinculação do IAM sem condições condicionais que concedam ao usuário o papel privateca.certificateRequester
.
gcloud
gcloud privateca pools add-iam-policy-binding POOL_NAME \
--role='roles/privateca.certificateRequester' \
--member='user:blank-check-requester@example.com'
Em que:
- O valor da sinalização
--role
determina o papel atribuído ao usuário. Para mais informações sobre os papéis e as permissões do IAM para o serviço de CA, consulte Controle de acesso com o IAM. - O valor da sinalização
--member
determina o usuário com a função atribuída.
Como testar os controles de política
Depois de implementar as políticas de IAM e emissão de certificados, é importante analisar e testar essas políticas para garantir que funcionem conforme o esperado.
Recuperar todas as vinculações de políticas
Busque todas as políticas do IAM implementadas no 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
Em que:
- POOL_NAME é o identificador exclusivo do pool de ACs.
Para mais informações sobre o comando gcloud privateca pools get-iam-policy
, acesse gcloud privateca pools get-iam-policy.
Gerando 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 CAs, 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 sinalização
--issuer-location
é usada para definir o local do certificado. Para ver a lista completa de locais, consulte Locais. - A sinalização
--issuer-pool
define o pool de CAs de que o certificado é solicitado. - A sinalização
--dns-san
é usada para definir um ou mais SANs DNS separadas por vírgulas. - A sinalização
--generate-key
aciona a geração de uma nova chave privada RSA-2048 na sua máquina. - A sinalização
--key-output-file
é usada para definir o caminho em que a chave privada gerada é gravada (no formato PEM). - A sinalização
--cert-output-file
é usada para definir o caminho em que o arquivo da cadeia de certificados codificado em PEM resultante é gravado (ordenado da entidade final para a raiz). - A sinalização
--template
é usada para definir o nome do modelo 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 a Visão geral de modelos de certificado e políticas de emissão.
Gerar certificados de produção
O usuário prod-dns-requester
agora pode solicitar certificados DNS de produção do pool de ACs. O --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 sinalização
--issuer-location
é usada para definir o local do certificado. Para ver a lista completa de locais, consulte Locais. - A sinalização
--issuer-pool
define o pool de CAs de que o certificado é solicitado. - A sinalização
--dns-san
é usada para definir um ou mais SANs DNS separadas por vírgulas. - A sinalização
--generate-key
aciona a geração de uma nova chave privada RSA-2048 na sua máquina. - A sinalização
--key-output-file
é usada para definir o caminho em que a chave privada gerada é gravada (no formato PEM). - A sinalização
--cert-output-file
é usada para definir o caminho em que o arquivo da cadeia de certificados codificado em PEM resultante é gravado (ordenado da entidade final para a raiz). - A sinalização
--template
é usada para definir o nome do modelo a ser usado 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 a Visão geral de 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 CAs 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 a solicitação de certificados, consulte Solicitar um certificado e ver o certificado emitido.
Limpar
Nesta seção, explicamos como remover políticas do IAM em um pool de ACs.
Remover uma vinculação específica do IAM
Para remover as vinculações condicionais do IAM sobre o 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 \
--role='roles/privateca.certificateRequester' \
--member='user:blank-check-requester@'
Em que:
- O valor da sinalização
--role
determina o papel atribuído ao usuário. Para mais informações sobre os papéis e as permissões do IAM para o serviço de CA, consulte Controle de acesso com o IAM. - O valor da sinalização
--member
determina o usuário com a função atribuída.
Ao remover uma vinculação específica do IAM, forneça 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 que você forneça todos os detalhes relacionados à vinculação do IAM para evitar a exclusão acidental de outra vinculação.
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, você precisa fornecer todas as informações sobre ela. Um usuário e um papel podem ter mais de uma vinculação condicional. Para remover todas as vinculações condicionais, use a sinalização --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 \
--role='roles/privateca.certificateRequester' \
--member='user:prod-code-signing-requester@' \
--all
Em que:
- O valor da sinalização
--role
determina o papel atribuído ao usuário. Para mais informações sobre os papéis e as permissões do IAM para o serviço de CA, consulte Controle de acesso com o IAM. - O valor da sinalização
--member
determina o usuário com a função atribuída.