Tutorial: gestire i controlli dei criteri
Questo tutorial mostra come implementare i controlli dei criteri sulle risorse di Certificate Authority Service.
Obiettivi
Questo tutorial fornisce informazioni sulla configurazione di un pool di autorità di certificazione (CA) condiviso per l'emissione di certificati DNS con i seguenti controlli dei criteri:
- L'utente
prod-dns-requester
può richiedere certificati TLS del server dell'entità finale per il dominio*.prod.example.com
. - L'utente
test-dns-requester
può richiedere certificati TLS del server dell'entità finale per il dominio*.test.example.com
. - L'utente
blank-check-requester
può richiedere qualsiasi tipo di certificato al pool di CA.
Per ottenere questo scenario, questo tutorial utilizza i criteri di emissione dei certificati di un pool di CA, i modelli di certificato e le associazioni IAM condizionali.
Prima di iniziare
- Scopri i vari controlli dei criteri offerti da CA Service.
- Scopri come creare modelli di certificato.
- Scopri di più sui profili dei certificati che puoi utilizzare per vari scenari di emissione di certificati.
- Scopri come puoi utilizzare il Common Expression Language (CEL) per applicare vari controlli dei criteri per l'emissione dei certificati.
- Scopri come utilizzare le norme di emissione dei certificati.
- Scopri come configurare, modificare e rimuovere i criteri IAM per creare e gestire le risorse del servizio CA.
Creazione di un pool di CA
Per creare un pool di CA, segui queste istruzioni:
Per creare un pool di CA che utilizzi il file
issuance-policy.yaml
, utilizza il seguente comandogcloud
:gcloud
gcloud privateca pools create POOL_NAME \ --tier=ENTERPRISE
Dove:
- Il flag
--tier
viene utilizzato per specificare il livello del pool di CA. Per ulteriori informazioni sui livelli, consulta Selezionare i livelli di operazioni.
- Il flag
Per creare una CA con risorse gestite da Google nel pool di CA appena creato, utilizza il seguente 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
Dove:
- POOL_NAME è l'identificatore univoco del pool di CA.
- Il flag
--subject
viene utilizzato per passare il nome dell'oggetto del certificato. - Il flag
--validity
determina il periodo di validità della CA. Il periodo di validità predefinito è 10 anni. - Il flag
--max-chain-length
determina la profondità massima di CA subordinate consentite in una CA. - Il flag
--auto-enable
crea la CA nello statoENABLED
, anziché nello statoSTAGED
. Per ulteriori informazioni, consulta la sezione Stati delle CA.
Configurazione dei controlli dei criteri per i certificati di test
Le modifiche alle norme di emissione hanno effetto immediato. Ti consigliamo di configurare i controlli dei criteri di test prima di utilizzarli per la produzione. Questa sezione descrive come configurare i controlli dei criteri di test.
Per i modelli DNS di test e di produzione, devi utilizzare gli stessi valori predefiniti per i certificati TLS del server. Crea un file YAML leaf_server_tls_predefined_values.yaml
e copia la seguente configurazione TLS del server dell'entità finale nel file.
keyUsage:
baseKeyUsage:
digitalSignature: true
keyEncipherment: true
extendedKeyUsage:
serverAuth: true
caOptions:
isCa: false
Configura i controlli dei criteri per i certificati DNS di test
Questa sezione descrive come impostare i controlli dei criteri per consentire all'utente test-dns-requester
di richiedere i certificati TLS del server dell'entità finale per il DNS nel dominio *.test.example.com
.
Crea un modello di certificato DNS per i certificati di test
Questa sezione descrive come creare un modello di certificato contenente la configurazione TLS del server dell'entità finale. Questo modello di certificato limita l'utilizzo dei certificati all'utilizzo solo di SAN DNS sul dominio *.test.example.com
. Queste limitazioni vengono implementate utilizzando un'espressione CEL (Common Expression Language). Inoltre, il modello di certificato esclude qualsiasi oggetto specificato nella richiesta di certificato.
Utilizza il seguente comando
gcloud
per creare il modello di certificato che contiene le estensioni TLS del server dell'entità finale, elimina eventualisubject
specificati nella richiesta di certificato e limita le SAN consentite.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'))"
Dove:
- Il flag
--predefined-values-file
viene utilizzato per passare un file YAML che descrive tutti i valori X.509 predefiniti impostati dal modello di certificato. - Il flag
--no-copy-subject
elimina tutti gli oggetti specificati dal chiamante dalla richiesta di certificato. - Il flag
--copy sans
assicura che l'estensione SAN della richiesta di certificato venga copiata nel certificato firmato. - Il flag
--identity-cel-expression
viene utilizzato per passare un'espressione CEL che viene valutata in base all'identità nel certificato prima dell'emissione. Per ulteriori informazioni sull'utilizzo delle espressioni CEL per implementare vari controlli dei criteri, consulta la sezione Utilizzo di CEL.
Per saperne di più sulla creazione di modelli di certificato, vedi Creare un modello di certificato.
- Il flag
Crea associazioni IAM per i certificati di test DNS
Per consentire all'utente test-dns-requester@
nel pool di CA DNS di richiedere i certificati TLS del server di test, crea un'associazione IAM condizionale nel pool di CA. Concedi il ruolo privateca.certificateRequester
all'utente test-dns-requester@
solo se la richiesta di certificato contiene un riferimento al modello test-server-tls-template
. Per ulteriori informazioni sui ruoli e sulle autorizzazioni IAM per il servizio CA, consulta Controllo dell'accesso con IAM.
Crea un file YAML del criterio
test_dns_condition.yaml
e copia la seguente configurazione TLS nel file.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"
Il nome del modello fornito nella condizione IAM deve corrispondere al nome del modello nella richiesta di certificato. Quindi, se fornisci un ID progetto nell'attributo
privateca.googleapis.com/template
dell'espressione CEL, devi fornire un ID progetto anche quando richiedi il certificato. Se fornisci un numero di progetto nell'espressione CEL, devi fornire anche un numero di progetto nella richiesta di certificato.Usa il seguente comando
gcloud
per aggiungere controlli dei criteri che consentano atest-dns-requester@
di richiedere solo certificati TLS di test di produzione dal pool di CA.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
Dove:
- Il flag
--role
viene utilizzato per passare il nome del ruolo da assegnare a un membro. Per ulteriori informazioni sui ruoli e sulle autorizzazioni IAM per il servizio CA, consulta Controllo dell'accesso con IAM. - Il flag
--member
viene utilizzato per passare il membro per cui aggiungere l'associazione. - Il flag
condition-from-file
viene utilizzato per passare il nome del file con la condizione CEL.
- Il flag
Utilizza il seguente
gcloud
per aggiungere controlli dei criteri che consentano atest-dns-requester@
di usare il modello di certificato "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@'
Dove:
- Il flag
--role
viene utilizzato per passare il nome del ruolo da assegnare a un membro. Per ulteriori informazioni sui ruoli e sulle autorizzazioni IAM per il servizio CA, consulta Controllo dell'accesso con IAM. - Il flag
--member
viene utilizzato per passare il membro per cui aggiungere l'associazione.
Per saperne di più sulla configurazione dei criteri IAM, consulta Configurare i criteri IAM.
- Il flag
Configurazione dei controlli dei criteri per i certificati di produzione
Dopo aver testato i controlli dei criteri, puoi utilizzarli nel tuo ambiente di produzione.
Configura i controlli dei criteri per i certificati DNS di produzione
Questa sezione descrive come impostare i controlli dei criteri per consentire all'utente prod-dns-requester
di richiedere certificati TLS dell'entità finale per il dominio DNS .prod.example.com
.
Crea modello di certificato per i certificati DNS di produzione
Segui le istruzioni riportate di seguito per creare un modello di certificato contenente la configurazione TLS del server dell'entità finale. Questo modello di certificato limita l'utilizzo dei certificati all'utilizzo solo di SAN DNS sul dominio *.prod.example.com
. Queste limitazioni vengono implementate utilizzando un'espressione CEL (Common Expression Language). Inoltre, il modello di certificato esclude qualsiasi oggetto specificato nella richiesta di certificato.
Crea un modello di certificato prod-server-tls-template
utilizzando il seguente 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'))"
Dove:
- Il flag
--predefined-values-file
viene utilizzato per passare un file YAML che descrive tutti i valori X.509 predefiniti impostati dal modello di certificato. - Il flag
--no-copy-subject
elimina tutti gli oggetti specificati dal chiamante dalla richiesta di certificato. - Il flag
--copy sans
assicura che l'estensione SAN della richiesta di certificato venga copiata nel certificato firmato. - Il flag
--identity-cel-expression
viene utilizzato per passare un'espressione CEL che viene valutata in base all'identità nel certificato prima dell'emissione. Per ulteriori informazioni sulle espressioni CEL, consulta la sezione Utilizzo delle espressioni CEL.
Per saperne di più sulla creazione di modelli di certificato, vedi Creare un modello di certificato.
Per ulteriori informazioni sul comando gcloud privateca templates create
, consulta gcloud privateca template create.
Crea associazione IAM DNS di produzione
Per consentire all'utente prod-dns-requester@
nel pool di CA DNS di richiedere i certificati TLS del server di produzione, crea un'associazione IAM condizionale nel pool di CA. Assegna all'utente prod-dns-requester@
il ruolo privateca.certificateRequester
solo se la richiesta di certificato contiene un riferimento al modello prod-server-tls-template
. Per ulteriori informazioni sui ruoli e sulle autorizzazioni IAM, vedi: Controllo dell'accesso con IAM.
Crea un file YAML del criterio
prod_dns_condition.yaml
e copia la seguente configurazione TLS nel file.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"
Utilizza il seguente comando
gcloud
per aggiungere controlli dei criteri che consentano aprod-dns-requester@
di richiedere solo certificati TLS dei server di produzione dal pool di CA.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
Dove:
- Il flag
--role
viene utilizzato per passare il nome del ruolo da assegnare a un membro. Per ulteriori informazioni sui ruoli e sulle autorizzazioni IAM per il servizio CA, consulta Controllo dell'accesso con IAM. - Il flag
--member
viene utilizzato per passare il membro per cui aggiungere l'associazione. - Il flag
condition-from-file
viene utilizzato per passare il nome del file con la condizione CEL.
Per ulteriori informazioni sul comando
gcloud privateca pools add-iam-policy-binding
, vedi gcloud privateca pool add-iam-policy-binding.- Il flag
Per aggiungere controlli dei criteri che consentano a
prod-dns-requester@
di usare il modello di certificato "prod-server-tls-template", utilizza il seguente comandogcloud
:gcloud
gcloud privateca templates add-iam-policy-binding prod-server-tls-template \ --role='roles/privateca.templateUser' \ --member='user:prod-dns-requester@'
Dove:
- Il flag
--role
viene utilizzato per passare il nome del ruolo da assegnare a un membro. Per ulteriori informazioni sui ruoli e sulle autorizzazioni IAM per il servizio CA, consulta Controllo dell'accesso con IAM. - Il flag
--member
viene utilizzato per passare il membro per cui aggiungere l'associazione.
- Il flag
Controlli dei criteri relativi agli utenti senza restrizioni
Per consentire all'utente blank-check-requester@
di richiedere qualsiasi certificato senza limitazioni, crea un'associazione IAM senza alcuna condizione che conceda all'utente il ruolo privateca.certificateRequester
.
gcloud
gcloud privateca pools add-iam-policy-binding POOL_NAME \
--role='roles/privateca.certificateRequester' \
--member='user:blank-check-requester@example.com'
Dove:
- Il valore del flag
--role
determina il ruolo assegnato all'utente. Per ulteriori informazioni sui ruoli e sulle autorizzazioni IAM per il servizio CA, consulta Controllo dell'accesso con IAM. - Il valore del flag
--member
determina l'utente a cui viene assegnato il ruolo.
Test dei controlli dei criteri
Dopo aver implementato i criteri IAM e di emissione dei certificati, è importante rivedere e testare questi criteri per assicurarti che funzionino come previsto.
Recupera tutte le associazioni di criteri
Recupera tutti i criteri IAM implementati nel tuo pool di CA. Per recuperare tutti i criteri IAM per il pool di CA, utilizza il comando gcloud privateca pools get-iam-policy
:
gcloud
gcloud privateca pools get-iam-policy POOL_NAME
Dove:
- POOL_NAME è l'identificatore univoco del pool di CA.
Per ulteriori informazioni sul comando gcloud privateca pools get-iam-policy
, vedi gcloud privateca pool get-iam-policy.
Generazione di certificati
Questa sezione fornisce informazioni sulla generazione di certificati per uso generico e sui certificati DNS di test e di produzione.
Genera certificati DNS di test
Per consentire all'utente test-dns-requester@
di richiedere certificati DNS di test dal pool di CA, utilizza il seguente 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
Dove:
- Il flag
--issuer-location
viene utilizzato per impostare la località del certificato. Per l'elenco completo delle sedi, consulta Località. - Il flag
--issuer-pool
imposta il pool di CA da cui viene richiesto il certificato. - Il flag
--dns-san
viene utilizzato per impostare uno o più SAN DNS separati da virgole. - Il flag
--generate-key
attiva la generazione di una nuova chiave privata RSA-2048 sulla tua macchina. - Il flag
--key-output-file
viene utilizzato per impostare il percorso in cui viene scritta la chiave privata generata (in formato PEM). - Il flag
--cert-output-file
viene utilizzato per impostare il percorso in cui viene scritto il file della catena di certificati con codifica PEM risultante (ordinato da end-entity a root). - Il flag
--template
viene utilizzato per impostare il nome del modello di certificato che vuoi utilizzare per rilasciare il certificato. Il modello specificato deve trovarsi nella stessa località del pool di CA emittente. Per ulteriori informazioni sui modelli di certificati, consulta la Panoramica dei modelli di certificati e dei criteri di emissione.
Genera certificati di produzione
Ora l'utente prod-dns-requester
può richiedere certificati DNS di produzione dal pool di CA. --dns-san=foo.bar.prod.example.com
aggiunge alla richiesta di certificato una SAN di tipo DNS con il valore specificato.
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
Dove:
- Il flag
--issuer-location
viene utilizzato per impostare la località del certificato. Per l'elenco completo delle sedi, consulta Località. - Il flag
--issuer-pool
imposta il pool di CA da cui viene richiesto il certificato. - Il flag
--dns-san
viene utilizzato per impostare uno o più SAN DNS separati da virgole. - Il flag
--generate-key
attiva la generazione di una nuova chiave privata RSA-2048 sulla tua macchina. - Il flag
--key-output-file
viene utilizzato per impostare il percorso in cui viene scritta la chiave privata generata (in formato PEM). - Il flag
--cert-output-file
viene utilizzato per impostare il percorso in cui viene scritto il file della catena di certificati con codifica PEM risultante (ordinato da end-entity a root). - Il flag
--template
viene utilizzato per impostare il nome del modello di certificato da utilizzare per rilasciare il certificato. Il modello specificato deve trovarsi nella stessa località del pool di CA emittente. Per ulteriori informazioni sui modelli di certificati, consulta la Panoramica dei modelli di certificati e dei criteri di emissione.
Genera certificati per uso generico
L'utente blank-check-requester@
può richiedere qualsiasi certificato dal pool di CA utilizzando il comando gcloud privateca certificates create
.
Per richiedere un certificato da un pool di CA, puoi utilizzare una chiave pubblica/privata creata da CA Service. Per saperne di più sulla richiesta di certificati, vedi Richiedere un certificato e visualizzare il certificato emesso.
Esegui la pulizia
Questa sezione spiega come rimuovere i criteri IAM su un pool di CA.
Rimuovi un'associazione IAM specifica
Per rimuovere le associazioni condizionali IAM sul pool di CA per l'utente blank-check-requester
, utilizza il seguente comando gcloud
:
gcloud
gcloud privateca pools remove-iam-policy-binding POOL_NAME \
--role='roles/privateca.certificateRequester' \
--member='user:blank-check-requester@'
Dove:
- Il valore del flag
--role
determina il ruolo assegnato all'utente. Per ulteriori informazioni sui ruoli e sulle autorizzazioni IAM per il servizio CA, consulta Controllo dell'accesso con IAM. - Il valore del flag
--member
determina l'utente a cui viene assegnato il ruolo.
Quando rimuovi un'associazione IAM specifica, devi fornire tutte le informazioni relative all'associazione nel comando gcloud privateca pools remove-iam-policy-binding
. Un ruolo e un membro potrebbero avere più associazioni IAM con condizioni diverse. È importante fornire tutti i dettagli relativi all'associazione IAM per evitare di eliminare accidentalmente un'altra associazione.
Per ulteriori informazioni sul comando gcloud privateca pools remove-iam-policy-binding
, consulta gcloud privateca pool remove-iam-policy-binding.
Rimuovi tutte le associazioni condizionali IAM
Per rimuovere un'associazione IAM, puoi utilizzare il comando gcloud privateca pools remove-iam-policy-binding
. Quando rimuovi un'associazione condizionale IAM, devi fornire tutte le informazioni sull'associazione. Un utente e un ruolo possono avere più di un'associazione condizionale. Per rimuovere tutte le associazioni condizionali, utilizza il flag --all
nel comando gcloud
.
Utilizza il seguente comando gcloud
per rimuovere tutte le associazioni per l'utente 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
Dove:
- Il valore del flag
--role
determina il ruolo assegnato all'utente. Per ulteriori informazioni sui ruoli e sulle autorizzazioni IAM per il servizio CA, consulta Controllo dell'accesso con IAM. - Il valore del flag
--member
determina l'utente a cui viene assegnato il ruolo.