Gestire i controlli dei criteri

Questo tutorial mostra come implementare i controlli delle norme sulle risorse del servizio 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 delle policy:

  • 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 dal pool di CA.

Questo tutorial utilizza la policy di emissione dei certificati di un pool di CA, i modelli di certificati e i binding IAM condizionali per realizzare questo scenario.

Prima di iniziare

Creazione di un pool di CA

Per creare un pool di CA, segui queste istruzioni:

  1. Per creare un pool di CA che utilizza il file issuance-policy.yaml, utilizza il seguente comando gcloud:

    gcloud

    gcloud privateca pools create POOL_NAME --location=LOCATION --tier=ENTERPRISE
    

    Dove:

    • LOCATION è la località in cui vuoi creare il pool di CA. Per l'elenco completo delle località, consulta Località.
    • Il flag --tier viene utilizzato per specificare il livello del pool di CA. Per ulteriori informazioni sui livelli, vedi Selezionare i livelli di operazioni.
  2. 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-enable
    

    Dove:

    • 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 --subject viene utilizzato per trasmettere il nome del soggetto del certificato.
    • Il flag --validity determina il periodo di validità della CA. Il periodo di validità predefinito è di 10 anni.
    • Il flag --max-chain-length determina la profondità massima delle CA subordinate consentite in una CA.
    • Il flag --auto-enable crea la CA nello stato ENABLED anziché nello stato STAGED. Per ulteriori informazioni sugli stati delle CA, consulta la pagina Stati delle CA.

Configurazione dei controlli dei criteri per i certificati di test

Le modifiche alle norme di emissione sono effettive immediatamente. 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 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 delle policy per consentire all'utente test-dns-requester di richiedere certificati TLS del server di entità finale per 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 che contenga la configurazione TLS del server dell'entità finale. Questo modello di certificato limita i certificati all'utilizzo solo di SAN DNS sul 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.

  1. Utilizza il seguente comando gcloud per creare il modello di certificato che contiene le estensioni TLS del server dell'entità finale, elimina qualsiasi subject specificato 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-file viene utilizzato per passare un file YAML che descrive 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 garantisce 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 saperne di più sull'utilizzo delle espressioni CEL per implementare vari controlli delle policy, consulta Utilizzo di CEL.

    Per saperne di più sulla creazione di modelli di certificati, vedi Creare un modello di certificato.

Crea binding 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. Assegna 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 CA Service, consulta Controllo dell'accesso con IAM.

  1. Crea un file YAML della policy 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. Pertanto, se fornisci un ID progetto nell'attributo privateca.googleapis.com/template dell'espressione CEL, devi fornire anche un ID progetto quando richiedi il certificato. Se fornisci un numero di progetto nell'espressione CEL, devi fornire un numero di progetto anche nella richiesta di certificato.

  2. Utilizza il seguente comando gcloud per aggiungere controlli dei criteri che consentono a test-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.yaml
    

    Dove:

    • Il flag --role viene utilizzato per passare il nome del ruolo da assegnare a un membro. Per saperne di più sui ruoli e sulle autorizzazioni IAM per CA Service, consulta Controllo dell'accesso con IAM.
    • Il flag --member viene utilizzato per passare il membro per il quale aggiungere l'associazione.
    • Il flag condition-from-file viene utilizzato per passare il nome del file con la condizione CEL.
  3. Utilizza il seguente gcloud per aggiungere controlli dei criteri che consentono a test-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 --role viene utilizzato per passare il nome del ruolo da assegnare a un membro. Per saperne di più sui ruoli e sulle autorizzazioni IAM per CA Service, consulta Controllo dell'accesso con IAM.
    • Il flag --member viene utilizzato per passare il membro per il quale aggiungere l'associazione.

    Per saperne di più sulla configurazione delle policy IAM, consulta Configurare le policy IAM.

Configurazione dei controlli dei criteri per i certificati di produzione

Una volta testati i controlli delle policy, puoi utilizzarli nell'ambiente di produzione.

Configura i controlli delle policy 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 end-entity per il dominio DNS .prod.example.com.

Crea un modello di certificato per i certificati DNS di produzione

