Use o idioma de expressão comum
Esta página descreve como pode usar o Idioma de expressão comum (IEC) com políticas de emissão de certificados, modelos de certificados e condições de gestão de identidade e de acesso (IAM) no seu conjunto de ACs.
Vista geral
O Idioma de expressão comum (IEC) é um idioma de código aberto não Turing completo que implementa semântica comum para a avaliação de expressões. O serviço de autoridade de certificação suporta CEL para aplicar vários controlos de políticas para a emissão de certificados.
Existem dois dialetos da IEC que podem ser usados com o serviço de CA:
- Um dialeto flexível que pode ser usado nas políticas de emissão de certificados e nos modelos de certificados de um conjunto de ACs.
- Um dialeto mais limitado que pode ser usado em condições do IAM.
Dialeto CEL para políticas de emissão de certificados e modelos de certificados
Quando cria um grupo de ACs ou um modelo de certificado, pode especificar uma expressão CEL como parte das restrições de identidade do certificado. A expressão CEL permite-lhe validar os campos Subject e Subject Alternative Name (SAN).
Para mais informações sobre as políticas de emissão, consulte o artigo Adicione políticas de emissão de certificados.
Para mais informações sobre modelos de certificados, consulte o artigo Vista geral dos controlos de políticas.
O dialeto CEL para as restrições de identidade dos conjuntos de ACs e dos modelos de certificados expõe as seguintes variáveis para aceder e validar os campos de assunto e SAN:
- Assunto:
subject
- SAN:
subject_alt_names
Assunto
Pode validar todos os campos no nome de domínio do assunto de um certificado (incluindo o nome comum), conforme especificado no pedido de certificado, através de uma variável do tipo Subject
e do nome subject
.
Subject
é uma estrutura que contém os seguintes campos:
Tipo | Nome |
---|---|
String |
common_name |
String |
country_code |
String |
organização |
String |
organizational_unit |
String |
localidade |
String |
província |
String |
street_address |
String |
postal_code |
Nomes alternativos de requerente (SANs)
Pode validar todas as SANs, conforme especificado no pedido de certificado, através da variável subject_alt_names
. A variável subject_alt_names
contém uma lista de estruturas SAN, em que cada SAN é do tipo SubjectAltName
.
SubjectAltName
é uma struct que contém os seguintes campos:
Tipo | Nome |
---|---|
String |
valor |
[]Int32 |
oid |
Enum |
escrever |
Pode usar os seguintes valores para o tipo SubjectAltName
:
DNS
URI
EMAIL
IP_ADDRESS
CUSTOM
A variável subject_alt_names
contém uma lista com todos os SANs pedidos.
Pode usar as seguintes macros em SANs:
subject_alt_names.all(san, predicate)
subject_alt_names.exists(san, predicate)
subject_alt_names.exists_one(san, predicate)
subject_alt_names.filter(san, predicate)
Para mais informações sobre macros, consulte o artigo Definição de linguagem: macros.
Exemplos de expressões
Garantir um nome comum específico e um conjunto de países
subject.common_name == "google.com" && (subject.country_code == "US" || subject.country_code == "IR")
Garantir que todos os nomes DNS terminam com uma string personalizada
subject_alt_names.all(san, san.type == DNS && san.value.endsWith(".test.com"))
Garantir que todos os SANs são do tipo DNS ou EMAIL
subject_alt_names.all(san, san.type == DNS || san.type == EMAIL )
Garantir que existe apenas um SAN personalizado com um OID específico
subject_alt_names.size() == 1 && subject_alt_names[0].oid == [1, 2, 3, 5, 17]
Garantir que os SANs personalizados são apenas um conjunto de OIDs
subject_alt_names.all(san, san.oid == [1, 2, 4, 5, 55] || san.oid == [1, 2, 4, 5, 54])
Dialeto CEL para políticas de IAM
Use condições do IAM para sujeitar as associações de funções do IAM a uma expressão condicional. Se a condição for avaliada como true
, a associação de funções do IAM é eficaz. Caso contrário, é ignorada. O serviço CA permite-lhe adicionar associações condicionais de IAM a um conjunto de ACs.
A condição da IAM é uma expressão CEL que faz referência a um conjunto de atributos contextuais sobre o pedido e é avaliada como um valor booleano. Os utilizadores definem condições nas associações de funções numa política de IAM, que é armazenada pelo IAM e avaliada para ver se a operação que está prestes a ser realizada é permitida.
Para mais informações sobre as condições do IAM, consulte o artigo Vista geral das condições do IAM.
Os seguintes atributos são expostos durante a avaliação da CEL das condições da IAM:
privateca.googleapis.com/subject
O
privateca.googleapis.com/subject
está acessível comoapi.getAttribute('privateca.googleapis.com/subject', {})
.
Tipo | Descrição |
---|---|
map{string, string} |
Este campo contém o nome distinto do assunto (incluindo o nome comum), conforme especificado no pedido de certificado recebido. Exemplo { |
privateca.googleapis.com/subject_alt_names
O
privateca.googleapis.com/subject_alt_names
está acessível comoapi.getAttribute('privateca.googleapis.com/subject_alt_names', [])
.
Tipo | Descrição |
---|---|
list{string} |
Este campo contém todos os SANs pedidos, conforme especificado no pedido de certificado recebido. Cada um dos SANs pedidos tem o prefixo do respetivo tipo. Os SANs com tipos desconhecidos têm o prefixo do OID serializado do tipo. Exemplo { |
privateca.googleapis.com/template
O
privateca.googleapis.com/template
está acessível comoapi.getAttribute('privateca.googleapis.com/template', '')
.
Tipo | Descrição |
---|---|
String |
O modelo de certificado que foi usado, se aplicável. O formato é {project_id}/-/{template_id} .Exemplo: my-project-pki/-/workload_tls |
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 pedir o certificado. Se fornecer um número do projeto na expressão CEL, também tem de fornecer um número do projeto no pedido de certificado.
Exemplos de expressões
Garantir que todos os assuntos têm a organização definida como "Exemplo" e o código do país definido como US
ou UK
api.getAttribute('privateca.googleapis.com/subject', {})['organization'] == 'Example' &&
api.getAttribute('privateca.googleapis.com/subject', {})['country_code'] in ['US', 'UK']
Garantir que o pedido de certificado inclui apenas os SANs de DNS fornecidos
api.getAttribute('privateca.googleapis.com/subject_alt_names', [])
.hasOnly(['dns:sample1.prod.example.com', 'dns:sample2.prod.example.com'])
Garantir que todos os certificados usam um modelo específico
api.getAttribute('privateca.googleapis.com/template', '') == 'my-project-pki/-/leaf-server-tls'
O que se segue?
- Leia a introdução ao IEC.
- Saiba mais acerca da definição de idioma para o IEC.
- Saiba mais sobre os modelos de certificados e as políticas de emissão.
- Leia a vista geral das condições do IAM.
- Saiba como adicionar uma política de emissão de certificados a um conjunto de ACs.