Gestione dei 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-requesterpuò richiedere certificati TLS del server dell'entità finale per il dominio*.prod.example.com. - L'utente
test-dns-requesterpuò richiedere certificati TLS del server dell'entità finale per il dominio*.test.example.com. - L'utente
blank-check-requesterpuò richiedere qualsiasi tipo di certificato dal pool di CA.
Questo tutorial utilizza il criterio di emissione dei certificati di un pool di CA, i modelli di certificato e le associazioni IAM condizionali per raggiungere questo scenario.
Prima di iniziare
- Scopri di più sui vari controlli dei criteri offerti da Certificate Authority Service.
- Scopri come creare modelli di certificato.
- Scopri di più sui profili di certificato che puoi utilizzare per vari scenari di emissione di certificati.
- Scopri come utilizzare Common Expression Language (CEL) per applicare vari controlli dei criteri per l'emissione di certificati.
- Scopri come utilizzare un criterio di emissione dei certificati.
- Scopri come configurare, modificare e rimuovere le policy IAM per la creazione e la gestione delle risorse di Certificate Authority Service.
Creazione di un pool di CA
Per creare un pool di CA, segui queste istruzioni:
Per creare un pool di CA che utilizza il file
issuance-policy.yaml, utilizza il seguente comandogcloud:gcloud
gcloud privateca pools create POOL_NAME --location=LOCATION --tier=ENTERPRISEDove:
- LOCATION è la località in cui vuoi creare il pool di CA. Per l'elenco completo delle località, consulta Località.
- Il flag
--tierviene utilizzato per specificare il livello del pool di CA. Per saperne di più sui livelli, consulta Selezionare i livelli di operazione.
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 \ --location=LOCATION \ --subject="CN=Example DNS Root, O=Example LLC, C=US" \ --validity="10Y" \ --max-chain-length=1 \ --auto-enableDove:
- POOL_NAME è l'identificatore univoco del pool di CA.
- LOCATION è la località in cui vuoi creare il pool di CA. Per l'elenco completo delle località, consulta Località.
- Il flag
--subjectviene utilizzato per passare il nome del soggetto del certificato. - Il flag
--validitydetermina il periodo di validità della CA. Il periodo di validità predefinito è di 10 anni. - Il flag
--max-chain-lengthdetermina la profondità massima delle CA subordinate consentite in una CA. - Il flag
--auto-enablecrea la CA nello statoENABLED, anziché nello statoSTAGED. Per saperne di più sugli stati delle CA, consulta Stati delle CA.
Configurazione dei controlli dei criteri per i certificati di test
Le modifiche al criterio di emissione diventano immediatamente effettive. 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
Configurare 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 certificati TLS del server dell'entità finale per il DNS nel dominio
*.test.example.com.
Creare un modello di certificato DNS per i certificati di test
Questa sezione descrive come creare un modello di certificato che contenga
la configurazione TLS del server dell'entità finale
. Questo modello di certificato limita l'utilizzo dei certificati solo ai SAN DNS nel dominio *.test.example.com. Queste limitazioni vengono implementate utilizzando un'espressione Common Expression Language (CEL). Il modello di certificato elimina anche qualsiasi soggetto specificato nella richiesta di certificato.
Utilizza il seguente comando
gcloudper creare il modello di certificato che contiene le estensioni TLS del server dell'entità finale, elimina qualsiasisubjectspecificato nella richiesta di certificato e limita i SAN consentiti.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-fileviene utilizzato per passare un file YAML che descrive tutti i valori X.509 predefiniti impostati dal modello di certificato. - Il flag
--no-copy-subjectelimina tutti i soggetti specificati dal chiamante dalla richiesta di certificato. - Il flag
--copy sansgarantisce che l'estensione SAN della richiesta di certificato venga copiata nel certificato firmato. - Il flag
--identity-cel-expressionviene utilizzato per passare un'espressione CEL che viene valutata rispetto all'identità nel certificato prima che venga emesso. Per saperne di più sull'utilizzo delle espressioni CEL per implementare vari controlli dei criteri, consulta Utilizzo di CEL.
Per saperne di più sulla creazione di modelli di certificato, consulta Creare un modello di certificato.
- Il flag
Creare associazioni IAM per i certificati di test DNS
Per consentire all'utente test-dns-requester@ nel pool di CA DNS di richiedere 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 saperne di più sui
ruoli e sulle autorizzazioni IAM per Certificate Authority Service, consulta Controllo
dell'accesso con
IAM.
Crea un file YAML dei criteri
test_dns_condition.yamle 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. Pertanto, se fornisci un ID progetto nell'attributo
privateca.googleapis.com/templatedell'espressione CEL, devi fornire anche un ID progetto quando richiedi il certificato. Se fornisci un numero di progetto nell'espressione CEL, devi fornire anche un numero di progetto nella richiesta di certificato.Utilizza il seguente comando
gcloudper 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 \ --location=LOCATION \ --role='roles/privateca.certificateRequester' \ --member='user:test-dns-requester@' \ --condition-from-file=./test_dns_condition.yamlDove:
- Il flag
--roleviene utilizzato per passare il nome del ruolo da assegnare a un membro. Per saperne di più sui ruoli e sulle autorizzazioni IAM per Certificate Authority Service, consulta Controllo dell'accesso con IAM. - Il flag
--memberviene utilizzato per passare il membro a cui aggiungere l'associazione. - Il flag
condition-from-fileviene utilizzato per passare il nome del file con la condizione CEL.
- Il flag
Utilizza il seguente comando
gcloudper aggiungere controlli dei criteri che consentano atest-dns-requester@di utilizzare 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
--roleviene utilizzato per passare il nome del ruolo da assegnare a un membro. Per saperne di più sui ruoli e sulle autorizzazioni IAM per Certificate Authority Service, consulta Controllo dell'accesso con IAM. - Il flag
--memberviene utilizzato per passare il membro a cui aggiungere l'associazione.
Per saperne di più sulla configurazione delle policy IAM, consulta Configurare le policy 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.
Configurare 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.
Creare un modello di certificato per i certificati DNS di produzione
Segui queste istruzioni per creare un modello di certificato che contenga
la configurazione TLS del server dell'entità finale.
Questo modello di certificato limita l'utilizzo dei certificati solo ai SAN DNS nel dominio *.prod.example.com. Queste limitazioni vengono implementate utilizzando un'espressione Common Expression Language (CEL). Il modello di certificato elimina anche qualsiasi soggetto 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-fileviene utilizzato per passare un file YAML che descrive tutti i valori X.509 predefiniti impostati dal modello di certificato. --no-copy-subjectflag elimina tutti i soggetti specificati dal chiamante da la richiesta di certificato.- Il flag
--copy sansgarantisce che l'estensione SAN della richiesta di certificato venga copiata nel certificato firmato. - Il flag
--identity-cel-expressionviene utilizzato per passare un'espressione CEL che viene valutata rispetto all'identità nel certificato prima che venga emesso. Per saperne di più sulle espressioni CEL, consulta Utilizzo delle espressioni CEL.
Per saperne di più sulla creazione di modelli di certificato, consulta Creare un modello di certificato.
Per saperne di più sul comando gcloud privateca templates create, consulta
gcloud privateca templates create.
Creare un'associazione IAM DNS di produzione
Per consentire all'utente prod-dns-requester@ nel pool di CA DNS di richiedere certificati TLS del server di produzione, crea un'associazione IAM condizionale nel pool di CA. Concedi 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 saperne di più sui
ruoli e sulle autorizzazioni IAM, consulta Controllo dell'accesso con
IAM.
Crea un file YAML dei criteri
prod_dns_condition.yamle 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
gcloudper aggiungere controlli dei criteri che consentano aprod-dns-requester@di richiedere solo certificati TLS del server di produzione dal pool di CA.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.yamlDove:
- Il flag
--roleviene utilizzato per passare il nome del ruolo da assegnare a un membro. Per saperne di più sui ruoli e sulle autorizzazioni IAM per Certificate Authority Service, consulta Controllo dell'accesso con IAM. - Il flag
--memberviene utilizzato per passare il membro a cui aggiungere l'associazione. - Il flag
condition-from-fileviene utilizzato per passare il nome del file con la condizione CEL.
Per saperne di più sul comando
gcloud privateca pools add-iam-policy-binding, consulta gcloud privateca pools add-iam-policy-binding.- Il flag
Per aggiungere controlli dei criteri che consentano a
prod-dns-requester@di utilizzare 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
--roleviene utilizzato per passare il nome del ruolo da assegnare a un membro. Per saperne di più sui ruoli e sulle autorizzazioni IAM per Certificate Authority Service, consulta Controllo dell'accesso con IAM. - Il flag
--memberviene utilizzato per passare il membro a cui aggiungere l'associazione.
- Il flag
Controlli dei criteri utente senza limitazioni
Per consentire all'utente blank-check-requester@ di richiedere qualsiasi certificato senza limitazioni, crea un'associazione IAM senza condizioni che assegni all'utente il ruolo 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'
Dove:
- Il valore del flag
--roledetermina il ruolo assegnato all'utente. Per saperne di più sui ruoli e sulle autorizzazioni IAM per Certificate Authority Service, consulta Controllo dell'accesso con IAM. - Il valore del flag
--memberdetermina l'utente a cui viene assegnato il ruolo.
Sostituisci quanto segue:
- POOL_NAME: l'identificatore univoco del pool di CA
- LOCATION: la località del pool di CA. Per l' elenco completo delle località, consulta Località.
Testare i controlli dei criteri
Dopo aver implementato i criteri di emissione dei certificati e IAM, è importante esaminarli e testarli per assicurarti che funzionino come previsto.
Recuperare tutte le associazioni dei criteri
Recupera tutte le policy IAM implementate nel pool di CA.
Per recuperare tutte le policy IAM per il pool di CA, utilizza il comando gcloud
privateca pools get-iam-policy:
gcloud
gcloud privateca pools get-iam-policy POOL_NAME --location=LOCATION
Sostituisci quanto segue:
- POOL_NAME: l'identificatore univoco del pool di CA
- LOCATION: la località del pool di CA. Per l' elenco completo delle località, consulta Località.
Per saperne di più sul comando gcloud privateca pools get-iam-policy,
consulta gcloud privateca pools
get-iam-policy.
Generazione di certificati
Questa sezione fornisce informazioni sulla generazione di certificati per uso generico e di certificati DNS di test e di produzione.
Generare 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
--dns-sanviene utilizzato per impostare uno o più SAN DNS separati da virgole. - Il flag
--generate-keyattiva la generazione di una nuova chiave privata RSA-2048 sulla tua macchina. - Il flag
--key-output-fileviene utilizzato per impostare il percorso in cui viene scritta la chiave privata generata (in formato PEM). - Il flag
--cert-output-fileviene utilizzato per impostare il percorso in cui viene scritto il file della catena di certificati con codifica PEM risultante (ordinato dall'entità finale alla radice). - Il flag
--templateviene utilizzato per impostare il nome del modello di certificato che vuoi utilizzare per l'emissione di questo certificato. Il modello specificato deve trovarsi nella stessa località del pool di CA emittente. Per saperne di più sui modelli di certificato, consulta Panoramica dei modelli di certificato e delle policy di emissione.
Sostituisci quanto segue:
- PROJECT_ID: l'identificatore univoco del progetto
- LOCATION: la località del pool di CA da cui viene richiesto il certificato. Per l'elenco completo delle località, consulta Località.
- POOL_NAME: l'identificatore univoco del pool di CA
Generare certificati di produzione
L'utente prod-dns-requester può ora richiedere certificati DNS di produzione dal pool di CA. Il flag --dns-san=foo.bar.prod.example.com aggiunge un SAN di tipo DNS con il valore specificato alla richiesta di certificato.
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-locationviene utilizzato per impostare la località del certificato. Per l'elenco completo delle località, consulta Località. - Il flag
--issuer-poolimposta il pool di CA da cui viene richiesto il certificato. - Il flag
--dns-sanviene utilizzato per impostare uno o più SAN DNS separati da virgole. - Il flag
--generate-keyattiva la generazione di una nuova chiave privata RSA-2048 sulla tua macchina. - Il flag
--key-output-fileviene utilizzato per impostare il percorso in cui viene scritta la chiave privata generata (in formato PEM). - Il flag
--cert-output-fileviene utilizzato per impostare il percorso in cui viene scritto il file della catena di certificati con codifica PEM risultante (ordinato dall'entità finale alla radice). - Il flag
--templateviene utilizzato per impostare il nome del modello di certificato da utilizzare per l'emissione di questo certificato. Il modello specificato deve trovarsi nella stessa località del pool di CA emittente. Per saperne di più sui modelli di certificato, consulta Panoramica dei modelli di certificato e delle policy di emissione.
Generare 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 Certificate Authority Service. Per saperne di più sulla richiesta di certificati, consulta Richiedere un certificato e visualizzare il certificato emesso.
Libera spazio
Questa sezione spiega come rimuovere le policy IAM su un pool di CA.
Rimuovere 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 \
--location=LOCATION \
--role='roles/privateca.certificateRequester' \
--member='user:blank-check-requester@'
Dove:
- Il valore del flag
--roledetermina il ruolo assegnato all'utente. Per saperne di più sui ruoli e sulle autorizzazioni IAM per Certificate Authority Service, consulta Controllo dell'accesso con IAM. - Il valore del flag
--memberdetermina l'utente a cui viene assegnato il ruolo.
Quando rimuovi un'associazione IAM specifica, devi fornire tutte le
informazioni relative all'associazione IAM 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'associazione diversa.
Per saperne di più sul comando gcloud privateca pools
remove-iam-policy-binding, consulta gcloud privateca pools
remove-iam-policy-binding.
Rimuovere 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 \
--location=LOCATION \
--role='roles/privateca.certificateRequester' \
--member='user:prod-code-signing-requester@' \
--all
Dove:
- Il valore del flag
--roledetermina il ruolo assegnato all'utente. Per saperne di più sui ruoli e sulle autorizzazioni IAM per Certificate Authority Service, consulta Controllo dell'accesso con IAM. - Il valore del flag
--memberdetermina l'utente a cui viene assegnato il ruolo.