Menerbitkan sertifikat yang membuktikan identitas pihak ketiga
Tutorial ini menunjukkan cara menerbitkan sertifikat yang membuktikan identitas pihak ketiga menggunakan pencerminan identitas dan workload identity pool.
Anda dapat menggunakan pencerminan identitas untuk membuat sertifikat yang cocok dengan identitas terverifikasi pemohon sertifikat. Dengan menggunakan pencerminan identitas, Anda dapat membatasi pemohon sertifikat yang tidak memiliki hak istimewa agar hanya meminta sertifikat dengan nama alternatif subjek (SAN) yang sesuai dengan identitas dalam kredensialnya.
Tujuan
Tutorial ini memberikan informasi tentang cara menggunakan CA Service dengan workload identity pool untuk menggabungkan identitas pihak ketiga dan mendapatkan sertifikat yang membuktikan identitas ini.
Sebelum memulai
Sebelum memulai, pastikan Anda memahami konsep berikut:
- Workload identity pool: Workload identity pool memungkinkan Anda mengelola penyedia identitas pihak ketiga. Untuk mengetahui informasi selengkapnya, lihat Mengelola workload identity pool dan penyedia.
- Workload identity federation: Workload identity federation memanfaatkan workload identity pool untuk memberikan akses ke layanan Google Cloudbagi identitas pihak ketiga. Untuk mengetahui informasi selengkapnya, lihat Workload identity federation.
- Security Token Service (STS): Security Token Service memungkinkan Anda menukar kredensial pihak ketiga dengan token pihak pertama (Google Cloud). Untuk mengetahui informasi selengkapnya, lihat Security Token Service.
- Pencerminan identitas: Fitur pencerminan identitas memungkinkan identitas terverifikasi pemohon sertifikat diteruskan ke sertifikat yang diminta. Untuk mengetahui informasi selengkapnya, lihat Pencerminan identitas.
Pastikan Anda memiliki peran IAM berikut:
- Untuk mengelola certificate authority (CA) dan kumpulan CA, serta meminta
sertifikat, Anda harus memiliki peran CA Service Operation Manager
(
privateca.caManager
). Untuk mengetahui informasi selengkapnya tentang peran IAM untuk CA Service, lihat Kontrol akses dengan IAM. - Untuk mengelola workload identity pool dan penyedia, Anda harus memiliki peran
Workload Identity Pool Admin (
iam.workloadIdentityPoolAdmin
). - Untuk membuat akun layanan, Anda harus memiliki peran Service Account Admin
(
iam.serviceAccountAdmin
).
Untuk mengetahui informasi tentang cara memberikan peran IAM, lihat Mengelola akses ke project, folder, dan organisasi. Anda dapat memberikan peran IAM yang diperlukan ke Akun Google, akun layanan, grup Google, akun Google Workspace, atau domain Cloud Identity.
Menyiapkan workload identity pool dan penyedia workload
Tutorial ini menjelaskan cara menggunakan penyedia Google OpenID Connect (OIDC) yang dikombinasikan dengan akun layanan untuk bertindak sebagai identitas pihak ketiga. Penyedia OIDC Akun Google bertindak sebagai penyedia identitas (IDP) pihak ketiga dan akun layanan adalah contoh identitas pihak ketiga yang ditegaskan oleh IDP ini. Google Cloud
Workload identity pool mendukung berbagai penyedia identitas, termasuk Microsoft Azure/On-Premise Active Directory, AWS, dan penyedia identitas berbasis SAML.
Untuk menyiapkan workload identity pool dan penyedia, lakukan hal berikut: 1. Untuk merepresentasikan sekumpulan identitas gabungan yang tepercaya, buat workload identity pool:
```
gcloud iam workload-identity-pools create IDENTITY_POOL_ID --location global --display-name "tutorial-wip"
```
Replace the following:
- <var>IDENTITY_POOL_ID</var>: The unique identifier of the new workload
identity pool.
Buat penyedia workload identity pool untuk penyedia identitas pihak ketiga Anda:
gcloud iam workload-identity-pools providers create-oidc PROVIDER_ID --location global --workload-identity-pool IDENTITY_POOL_ID --display-name "tutorial-oidc" --attribute-mapping "google.subject=assertion.sub" --issuer-uri="https://accounts.google.com"
Ganti kode berikut:
- PROVIDER_ID: ID unik penyedia identitas yang ingin Anda buat di workload identity pool.
Anda dapat menyesuaikan tanda berikut dengan kasus penggunaan Anda:
attribute-mapping
: Flag ini menetapkan pemetaan antara klaim pihak ketiga ke klaim prinsipal Google,google.subject
.google.subject
adalah pemetaan wajib yang dapat Anda tetapkan ke klaim atau kombinasi klaim apa pun menggunakan ekspresi CEL. Untuk mengetahui informasi selengkapnya, lihat Menentukan pemetaan dan kondisi atribut.issuer-uri
: Untuk penyedia OIDC, tanda ini adalah endpoint yang dapat diakses secara publik yang dihubungi Google untuk memverifikasi token pihak ketiga. Untuk mengetahui informasi selengkapnya, lihat Menyiapkan penyedia identitas eksternal.
Untuk mengetahui informasi selengkapnya tentang cara menyiapkan penyedia identitas beban kerja, lihat Mengonfigurasi workload identity federation.
Buat kumpulan CA dan CA penerbit
Bagian ini menjelaskan cara membuat kumpulan CA dan menambahkan CA root ke dalamnya. Anda dapat menggunakan kumpulan CA ini untuk menerbitkan sertifikat yang mencerminkan identitas. Jika ingin menggunakan kumpulan CA dan CA yang ada, Anda dapat melewati bagian ini.
Selain CA root, Anda juga dapat memilih untuk membuat CA subordinat. Membuat CA root akan memperpendek prosedur.
Buat kumpulan CA di tingkat DevOps:
gcloud privateca pools create CA_POOL_ID --location LOCATION --tier devops
Ganti kode berikut:
- CA_POOL_ID - ID pool CA Service CA yang menerbitkan sertifikat.
- LOCATION - Lokasi kumpulan CA.
Untuk mengetahui informasi selengkapnya tentang cara membuat kumpulan CA, lihat Membuat kumpulan CA.
Buat CA root:
gcloud privateca roots create CA_ID --pool CA_POOL_ID --location LOCATION --subject "CN=test,O=test-org"
Ganti kode berikut:
- CA_ID - ID otoritas sertifikat yang menerbitkan sertifikat.
- CA_POOL_ID - ID pool CA Service CA yang menerbitkan sertifikat.
- LOCATION - Lokasi kumpulan CA.
Untuk mengetahui informasi selengkapnya tentang cara membuat CA root, lihat Membuat CA root.
Mengizinkan identitas yang digabungkan dari workload identity pool untuk menerbitkan sertifikat dari CA Pool. Pencerminan identitas memerlukan peran IAM CA Service Workload Certificate Requester (
roles/privateca.workloadCertificateRequester
) untuk pemohonCreateCertificate
.Anda dapat merepresentasikan akun utama workload identity pool dalam berbagai perincian, mulai dari satu subjek hingga semua identitas dalam pool di seluruh penyedia. Untuk mengetahui informasi selengkapnya, lihat kumpulan utama atau set utama yang tersedia (gunakan tab Google Cloud CLI) agar paling sesuai dengan kasus penggunaan Anda.
gcloud privateca pools add-iam-policy-binding CA_POOL_ID \ --location LOCATION \ --role "roles/privateca.workloadCertificateRequester" \ --member "group:PROJECT_ID.svc.id.goog:/allAuthenticatedUsers/"
Ganti kode berikut:
- LOCATION: lokasi kumpulan CA
- PROJECT_ID: ID Google Cloud project tempat Anda membuat workload identity pool
Membuat akun layanan yang merepresentasikan identitas pihak ketiga
Prosedur berikut mengasumsikan bahwa akun layanan mewakili pihak ketiga. Bagian ini menunjukkan cara menggunakan endpoint IAM GenerateIdToken
untuk mengambil identitas pihak ketiga dalam bentuk token OIDC. Bergantung pada kasus penggunaan, Anda mungkin memerlukan langkah-langkah yang berbeda untuk mendapatkan token identitas pihak ketiga pilihan Anda.
gcloud iam service-accounts create SERVICE_ACCOUNT
Ganti kode berikut:
- SERVICE_ACCOUNT - ID akun layanan yang merepresentasikan identitas pihak ketiga.
Menerbitkan sertifikat yang membuktikan identitas pihak ketiga
Sebelum memulai, pastikan Anda memiliki peran IAM Service Account Token Creator
(roles/iam.serviceAccountTokenCreator
). Anda memerlukan peran IAM ini untuk memanggil GenerateIdToken
API.
Untuk mendapatkan sertifikat yang membuktikan identitas pihak ketiga, lakukan hal berikut:
Dapatkan token identitas pihak ketiga dari penyedia identitas pihak ketiga Anda.
curl
export ID_TOKEN=`curl -d '{"audience":"//iam.googleapis.com/projects/PROJECT_NUMBER/locations/global/workloadIdentityPools/IDENTITY_POOL_ID/providers/PROVIDER_ID"}' -H 'Content-Type: application/json' -H "Authorization: Bearer $(gcloud auth print-access-token)" https://iamcredentials.googleapis.com/v1/projects/-/serviceAccounts/SERVICE_ACCOUNT@PROJECT_ID.iam.gserviceaccount.com:generateIdToken | python3 -c "import sys;import json;print(json.load(sys.stdin)['token'])"`
Ganti kode berikut:
- PROJECT_ID - ID Google Cloud project untuk project tempat Anda ingin membuat resource.
Library klien
Untuk mengakses token pihak ketiga secara terprogram, Anda dapat memperoleh token dari kredensial yang bersumber dari file atau kredensial yang bersumber dari URL. Untuk mengetahui informasi selengkapnya, lihat Mengautentikasi dengan menggunakan library klien, gcloud CLI, atau Terraform. Dalam tutorial ini, kita akan mengikuti alur kerja kredensial sumber file.
Muat kredensial Anda ke jalur yang dapat dibaca oleh pemohon sertifikat Anda:
curl -d '{"audience":"//iam.googleapis.com/projects/PROJECT_NUMBER/locations/global/workloadIdentityPools/IDENTITY_POOL_ID/providers/PROVIDER_ID"}' -H 'Content-Type: application/json' -H "Authorization: Bearer $(gcloud auth print-access-token)" https://iamcredentials.googleapis.com/v1/projects/-/serviceAccounts/SERVICE_ACCOUNT@PROJECT_ID.iam.gserviceaccount.com:generateIdToken | python3 -c "import sys;import json; print(json.load(sys.stdin)['token']) > /tmp/oidc_token.txt
Ganti kode berikut:
- PROJECT_ID: Project ID project tempat Anda ingin membuat resource.
Tukar token pihak ketiga Anda dengan token OAuth federasi menggunakan endpoint STS
token
:curl
export STS_TOKEN=`curl -L -X POST 'https://sts.googleapis.com/v1/token' -H 'Content-Type: application/json' \ -d '{ "grant_type": "urn:ietf:params:oauth:grant-type:token-exchange", "audience": "//iam.googleapis.com/projects/PROJECT_NUMBER/locations/global/workloadIdentityPools/IDENTITY_POOL_ID/providers/PROVIDER_ID", "requested_token_type": "urn:ietf:params:oauth:token-type:access_token", "scope": "https://www.googleapis.com/auth/cloud-platform", "subject_token": "'$ID_TOKEN'", "subject_token_type": "urn:ietf:params:oauth:token-type:jwt" }' | python3 -c "import sys;import json; print(json.load(sys.stdin)['access_token'])"`
Library klien
- Buat file konfigurasi
kredensial bernama
oidc_token.txt
yang dapat dibaca oleh kode yang meminta sertifikat untuk melakukan pertukaran token.
gcloud iam workload-identity-pools create-cred-config projects/PROJECT_NUMBER/locations/global/workloadIdentityPools/IDENTITY_POOL_ID --output-file=/tmp/cred_config.json --credential-source-file=/tmp/oidc_token.txt
- Baca file
oidc_token.txt
untuk menetapkan mekanisme otorisasi di library klien:
python
import json from google.auth import identity_pool with open('/tmp/cred_config.json', 'r') as f: json_config_info = json.loads(f.read()) credentials = identity_pool.Credentials.from_info(json_config_info) scoped_credentials = credentials.with_scopes( ['https://www.googleapis.com/auth/cloud-platform'])
- Buat file konfigurasi
kredensial bernama
Buat permintaan ke CA Service dengan mode permintaan subjek
REFLECTED_SPIFFE
:curl
Opsional: Jika Anda tidak memiliki CSR, buat CSR dengan menjalankan perintah berikut.
export TUTORIAL_CSR=$(openssl req -newkey rsa:2048 -nodes -subj / -keyout tutorial_do_not_use.key)
Minta sertifikat dengan CSR, masa aktif, dan mode permintaan subjek yang ditampilkan:
curl -H "Authorization: Bearer $(echo $STS_TOKEN)" https://privateca.googleapis.com/v1/projects/PROJECT_NUMBER/locations/LOCATION/caPools/CA_POOL_ID/certificates\?alt\=json -X POST -H "Content-Type: application/json" -H 'Accept: application/json' --data '{"lifetime": "100s", "pemCsr": "'$TUTORIAL_CSR'", "subjectMode": "REFLECTED_SPIFFE"}'
Library klien
Untuk meneruskan token pihak pertama ke Layanan CA, Anda harus membuat klien dengan kredensial. Anda kemudian dapat menggunakan klien dengan kredensial ini untuk membuat permintaan sertifikat:
Mulai klien Layanan CA dengan kredensial:
python
caServiceClient = privateca_v1.CertificateAuthorityServiceClient(credentials=scoped_credentials)
Minta sertifikat.
Python
Untuk melakukan autentikasi ke CA Service, siapkan Kredensial Default Aplikasi. Untuk mengetahui informasi selengkapnya, lihat Menyiapkan autentikasi untuk lingkungan pengembangan lokal.
Verifikasi sertifikat. Sertifikat Anda harus memiliki subjek yang berisi satu SAN URI. SAN yang membuktikan identitas menggunakan format berikut:
spiffe://IDENTITY_POOL_ID.PROJECT_NUMBER.global.workload.id.goog/subject/<oidc_subject_number>
Ganti:
- IDENTITY_POOL_ID: ID unik workload identity pool.
- PROJECT_NUMBER - Nomor project dari project tempat Anda membuat workload identity pool.
Pembersihan
Agar tidak menimbulkan biaya pada akun Google Cloud Anda untuk resource Layanan CA yang Anda buat dengan mengikuti dokumen ini, lakukan operasi berikut menggunakan Google Cloud CLI:
Hapus CA yang Anda buat.
Nonaktifkan CA:
gcloud privateca roots disable CA_ID --pool CA_POOL_ID --location LOCATION
Ganti:
- CA_ID: ID unik CA.
- CA_POOL_ID: ID unik pool CA.
- LOCATION: Lokasi pool CA.
Hapus CA:
gcloud privateca roots delete CA_ID --pool CA_POOL_ID --location LOCATION --ignore-active-certificates
Ganti:
- CA_ID: ID unik CA.
- CA_POOL_ID: ID unik pool CA.
- LOCATION: Lokasi pool CA.
Hapus kumpulan CA yang Anda buat.
gcloud privateca pools delete CA_POOL_ID --location LOCATION
Ganti:
- CA_POOL_ID: ID unik pool CA.
- LOCATION: Lokasi pool CA.
Untuk mengetahui informasi selengkapnya tentang perintah
gcloud privateca pools delete
, lihat gcloud privateca pools delete.Hapus workload identity pool yang Anda buat:
gcloud iam workload-identity-pools delete IDENTITY_POOL_ID --location global
Ganti:
- IDENTITY_POOL_ID: ID unik workload identity pool.
Hapus akun layanan yang Anda buat:
gcloud iam service-accounts delete SERVICE_ACCOUNT@PROJECT_ID.iam.gserviceaccount.com
Ganti:
- SERVICE_ACCOUNT: ID unik workload identity pool.
- PROJECT_ID: Project yang memiliki akun layanan.
Peran IAM CA Service Workload
Certificate Requester (privateca.workloadCertificateRequester
)
membatasi subjek sertifikat yang diterbitkan hanya untuk
identitas pemohon. Pastikan pengguna atau beban kerja yang menggunakan fitur pencerminan identitas hanya diberi peran IAM CA Service Workload Certificate Requester (privateca.workloadCertificateRequester
). Untuk mematuhi prinsip hak istimewa terendah, Anda dapat
menghindari pemberian peran IAM Permintaan Sertifikat Layanan CA
(privateca.certificateRequester
).
Langkah berikutnya
- Baca tentang berbagai kontrol kebijakan yang memungkinkan Anda mengontrol properti sertifikat yang diminta di luar identitas yang direfleksikan.
- Baca cara Anda dapat mengonfigurasi dan mengelola berbagai kontrol kebijakan.