Utilizza le seguenti istruzioni per creare un modello di certificato che contenga la configurazione TLS del server dell'entità finale. Questo modello di certificato limita i certificati all'utilizzo solo di SAN DNS sul 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 template 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 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 garantisce che l'estensione SAN della richiesta di certificato venga copiata nel certificato firmato.
  • Il flag --identity-cel-expression viene utilizzato per trasmettere un'espressione CEL che viene valutata in base 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 certificati, vedi Creare un modello di certificato.

Per saperne di più sul comando gcloud privateca templates create, consulta gcloud privateca templates create.

Crea l'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 sul 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 saperne di più su ruoli e autorizzazioni IAM, consulta Controllo dell'accesso con IAM.

  1. Crea un file YAML della policy 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"
    
  2. Utilizza il seguente comando gcloud per aggiungere controlli delle policy che consentono a prod-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.yaml
    

    Dove:

    • Il flag --role viene utilizzato per passare il nome del ruolo da assegnare a un membro. Per saperne di più sui ruoli e sulle autorizzazioni IAM per CA Service, consulta Controllo dell'accesso con IAM.
    • Il flag --member viene utilizzato per passare il membro per il quale aggiungere l'associazione.
    • Il flag condition-from-file viene 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.

  3. Per aggiungere controlli delle policy che consentono a prod-dns-requester@ di utilizzare il template di certificato "prod-server-tls-template", utilizza il seguente comando gcloud:

    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 saperne di più sui ruoli e sulle autorizzazioni IAM per CA Service, consulta Controllo dell'accesso con IAM.
    • Il flag --member viene utilizzato per passare il membro per il quale aggiungere l'associazione.

Controlli delle policy per gli utenti 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 --role determina il ruolo assegnato all'utente. Per saperne di più sui ruoli e sulle autorizzazioni IAM per CA Service, consulta Controllo dell'accesso con IAM.
  • Il valore del flag --member determina l'utente a cui viene assegnato il ruolo.

Sostituisci quanto segue:

  • POOL_NAME: l'identificatore univoco del pool di CA.
  • LOCATION: la posizione del pool di CA. Per l'elenco completo delle località, consulta Località.

Test dei controlli dei criteri

Una volta implementate le norme IAM e di emissione dei certificati, è importante esaminarle e testarle per assicurarsi che funzionino come previsto.

Recupera tutte le associazioni delle policy

Recupera tutti i criteri IAM implementati nel tuo 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 posizione 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-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 sul tuo computer.
  • 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 dall'entità finale alla radice).
  • Il flag --template viene 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 posizione del pool di CA emittenti. Per ulteriori informazioni sui modelli di certificato, consulta Panoramica dei modelli di certificato e delle norme di emissione.

Sostituisci quanto segue:

  • PROJECT_ID: l'identificatore univoco del progetto.
  • LOCATION: la posizione 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.

Genera certificati di produzione

L'utente prod-dns-requester ora può richiedere certificati DNS di produzione dal pool di CA. --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-location viene utilizzato per impostare la posizione del certificato. Per l'elenco completo delle località, 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 sul tuo computer.
  • 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 dall'entità finale alla radice).
  • Il flag --template viene 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 template di certificato, consulta Panoramica dei template di certificato e delle norme 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 dal servizio CA. Per saperne di più sulla richiesta di certificati, consulta Richiedere un certificato e visualizzare il certificato emesso.

Esegui la pulizia

Questa sezione spiega come rimuovere i criteri IAM da un pool di CA.

Rimuovere un'associazione IAM specifica

Per rimuovere le associazioni IAM condizionali nel pool 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 --role determina il ruolo assegnato all'utente. Per saperne di più sui ruoli e sulle autorizzazioni IAM per CA Service, 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 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 al binding IAM per evitare di eliminare accidentalmente un binding diverso.

Per saperne di più sul comando gcloud privateca pools remove-iam-policy-binding, consulta gcloud privateca pools 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 binding condizionale. Per rimuovere tutte le associazioni condizionali, utilizza il flag --all nel comando gcloud.

Utilizza il seguente comando gcloud per rimuovere tutti i binding 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 --role determina il ruolo assegnato all'utente. Per saperne di più sui ruoli e sulle autorizzazioni IAM per CA Service, consulta Controllo dell'accesso con IAM.
  • Il valore del flag --member determina l'utente a cui viene assegnato il ruolo.