Tutorial: Mengelola kontrol kebijakan

Tutorial ini menunjukkan cara menerapkan kontrol kebijakan pada resource Layanan Otoritas Sertifikasi.

Tujuan

Tutorial ini memberikan informasi tentang cara mengonfigurasi kumpulan certificate authority (CA) bersama untuk penerbitan sertifikat DNS dengan kontrol kebijakan berikut:

  • Pengguna prod-dns-requester dapat meminta sertifikat TLS server entitas akhir untuk domain *.prod.example.com.
  • Pengguna test-dns-requester dapat meminta sertifikat TLS server entitas akhir untuk domain *.test.example.com.
  • Pengguna blank-check-requester dapat meminta jenis sertifikat apa pun dari kumpulan CA.

Tutorial ini menggunakan kebijakan penerbitan sertifikat dari kumpulan CA, template sertifikat, dan binding IAM bersyarat untuk mencapai skenario ini.

Sebelum memulai

Membuat kumpulan CA

Untuk membuat kumpulan CA, gunakan petunjuk berikut:

  1. Untuk membuat kumpulan CA yang menggunakan file issuance-policy.yaml, gunakan perintah gcloud berikut:

    gcloud

    gcloud privateca pools create POOL_NAME \
        --tier=ENTERPRISE
    

    Dengan keterangan:

    • Flag --tier digunakan untuk menentukan tingkat kumpulan CA. Untuk mengetahui informasi selengkapnya tentang tingkat, lihat Memilih tingkat operasi.
  2. Untuk membuat CA dengan resource yang dikelola Google di kumpulan CA yang baru dibuat, gunakan perintah gcloud berikut:

    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
    

    Dengan keterangan:

    • POOL_NAME adalah ID unik kumpulan CA.
    • Flag --subject digunakan untuk meneruskan nama subjek sertifikat.
    • Flag --validity menentukan periode validitas CA. Periode validitas default adalah 10 tahun.
    • Flag --max-chain-length menentukan kedalaman maksimum CA subordinat yang diizinkan dalam CA.
    • Flag --auto-enable membuat CA dalam status ENABLED, bukan dalam status STAGED. Untuk mengetahui informasi selengkapnya tentang status CA, lihat Status CA.

Mengonfigurasi kontrol kebijakan untuk sertifikat pengujian

Perubahan kebijakan penerbitan akan segera berlaku. Sebaiknya konfigurasikan kontrol kebijakan pengujian sebelum menggunakannya untuk produksi. Bagian ini menjelaskan cara mengonfigurasi kontrol kebijakan pengujian.

Untuk template DNS pengujian dan produksi, Anda harus menggunakan nilai standar yang sama untuk sertifikat TLS server. Buat file YAML leaf_server_tls_predefined_values.yaml, lalu salin konfigurasi TLS server entitas akhir berikut ke dalam file.

  keyUsage:
    baseKeyUsage:
      digitalSignature: true
      keyEncipherment: true
    extendedKeyUsage:
      serverAuth: true
  caOptions:
    isCa: false

Mengonfigurasi kontrol kebijakan untuk sertifikat DNS pengujian

Bagian ini menjelaskan cara menetapkan kontrol kebijakan untuk mengizinkan pengguna test-dns-requester meminta sertifikat TLS server entitas akhir untuk DNS di domain *.test.example.com.

Membuat template sertifikat DNS untuk sertifikat pengujian

Bagian ini menjelaskan cara membuat template sertifikat yang berisi konfigurasi TLS server entitas akhir. Template sertifikat ini membatasi sertifikat agar hanya menggunakan DNS SAN di domain *.test.example.com. Pembatasan ini diterapkan menggunakan ekspresi Common Expression Language (CEL). Template sertifikat juga menghapus subjek apa pun yang ditentukan dalam permintaan sertifikat.

  1. Gunakan perintah gcloud berikut untuk membuat template sertifikat yang berisi ekstensi TLS server entitas akhir, menghapus subject yang ditentukan dalam permintaan sertifikat, dan membatasi SAN yang diizinkan.

    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'))"
    

    Dengan keterangan:

    • Flag --predefined-values-file digunakan untuk meneruskan file YAML yang mendeskripsikan nilai X.509 standar yang ditetapkan oleh template sertifikat.
    • Flag --no-copy-subject menghapus semua subjek yang ditentukan pemanggil dari permintaan sertifikat.
    • Flag --copy sans memastikan bahwa ekstensi SAN dari permintaan sertifikat disalin ke dalam sertifikat yang ditandatangani.
    • Flag --identity-cel-expression digunakan untuk meneruskan ekspresi CEL yang dievaluasi terhadap identitas dalam sertifikat sebelum diterbitkan. Untuk informasi selengkapnya tentang penggunaan ekspresi CEL untuk menerapkan berbagai kontrol kebijakan, lihat Menggunakan CEL.

    Untuk mengetahui informasi selengkapnya tentang cara membuat template sertifikat, lihat Membuat template sertifikat.

