Menggunakan Common Expression Language
Halaman ini menjelaskan cara menggunakan Common Expression Language (CEL) dengan kebijakan penerbitan sertifikat, template sertifikat, dan kondisi Identity and Access Management (IAM) di kumpulan CA Anda.
Ringkasan
Common Expression Language (CEL) adalah bahasa open source non-Turing lengkap yang menerapkan semantik umum untuk evaluasi ekspresi. Layanan Otoritas Sertifikat mendukung CEL untuk menerapkan berbagai kontrol kebijakan terkait penerbitan sertifikat.
Ada dua dialek CEL yang dapat digunakan dengan Layanan CA:
- Dialek fleksibel yang dapat digunakan dalam kebijakan penerbitan sertifikat dan template sertifikat kumpulan CA.
- Dialek yang lebih terbatas yang dapat digunakan dalam kondisi IAM.
Dialek CEL untuk kebijakan penerbitan sertifikat dan template sertifikat
Saat membuat kumpulan CA atau template sertifikat, Anda dapat menentukan ekspresi CEL sebagai bagian dari batasan identitas sertifikat. Ekspresi CEL memungkinkan Anda memvalidasi kolom Subjek dan Nama Alternatif Subjek (SAN).
Untuk informasi selengkapnya tentang kebijakan penerbitan, lihat Menambahkan kebijakan penerbitan sertifikat ke kumpulan CA.
Untuk mengetahui informasi selengkapnya tentang template sertifikat, lihat Ringkasan template sertifikat dan kebijakan penerbitan.
Dialek CEL untuk batasan identitas kumpulan CA dan template sertifikat mengekspos variabel berikut untuk mengakses dan memvalidasi kolom subjek dan SAN:
- Subjek:
subject
- SAN:
subject_alt_names
Subjek
Anda dapat memvalidasi semua kolom dalam nama domain subjek sertifikat (termasuk nama umum), seperti yang ditentukan dalam permintaan sertifikat menggunakan variabel jenis Subject
dan nama subject
.
Subject
adalah struktur yang berisi kolom berikut:
Jenis | Nama |
---|---|
String |
common_name |
String |
country_code |
String |
organisasi |
String |
organizational_unit |
String |
lokalitas |
String |
provinsi |
String |
street_address |
String |
postal_code |
Nama Alternatif Subjek (SAN)
Anda dapat memvalidasi semua SAN seperti yang ditentukan dalam permintaan sertifikat menggunakan variabel subject_alt_names
. Variabel subject_alt_names
berisi daftar struct SAN, dengan setiap SAN berjenis SubjectAltName
.
SubjectAltName
adalah struct yang berisi kolom berikut:
Jenis | Nama |
---|---|
String |
value |
[]Int32 |
oid |
Enum |
jenis |
Anda dapat menggunakan nilai berikut untuk jenis SubjectAltName
:
DNS
URI
EMAIL
IP_ADDRESS
CUSTOM
Variabel subject_alt_names
berisi daftar dengan semua SAN yang diminta.
Anda dapat menggunakan makro berikut di SAN:
subject_alt_names.all(san, predicate)
subject_alt_names.exists(san, predicate)
subject_alt_names.exists_one(san, predicate)
subject_alt_names.filter(san, predicate)
Untuk informasi selengkapnya tentang makro, lihat Definisi bahasa: Makro.
Contoh ekspresi
Memastikan nama umum tertentu dan serangkaian negara
subject.common_name == "google.com" && (subject.country_code == "US" || subject.country_code == "IR")
Memastikan semua nama DNS diakhiri dengan string kustom
subject_alt_names.all(san, san.type == DNS && san.value.endsWith(".test.com"))
Memastikan semua SAN berjenis DNS atau EMAIL
subject_alt_names.all(san, san.type == DNS || san.type == EMAIL )
Memastikan hanya satu SAN kustom dengan OID tertentu
subject_alt_names.size() == 1 && subject_alt_names[0].oid == [1, 2, 3, 5, 17]
Memastikan SAN kustom hanya berupa kumpulan OID
subject_alt_names.all(san, san.oid == [1, 2, 4, 5, 55] || san.oid == [1, 2, 4, 5, 54])
Dialek CEL untuk kebijakan IAM
Gunakan kondisi IAM untuk membuat binding peran IAM tunduk pada ekspresi bersyarat. Jika kondisi bernilai true
, binding peran IAM akan efektif, jika tidak, binding peran akan diabaikan. Layanan CA memungkinkan Anda menambahkan binding bersyarat IAM ke kumpulan CA.
Kondisi IAM adalah ekspresi CEL yang mereferensikan sekumpulan atribut kontekstual tentang permintaan dan dievaluasi menjadi boolean. Pengguna menetapkan kondisi pada binding peran dalam kebijakan IAM, yang disimpan oleh IAM dan dievaluasi untuk melihat apakah operasi yang akan dilakukan diizinkan.
Untuk mengetahui informasi selengkapnya tentang kondisi IAM, lihat Ringkasan kondisi IAM.
Atribut berikut ditampilkan selama evaluasi CEL terhadap kondisi IAM:
privateca.googleapis.com/subject
privateca.googleapis.com/subject
dapat diakses sebagaiapi.getAttribute('privateca.googleapis.com/subject', {})
.
Jenis | Deskripsi |
---|---|
map{string, string} |
Kolom ini berisi nama unik subjek (termasuk nama umum) seperti yang ditentukan dalam permintaan sertifikat yang masuk. Contoh { |
privateca.googleapis.com/subject_alt_names
privateca.googleapis.com/subject_alt_names
dapat diakses sebagaiapi.getAttribute('privateca.googleapis.com/subject_alt_names', [])
.
Jenis | Deskripsi |
---|---|
list{string} |
Kolom ini berisi semua SAN yang diminta seperti yang ditentukan dalam permintaan sertifikat yang masuk. Setiap SAN yang diminta diawali dengan jenisnya. SAN dengan jenis yang tidak diketahui diawali dengan OID serialisasi jenis. Contoh { |
privateca.googleapis.com/template
privateca.googleapis.com/template
dapat diakses sebagaiapi.getAttribute('privateca.googleapis.com/template', '')
.
Jenis | Deskripsi |
---|---|
String |
Template sertifikat yang digunakan, jika ada. Formatnya adalah {project_id}/-/{template_id} .Contoh: my-project-pki/-/workload_tls |
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.
Contoh ekspresi
Memastikan bahwa semua subjek memiliki organisasi yang ditetapkan sebagai 'Contoh' dan kode negara ditetapkan sebagai US
atau UK
api.getAttribute('privateca.googleapis.com/subject', {})['organization'] == 'Example' &&
api.getAttribute('privateca.googleapis.com/subject', {})['country_code'] in ['US', 'UK']
Memastikan bahwa permintaan sertifikat hanya menyertakan SAN DNS yang diberikan
api.getAttribute('privateca.googleapis.com/subject_alt_names', [])
.hasOnly(['dns:sample1.prod.example.com', 'dns:sample2.prod.example.com'])
Memastikan bahwa semua sertifikat menggunakan template tertentu
api.getAttribute('privateca.googleapis.com/template', '') == 'my-project-pki/-/leaf-server-tls'
Langkah selanjutnya
- Baca pengantar CEL.
- Pelajari definisi bahasa untuk CEL lebih lanjut.
- Pelajari template sertifikat dan kebijakan penerbitan.
- Baca ringkasan kondisi IAM.
- Pelajari cara menambahkan kebijakan penerbitan sertifikat ke kumpulan CA.