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
- Leia acerca dos vários controlos de políticas oferecidos pelo serviço de CA.
- Leia como pode criar modelos de certificados.
- Leia acerca dos perfis de certificados que pode usar para vários cenários de emissão de certificados.
- Leia como pode usar o Idioma de expressão comum (IEC) para aplicar vários controlos de políticas para a emissão de certificados.
- Leia como pode usar uma política de emissão de certificados.
- Leia como pode configurar, modificar e remover políticas de IAM para criar e gerir recursos do serviço de AC.
Criar um grupo de ACs
Para criar um conjunto de ACs, siga estas instruções:
Para criar um CA pool que use o ficheiro
issuance-policy.yaml
, use o seguinte comandogcloud
: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.
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 estadoENABLED
, em vez de no estadoSTAGED
. 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.
Use o comando
gcloud
seguinte para criar o modelo de certificado que contém as extensões TLS do servidor de entidade final, elimina qualquersubject
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.
- A flag
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.
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.Use o seguinte comando
gcloud
para adicionar controlos de políticas que permitam quetest-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.
- A flag
Use o seguinte
gcloud
para adicionar controlos 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@'
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.
- A flag
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.
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"
Use o seguinte comando
gcloud
para adicionar controlos de políticas que permitam queprod-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.- A flag
Para adicionar controlos 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@'
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.
- A flag
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.