Membuat binding IAM untuk sertifikat pengujian DNS

Untuk mengizinkan pengguna test-dns-requester@ di kumpulan CA DNS meminta sertifikat TLS server pengujian, buat binding IAM bersyarat di kumpulan CA. Berikan peran privateca.certificateRequester kepada pengguna test-dns-requester@ hanya jika permintaan sertifikat berisi referensi ke template test-server-tls-template. Untuk mengetahui informasi selengkapnya tentang peran dan izin IAM untuk Layanan CA, lihat Kontrol akses dengan IAM.

  1. Buat file YAML kebijakan test_dns_condition.yaml, lalu salin konfigurasi TLS berikut ke dalam 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"
    

    Nama template yang diberikan dalam kondisi IAM harus cocok dengan nama template dalam permintaan sertifikat. Jadi, jika Anda memberikan project ID di atribut privateca.googleapis.com/template dari ekspresi CEL, Anda juga harus memberikan project ID saat meminta sertifikat. Jika memberikan nomor project dalam ekspresi CEL, Anda juga harus memberikan nomor project dalam permintaan sertifikat.

  2. Gunakan perintah gcloud berikut untuk menambahkan kontrol kebijakan yang memungkinkan test-dns-requester@ hanya meminta sertifikat TLS pengujian produksi dari kumpulan 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
    

    Dengan keterangan:

    • Flag --role digunakan untuk meneruskan nama peran yang akan ditetapkan ke anggota. Untuk mengetahui informasi selengkapnya tentang peran dan izin IAM untuk Layanan CA, lihat Kontrol akses dengan IAM.
    • Flag --member digunakan untuk meneruskan anggota yang akan ditambahkan binding-nya.
    • Flag condition-from-file digunakan untuk meneruskan nama file dengan kondisi CEL.
  3. Gunakan gcloud berikut untuk menambahkan kontrol kebijakan yang memungkinkan test-dns-requester@ menggunakan template sertifikat '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@'
    

    Dengan keterangan:

    • Flag --role digunakan untuk meneruskan nama peran yang akan ditetapkan ke anggota. Untuk mengetahui informasi selengkapnya tentang peran dan izin IAM untuk Layanan CA, lihat Kontrol akses dengan IAM.
    • Flag --member digunakan untuk meneruskan anggota yang akan ditambahkan binding-nya.

    Untuk informasi selengkapnya tentang cara mengonfigurasi kebijakan IAM, lihat Mengonfigurasi kebijakan IAM.

Mengonfigurasi kontrol kebijakan untuk sertifikat produksi

Setelah menguji kontrol kebijakan, Anda dapat menggunakan kontrol kebijakan tersebut di lingkungan produksi.

Mengonfigurasi kontrol kebijakan untuk sertifikat DNS produksi

Bagian ini menjelaskan cara menetapkan kontrol kebijakan untuk mengizinkan pengguna prod-dns-requester meminta sertifikat TLS entitas akhir untuk domain .prod.example.com DNS.

Membuat template sertifikat untuk sertifikat DNS produksi

Gunakan petunjuk berikut untuk membuat template sertifikat yang berisi konfigurasi TLS server entitas akhir. Template sertifikat ini membatasi sertifikat agar hanya menggunakan DNS SAN di domain *.prod.example.com. Pembatasan ini diterapkan menggunakan ekspresi Common Expression Language (CEL). Template sertifikat juga menghapus subjek apa pun yang ditentukan dalam permintaan sertifikat.

Buat template sertifikat prod-server-tls-template menggunakan perintah gcloud berikut.

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'))"

Dengan keterangan:

  • Flag --predefined-values-file digunakan untuk meneruskan file YAML yang mendeskripsikan nilai X.509 standar yang ditetapkan oleh template sertifikat.
  • Flag --no-copy-subject menghapus semua subjek yang ditentukan pemanggil dari permintaan sertifikat.
  • Flag --copy sans memastikan bahwa ekstensi SAN dari permintaan sertifikat disalin ke dalam sertifikat yang ditandatangani.
  • Flag --identity-cel-expression digunakan untuk meneruskan ekspresi CEL yang dievaluasi terhadap identitas dalam sertifikat sebelum diterbitkan. Untuk mengetahui informasi selengkapnya tentang ekspresi CEL, lihat Menggunakan ekspresi CEL.

Untuk mengetahui informasi selengkapnya tentang cara membuat template sertifikat, lihat Membuat template sertifikat.

Untuk mengetahui informasi selengkapnya tentang perintah gcloud privateca templates create, lihat gcloud privateca templates create.

Membuat binding IAM DNS produksi

