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-requesterdapat meminta sertifikat TLS server entitas akhir untuk domain*.prod.example.com. - Pengguna
test-dns-requesterdapat meminta sertifikat TLS server entitas akhir untuk domain*.test.example.com. - Pengguna
blank-check-requesterdapat meminta jenis sertifikat apa pun dari kumpulan CA.
Tutorial ini menggunakan kebijakan penerbitan sertifikat kumpulan CA, template sertifikat, dan binding IAM bersyarat untuk mencapai skenario ini.
Sebelum memulai
- Baca tentang berbagai kontrol kebijakan yang ditawarkan oleh CA Service.
- Baca cara membuat template sertifikat.
- Baca tentang profil sertifikat yang dapat Anda gunakan untuk berbagai skenario penerbitan sertifikat.
- Baca cara menggunakan Common Expression Language (CEL) untuk menerapkan berbagai kontrol kebijakan untuk penerbitan sertifikat.
- Baca cara menggunakan kebijakan penerbitan sertifikat.
- Baca cara mengonfigurasi, mengubah, dan menghapus kebijakan IAM untuk membuat dan mengelola resource CA Service.
Membuat kumpulan CA
Untuk membuat kumpulan CA, gunakan petunjuk berikut:
Untuk membuat kumpulan CA yang menggunakan file
issuance-policy.yaml, gunakan perintahgcloudberikut:gcloud
gcloud privateca pools create POOL_NAME --location=LOCATION --tier=ENTERPRISEDengan:
- LOCATION adalah lokasi tempat Anda ingin membuat kumpulan CA. Untuk mengetahui daftar lengkap lokasi, lihat Lokasi.
- Flag
--tierdigunakan untuk menentukan tingkat kumpulan CA. Untuk mengetahui informasi selengkapnya tentang tingkat, lihat Memilih tingkat operasi.
Untuk membuat CA dengan resource yang dikelola Google di kumpulan CA yang baru dibuat, gunakan perintah
gcloudberikut: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-enableDengan:
- POOL_NAME adalah ID unik kumpulan CA.
- LOCATION adalah lokasi tempat Anda ingin membuat kumpulan CA. Untuk mengetahui daftar lengkap lokasi, lihat Lokasi.
- Flag
--subjectdigunakan untuk meneruskan nama subjek sertifikat. - Flag
--validitymenentukan periode validitas CA. Periode validitas default adalah 10 tahun. - Flag
--max-chain-lengthmenentukan kedalaman maksimum CA subordinat yang diizinkan di bawah CA. - Flag
--auto-enablemembuat CA dalam statusENABLED, bukan dalam statusSTAGED. Untuk mengetahui informasi selengkapnya tentang status CA, lihat CA states.
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 yang sama dan telah ditentukan sebelumnya 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 server entitas akhir
TLS sertifikat untuk DNS di
*.test.example.com domain.
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 SAN DNS di domain *.test.example.com. Batasan ini diterapkan menggunakan ekspresi Common Expression Language (CEL). Template sertifikat juga menghapus subjek apa pun yang ditentukan dalam permintaan sertifikat.
Gunakan perintah
gcloudberikut untuk membuat template sertifikat yang berisi ekstensi TLS server entitas akhir, menghapussubjectapa pun 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:
- Flag
--predefined-values-filedigunakan untuk meneruskan file YAML yang menjelaskan nilai X.509 yang telah ditentukan sebelumnya dan ditetapkan oleh template sertifikat. - Flag
--no-copy-subjectmenghapus semua subjek yang ditentukan pemanggil dari permintaan sertifikat. - Flag
--copy sansmemastikan bahwa ekstensi SAN dari permintaan sertifikat disalin ke dalam sertifikat yang ditandatangani. - Flag
--identity-cel-expressiondigunakan untuk meneruskan ekspresi CEL yang dievaluasi terhadap identitas dalam sertifikat sebelum diterbitkan. Untuk mengetahui 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.
- Flag
Membuat binding IAM untuk sertifikat DNS pengujian
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 CA Service, lihat Kontrol
akses dengan
IAM.
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 dalam atribut
privateca.googleapis.com/templatedari ekspresi CEL, Anda juga harus memberikan project ID saat meminta sertifikat. Jika Anda memberikan nomor project dalam ekspresi CEL, Anda juga harus memberikan nomor project dalam permintaan sertifikat.Gunakan perintah
gcloudberikut untuk menambahkan kontrol kebijakan yang memungkinkantest-dns-requester@hanya meminta sertifikat TLS pengujian produksi dari kumpulan 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.yamlDengan:
- Flag
--roledigunakan untuk meneruskan nama peran yang akan ditetapkan ke anggota. Untuk mengetahui informasi selengkapnya tentang peran dan izin IAM untuk CA Service, lihat Kontrol akses dengan IAM. - Flag
--memberdigunakan untuk meneruskan anggota yang akan ditambahkan binding-nya. - Flag
condition-from-filedigunakan untuk meneruskan nama file dengan kondisi CEL.
- Flag
Gunakan
gcloudberikut untuk menambahkan kontrol kebijakan yang memungkinkantest-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:
- Flag
--roledigunakan untuk meneruskan nama peran yang akan ditetapkan ke anggota. Untuk mengetahui informasi selengkapnya tentang peran dan izin IAM untuk CA Service, lihat Kontrol akses dengan IAM. - Flag
--memberdigunakan untuk meneruskan anggota yang akan ditambahkan binding-nya.
Untuk mengetahui informasi selengkapnya tentang cara mengonfigurasi kebijakan IAM, lihat Mengonfigurasi kebijakan IAM.
- Flag
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 DNS .prod.example.com.
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 SAN DNS di domain *.prod.example.com. Batasan 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:
--predefined-values-fileflag digunakan untuk meneruskan file YAML yang menjelaskan nilai X.509 yang telah ditentukan sebelumnya dan ditetapkan oleh template sertifikat.--no-copy-subjectflag menghapus semua subjek yang ditentukan pemanggil dari permintaan sertifikat.- Flag
--copy sansmemastikan bahwa ekstensi SAN dari permintaan sertifikat disalin ke dalam sertifikat yang ditandatangani. - Flag
--identity-cel-expressiondigunakan 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.
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"Gunakan perintah
gcloudberikut untuk menambahkan kontrol kebijakan yang memungkinkanprod-dns-requester@hanya meminta sertifikat TLS server produksi dari kumpulan 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.yamlDengan:
- Flag
--roledigunakan untuk meneruskan nama peran yang akan ditetapkan ke anggota. Untuk mengetahui informasi selengkapnya tentang peran dan izin IAM untuk CA Service, lihat Kontrol akses dengan IAM. - Flag
--memberdigunakan untuk meneruskan anggota yang akan ditambahkan binding-nya. - Flag
condition-from-filedigunakan untuk meneruskan nama file dengan kondisi CEL.
Untuk mengetahui informasi selengkapnya tentang perintah
gcloud privateca pools add-iam-policy-binding, lihat gcloud privateca pools add-iam-policy-binding.- Flag
Untuk menambahkan kontrol kebijakan yang memungkinkan
prod-dns-requester@menggunakan template sertifikat 'prod-server-tls-template', gunakan perintahgcloudberikut:gcloud
gcloud privateca templates add-iam-policy-binding prod-server-tls-template \ --role='roles/privateca.templateUser' \ --member='user:prod-dns-requester@'Dengan:
- Flag
--roledigunakan untuk meneruskan nama peran yang akan ditetapkan ke anggota. Untuk mengetahui informasi selengkapnya tentang peran dan izin IAM untuk CA Service, lihat Kontrol akses dengan IAM. - Flag
--memberdigunakan untuk meneruskan anggota yang akan ditambahkan binding-nya.
- Flag
Kontrol kebijakan pengguna tanpa batasan
Untuk mengizinkan pengguna blank-check-requester@ meminta sertifikat apa pun tanpa batasan, buat binding IAM tanpa kondisi apa pun yang memberikan peran privateca.certificateRequester kepada pengguna.
gcloud
gcloud privateca pools add-iam-policy-binding POOL_NAME \
--location=LOCATION \
--role='roles/privateca.certificateRequester' \
--member='user:blank-check-requester@example.com'
Dengan:
- Nilai flag
--rolemenentukan peran yang ditetapkan kepada pengguna. Untuk mengetahui informasi selengkapnya tentang peran dan izin IAM untuk CA Service, lihat Kontrol akses dengan IAM. - Nilai flag
--membermenentukan pengguna yang diberi peran.
Ganti kode berikut:
- POOL_NAME: ID unik kumpulan CA.
- LOCATION: lokasi kumpulan CA. Untuk mengetahui daftar lengkap lokasi, lihat Lokasi.
Menguji kontrol kebijakan
Setelah menerapkan kebijakan penerbitan sertifikat dan IAM, Anda harus meninjau dan menguji kebijakan ini untuk memastikan kebijakan tersebut berfungsi seperti yang diharapkan.
Mengambil semua binding kebijakan
Ambil 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 --location=LOCATION
Ganti kode berikut:
- POOL_NAME: ID unik kumpulan CA.
- LOCATION: lokasi kumpulan CA. Untuk mengetahui daftar lengkap lokasi, lihat Lokasi.
Untuk mengetahui 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:
- Flag
--dns-sandigunakan untuk menetapkan satu atau beberapa SAN DNS yang dipisahkan koma. - Flag
--generate-keymemicu pembuatan kunci pribadi RSA-2048 baru di mesin Anda. - Flag
--key-output-filedigunakan untuk menetapkan jalur tempat kunci pribadi yang dibuat ditulis (dalam format PEM). - Flag
--cert-output-filedigunakan untuk menetapkan jalur tempat file rantai sertifikat berenkode PEM yang dihasilkan ditulis (diurutkan dari entitas akhir ke root). - Flag
--templatedigunakan 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.
Ganti kode berikut:
- PROJECT_ID: ID unik project.
- LOCATION: lokasi kumpulan CA tempat sertifikat diminta. Untuk mengetahui daftar lengkap lokasi, lihat Lokasi.
- POOL_NAME: ID unik kumpulan CA.
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:
- Flag
--issuer-locationdigunakan untuk menetapkan lokasi sertifikat. Untuk mengetahui daftar lengkap lokasi, lihat Lokasi. - Flag
--issuer-poolmenetapkan kumpulan CA tempat sertifikat diminta. - Flag
--dns-sandigunakan untuk menetapkan satu atau beberapa SAN DNS yang dipisahkan koma. - Flag
--generate-keymemicu pembuatan kunci pribadi RSA-2048 baru di mesin Anda. - Flag
--key-output-filedigunakan untuk menetapkan jalur tempat kunci pribadi yang dibuat ditulis (dalam format PEM). - Flag
--cert-output-filedigunakan untuk menetapkan jalur tempat file rantai sertifikat berenkode PEM yang dihasilkan ditulis (diurutkan dari entitas akhir ke root). - Flag
--templatedigunakan 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 mengetahui informasi selengkapnya tentang cara meminta sertifikat, lihat Meminta sertifikat dan melihat sertifikat yang diterbitkan.
Pembersihan
Bagian ini menjelaskan cara menghapus kebijakan IAM di kumpulan CA.
Menghapus binding IAM tertentu
Untuk menghapus binding bersyarat IAM di kumpulan CA untuk pengguna blank-check-requester, gunakan perintah gcloud berikut:
gcloud
gcloud privateca pools remove-iam-policy-binding POOL_NAME \
--location=LOCATION \
--role='roles/privateca.certificateRequester' \
--member='user:blank-check-requester@'
Dengan:
- Nilai flag
--rolemenentukan peran yang ditetapkan kepada pengguna. Untuk mengetahui informasi selengkapnya tentang peran dan izin IAM untuk CA Service, lihat Kontrol akses dengan IAM. - Nilai flag
--membermenentukan pengguna yang diberi peran.
Saat menghapus binding IAM tertentu, Anda harus memberikan semua
informasi terkait 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 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. Pengguna dan peran dapat memiliki lebih dari satu binding bersyarat. Untuk menghapus semua binding bersyarat, gunakan flag --all dalam perintah gcloud.
Gunakan perintah gcloud berikut untuk menghapus semua binding untuk pengguna 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
Dengan:
- Nilai flag
--rolemenentukan peran yang ditetapkan kepada pengguna. Untuk mengetahui informasi selengkapnya tentang peran dan izin IAM untuk CA Service, lihat Kontrol akses dengan IAM. - Nilai flag
--membermenentukan pengguna yang diberi peran.