Tutorial: Mengelola kontrol kebijakan

Tutorial ini menunjukkan cara menerapkan kontrol kebijakan pada resource Certificate Authority Service.

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 dalam 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 dari kumpulan CA.
    • Flag --subject digunakan untuk meneruskan nama subjek sertifikat.
    • Tanda --validity menentukan periode validitas CA. Masa berlaku default adalah 10 tahun.
    • Tanda --max-chain-length menentukan kedalaman maksimum CA subordinat yang diizinkan berdasarkan CA.
    • Flag --auto-enable membuat CA dalam status ENABLED, bukan dalam status STAGED. Untuk informasi selengkapnya tentang status CA, lihat negara bagian 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 untuk hanya menggunakan SAN DNS 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.
    • Tanda --no-copy-subject menghapus semua subjek yang ditentukan penelepon dari permintaan sertifikat.
    • Tanda --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 cara menggunakan ekspresi CEL untuk menerapkan berbagai kontrol kebijakan, lihat Menggunakan CEL.

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

Membuat binding IAM untuk sertifikat pengujian DNS

Agar pengguna test-dns-requester@ dalam kumpulan CA DNS dapat meminta sertifikat TLS server pengujian, buat binding IAM bersyarat pada 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 CA Service, 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 memberikan project ID dalam 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 mengizinkan 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:

    • Tanda --role digunakan untuk meneruskan nama peran yang akan ditetapkan kepada anggota. Untuk mengetahui informasi selengkapnya tentang peran dan izin IAM untuk CA Service, lihat Kontrol akses dengan IAM.
    • Flag --member digunakan untuk meneruskan anggota yang akan ditambahi binding.
    • Flag condition-from-file digunakan untuk meneruskan nama file dengan kondisi CEL.
  3. Gunakan gcloud berikut untuk menambahkan kontrol kebijakan yang mengizinkan 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:

    • Tanda --role digunakan untuk meneruskan nama peran yang akan ditetapkan kepada anggota. Untuk mengetahui informasi selengkapnya tentang peran dan izin IAM untuk CA Service, lihat Kontrol akses dengan IAM.
    • Flag --member digunakan untuk meneruskan anggota yang akan ditambahi binding.

    Untuk mengetahui 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 untuk hanya menggunakan SAN DNS 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.
  • Tanda --no-copy-subject menghapus semua subjek yang ditentukan penelepon dari permintaan sertifikat.
  • Tanda --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 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

Agar pengguna prod-dns-requester@ dalam kumpulan CA DNS dapat meminta sertifikat TLS server produksi, buat binding IAM bersyarat pada 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, baca: Kontrol akses dengan IAM.

  1. Buat file YAML kebijakan prod_dns_condition.yaml, lalu 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 mengizinkan 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:

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

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

  3. Untuk menambahkan kontrol kebijakan yang mengizinkan 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:

    • Tanda --role digunakan untuk meneruskan nama peran yang akan ditetapkan kepada anggota. Untuk mengetahui informasi selengkapnya tentang peran dan izin IAM untuk CA Service, lihat Kontrol akses dengan IAM.
    • Flag --member digunakan untuk meneruskan anggota yang akan ditambahi binding.

Kontrol kebijakan pengguna yang tidak dibatasi

Agar pengguna blank-check-requester@ dapat meminta sertifikat apa pun tanpa batasan apa pun, buat binding IAM tanpa kondisional apa pun 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 flag --role menentukan peran yang ditetapkan kepada pengguna. Untuk mengetahui informasi selengkapnya tentang peran dan izin IAM untuk CA Service, lihat Kontrol akses dengan IAM.
  • Nilai tanda --member menentukan pengguna yang diberi peran.

Menguji kontrol kebijakan

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

Mengambil semua binding kebijakan

Ambil semua kebijakan IAM yang diterapkan pada 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 dari kumpulan CA.

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

Membuat sertifikat

Bagian ini memberikan informasi tentang 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 daftar lengkap lokasi, lihat Lokasi.
  • Flag --issuer-pool menetapkan kumpulan CA tempat sertifikat diminta.
  • Flag --dns-san digunakan untuk menyetel 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).
  • Tanda --cert-output-file digunakan untuk menetapkan jalur tempat file rantai sertifikat berenkode PEM yang dihasilkan ditulis (diurutkan dari entity akhir ke root).
  • Tanda --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 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 daftar lengkap lokasi, lihat Lokasi.
  • Flag --issuer-pool menetapkan kumpulan CA tempat sertifikat diminta.
  • Flag --dns-san digunakan untuk menyetel 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).
  • Tanda --cert-output-file digunakan untuk menetapkan jalur tempat file rantai sertifikat berenkode PEM yang dihasilkan ditulis (diurutkan dari entity 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 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 pada kumpulan CA.

Menghapus binding IAM tertentu

Untuk menghapus binding kondisional IAM pada kumpulan CA bagi 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 flag --role menentukan peran yang ditetapkan kepada pengguna. Untuk mengetahui informasi selengkapnya tentang peran dan izin IAM untuk CA Service, 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 terkait binding IAM untuk menghindari penghapusan binding yang berbeda secara tidak sengaja.

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

Menghapus semua binding kondisional IAM

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

Gunakan perintah gcloud berikut untuk menghapus semua binding bagi 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 flag --role menentukan peran yang ditetapkan kepada pengguna. Untuk mengetahui informasi selengkapnya tentang peran dan izin IAM untuk CA Service, lihat Kontrol akses dengan IAM.
  • Nilai tanda --member menentukan pengguna yang diberi peran.