Untuk mengizinkan pengguna prod-dns-requester@ di kumpulan CA DNS meminta sertifikat TLS server produksi, buat binding IAM bersyarat di kumpulan CA. Berikan peran privateca.certificateRequester kepada pengguna prod-dns-requester@ hanya jika permintaan sertifikat berisi referensi ke template prod-server-tls-template. Untuk mengetahui informasi selengkapnya tentang peran dan izin IAM, lihat: Kontrol akses dengan IAM.

  1. Buat file YAML kebijakan prod_dns_condition.yaml dan salin konfigurasi TLS berikut ke dalam 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. Gunakan perintah gcloud berikut untuk menambahkan kontrol kebijakan yang memungkinkan prod-dns-requester@ hanya meminta sertifikat TLS server produksi dari kumpulan 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
    

    Dengan keterangan:

    • Flag --role digunakan untuk meneruskan nama peran yang akan ditetapkan ke anggota. Untuk mengetahui informasi selengkapnya tentang peran dan izin IAM untuk Layanan CA, lihat Kontrol akses dengan IAM.
    • Flag --member digunakan untuk meneruskan anggota yang akan ditambahkan binding-nya.
    • Flag condition-from-file digunakan untuk meneruskan nama file dengan kondisi CEL.

    Untuk informasi selengkapnya tentang perintah gcloud privateca pools add-iam-policy-binding, lihat gcloud privateca pools add-iam-policy-binding.

  3. Untuk menambahkan kontrol kebijakan yang memungkinkan prod-dns-requester@ menggunakan template sertifikat 'prod-server-tls-template', gunakan perintah gcloud berikut:

    gcloud

    gcloud privateca templates add-iam-policy-binding prod-server-tls-template \
        --role='roles/privateca.templateUser' \
        --member='user:prod-dns-requester@'
    

    Dengan keterangan:

    • Flag --role digunakan untuk meneruskan nama peran yang akan ditetapkan ke anggota. Untuk mengetahui informasi selengkapnya tentang peran dan izin IAM untuk Layanan CA, lihat Kontrol akses dengan IAM.
    • Flag --member digunakan untuk meneruskan anggota yang akan ditambahkan binding-nya.

Kontrol kebijakan pengguna yang tidak dibatasi

Untuk mengizinkan pengguna blank-check-requester@ meminta sertifikat apa pun tanpa batasan, buat binding IAM tanpa kondisional yang memberi pengguna peran privateca.certificateRequester.

gcloud

gcloud privateca pools add-iam-policy-binding POOL_NAME \
  --role='roles/privateca.certificateRequester' \
  --member='user:blank-check-requester@example.com'

Dengan keterangan:

  • Nilai tanda --role menentukan peran yang ditetapkan kepada pengguna. Untuk mengetahui informasi selengkapnya tentang peran dan izin IAM untuk Layanan CA, lihat Kontrol akses dengan IAM.
  • Nilai tanda --member menentukan pengguna yang diberi peran.

Menguji kontrol kebijakan

Setelah menerapkan kebijakan IAM dan penerbitan sertifikat, Anda harus meninjau dan menguji kebijakan ini untuk memastikan kebijakan tersebut berfungsi seperti yang diharapkan.

Mengambil semua binding kebijakan

Mengambil semua kebijakan IAM yang diterapkan di kumpulan CA Anda. Untuk mengambil semua kebijakan IAM untuk kumpulan CA, gunakan perintah gcloud privateca pools get-iam-policy:

gcloud

gcloud privateca pools get-iam-policy POOL_NAME

Dengan keterangan:

  • POOL_NAME adalah ID unik kumpulan CA.

Untuk informasi selengkapnya tentang perintah gcloud privateca pools get-iam-policy, lihat gcloud privateca pools get-iam-policy.

Membuat sertifikat

Bagian ini memberikan informasi tentang cara membuat sertifikat tujuan umum, serta sertifikat DNS pengujian dan produksi.

Membuat sertifikat DNS pengujian

Untuk mengizinkan pengguna test-dns-requester@ meminta sertifikat DNS pengujian dari kumpulan CA, gunakan perintah gcloud berikut:

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

Dengan keterangan:

  • Flag --issuer-location digunakan untuk menetapkan lokasi sertifikat. Untuk mengetahui daftar lengkap lokasi, lihat Lokasi.
  • Flag --issuer-pool menetapkan kumpulan CA tempat sertifikat diminta.
  • Flag --dns-san digunakan untuk menetapkan satu atau beberapa SAN DNS yang dipisahkan koma.
  • Flag --generate-key memicu pembuatan kunci pribadi RSA-2048 baru di komputer Anda.
  • Flag --key-output-file digunakan untuk menetapkan jalur tempat kunci pribadi yang dihasilkan ditulis (dalam format PEM).
  • Flag --cert-output-file digunakan untuk menetapkan jalur tempat file rantai sertifikat berenkode PEM yang dihasilkan ditulis (diurutkan dari entitas akhir ke root).
  • Flag --template digunakan untuk menetapkan nama template sertifikat yang ingin Anda gunakan untuk menerbitkan sertifikat ini. Template yang ditentukan harus berada di lokasi yang sama dengan kumpulan CA penerbit. Untuk mengetahui informasi selengkapnya tentang template sertifikat, lihat Ringkasan template sertifikat dan kebijakan penerbitan.

Membuat sertifikat produksi

Pengguna prod-dns-requester kini dapat meminta sertifikat DNS produksi dari kumpulan CA. --dns-san=foo.bar.prod.example.com menambahkan SAN jenis DNS dengan nilai yang ditentukan ke permintaan sertifikat.

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

Dengan keterangan:

  • Flag --issuer-location digunakan untuk menetapkan lokasi sertifikat. Untuk mengetahui daftar lengkap lokasi, lihat Lokasi.
  • Flag --issuer-pool menetapkan kumpulan CA tempat sertifikat diminta.
  • Flag --dns-san digunakan untuk menetapkan satu atau beberapa SAN DNS yang dipisahkan koma.
  • Flag --generate-key memicu pembuatan kunci pribadi RSA-2048 baru di komputer Anda.
  • Flag --key-output-file digunakan untuk menetapkan jalur tempat kunci pribadi yang dihasilkan ditulis (dalam format PEM).
  • Flag --cert-output-file digunakan untuk menetapkan jalur tempat file rantai sertifikat berenkode PEM yang dihasilkan ditulis (diurutkan dari entitas akhir ke root).
  • Flag --template digunakan untuk menetapkan nama template sertifikat yang akan digunakan untuk menerbitkan sertifikat ini. Template yang ditentukan harus berada di lokasi yang sama dengan kumpulan CA penerbit. Untuk mengetahui informasi selengkapnya tentang template sertifikat, lihat Ringkasan template sertifikat dan kebijakan penerbitan.

Membuat sertifikat tujuan umum

Pengguna blank-check-requester@ dapat meminta sertifikat apa pun dari kumpulan CA menggunakan perintah gcloud privateca certificates create.

Untuk meminta sertifikat dari kumpulan CA, Anda dapat menggunakan kunci publik/pribadi yang dibuat oleh CA Service. Untuk informasi selengkapnya tentang cara meminta sertifikat, lihat Meminta sertifikat dan melihat sertifikat yang diterbitkan.

Pembersihan

Bagian ini menjelaskan cara menghapus kebijakan IAM melalui kumpulan CA.

Menghapus binding IAM tertentu

Untuk menghapus binding bersyarat IAM di seluruh kumpulan CA untuk pengguna blank-check-requester, gunakan perintah gcloud berikut:

gcloud

gcloud privateca pools remove-iam-policy-binding POOL_NAME \
    --role='roles/privateca.certificateRequester' \
    --member='user:blank-check-requester@'

Dengan keterangan:

  • Nilai tanda --role menentukan peran yang ditetapkan kepada pengguna. Untuk mengetahui informasi selengkapnya tentang peran dan izin IAM untuk Layanan CA, lihat Kontrol akses dengan IAM.
  • Nilai tanda --member menentukan pengguna yang diberi peran.

Saat menghapus binding IAM tertentu, Anda harus memberikan semua informasi yang terkait dengan binding IAM dalam perintah gcloud privateca pools remove-iam-policy-binding. Peran dan anggota mungkin memiliki beberapa binding IAM dengan kondisi yang berbeda. Anda harus memberikan semua detail yang terkait dengan binding IAM untuk menghindari penghapusan binding yang berbeda secara tidak sengaja.

Untuk informasi selengkapnya tentang perintah gcloud privateca pools remove-iam-policy-binding, lihat gcloud privateca pools remove-iam-policy-binding.

Menghapus semua binding bersyarat IAM

Untuk menghapus binding IAM, Anda dapat menggunakan perintah gcloud privateca pools remove-iam-policy-binding. Saat menghapus binding bersyarat IAM, Anda harus memberikan semua informasi tentang binding tersebut. Pengguna dan peran dapat memiliki lebih dari satu binding bersyarat. Untuk menghapus semua binding bersyarat, gunakan flag --all dalam perintah gcloud Anda.

Gunakan perintah gcloud berikut untuk menghapus semua binding untuk pengguna 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

Dengan keterangan:

  • Nilai tanda --role menentukan peran yang ditetapkan kepada pengguna. Untuk mengetahui informasi selengkapnya tentang peran dan izin IAM untuk Layanan CA, lihat Kontrol akses dengan IAM.
  • Nilai tanda --member menentukan pengguna yang diberi peran.