Mengonfigurasi Workload Identity Federation dengan sertifikat X.509

Panduan ini menjelaskan cara menggunakan Workload Identity Federation dengan sertifikat X.509 yang diterbitkan oleh certificate authority (CA) Anda untuk melakukan autentikasi ke Google Cloud dan mengakses resource Google Cloud.

Jika workload Anda memiliki sertifikat klien mTLS, Anda dapat melakukan autentikasi ke Google Cloud dengan mendaftarkan satu atau beberapa CA ke Workload Identity Federation sebagai anchor kepercayaan. Anda juga dapat mendaftarkan CA perantara.

Dengan menggunakan Workload Identity Federation, Anda dapat mengizinkan workload ini mendapatkan kredensial Google Cloud jangka pendek melalui koneksi TLS bersama (mTLS). Workload dapat menggunakan kredensial jangka pendek ini untuk mengakses Google Cloud API.

Konsep

Konsep federasi berbasis sertifikat X.509 mencakup hal berikut:

  • Anchor kepercayaan adalah sertifikat CA yang dianggap sebagai root kepercayaan. Setiap rantai sertifikat klien harus dirantai ke salah satu anchor kepercayaan.

  • CA perantara adalah sertifikat certificate authority opsional yang membantu membuat rantai sertifikat klien.

  • Trust store berisi sertifikat anchor kepercayaan dan sertifikat CA perantara yang digunakan untuk memvalidasi rantai sertifikat klien. CA menerbitkan sertifikat tepercaya untuk klien.

    Anda dapat mengupload jenis sertifikat klien berikut ke trust store:

Sebelum memulai

Untuk mulai mengonfigurasi Workload Identity Federation, lakukan langkah berikut:

  1. Di konsol Google Cloud, pada halaman pemilih project, pilih atau buat project Google Cloud.

    Buka pemilih project

  2. Sebaiknya Anda menggunakan project khusus untuk mengelola workload identity pool dan penyedia workload.
  3. Make sure that billing is enabled for your Google Cloud project.

  4. Aktifkan API IAM, Resource Manager, Service Account Credentials, and Security Token Service.

    Mengaktifkan API

Peran yang diperlukan

Untuk mendapatkan izin yang diperlukan guna mengonfigurasi Workload Identity Federation, minta administrator untuk memberi Anda peran IAM berikut pada project:

Untuk mengetahui informasi selengkapnya tentang cara memberikan peran, lihat Mengelola akses ke project, folder, dan organisasi.

Anda mungkin juga bisa mendapatkan izin yang diperlukan melalui peran khusus atau peran bawaan lainnya.

Peran dasar pemilik IAM (roles/owner) juga mencakup izin untuk mengonfigurasi penggabungan identitas. Anda tidak boleh memberikan peran dasar dalam lingkungan produksi, tetapi Anda dapat memberikannya dalam lingkungan pengembangan atau pengujian.

Mengonfigurasi Workload Identity Federation

Bagian ini menunjukkan cara mengonfigurasi Workload Identity Federation dan trust store Anda. Anda hanya perlu melakukan langkah-langkah ini satu kali untuk setiap trust store. Anda kemudian dapat menggunakan workload identity pool dan penyedia workload yang sama untuk beberapa workload dan di beberapa project Google Cloud.

Membuat dan mengonfigurasi trust store

Bagian ini menunjukkan cara membuat file konfigurasi YAML trust store dan sertifikat CA yang ditandatangani sendiri.

Membuat kunci dan sertifikat yang ditandatangani

Bagian ini menggunakan perintah openssl untuk membuat sertifikat root dan antara.

Jika sudah memiliki sertifikat, Anda dapat melewati langkah ini dan melanjutkan ke Memformat sertifikat.

Untuk membuat root certificate dan sertifikat antara yang ditandatangani dengan kolom keyUsage dan extendedKeyUsage yang valid, lakukan hal berikut:

  1. Buat contoh file example.cnf dengan konfigurasi minimum yang diperlukan untuk membuat sertifikat penandatanganan yang valid. Anda dapat mengedit file ini untuk menetapkan kolom tambahan pada sertifikat ini.

    cat > example.cnf << EOF
    [req]
    distinguished_name = empty_distinguished_name
    [empty_distinguished_name]
    # Kept empty to allow setting via -subj command line arg.
    [ca_exts]
    basicConstraints=critical,CA:TRUE
    keyUsage=keyCertSign
    extendedKeyUsage=clientAuth
    EOF
    
  2. Buat root certificate:

    openssl req -x509 \
        -new -sha256 -newkey rsa:2048 -nodes \
        -days 3650 -subj '/CN=root' \
        -config example.cnf \
        -extensions ca_exts \
        -keyout root.key -out root.cert
    
  3. Buat permintaan penandatanganan untuk sertifikat perantara:

    openssl req \
        -new -sha256 -newkey rsa:2048 -nodes \
        -subj '/CN=int' \
        -config example.cnf \
        -extensions ca_exts \
        -keyout int.key -out int.req
    
  4. Buat sertifikat intermediate:

    openssl x509 -req \
        -CAkey root.key -CA root.cert \
        -set_serial 1 \
        -days 3650 \
        -extfile example.cnf \
        -extensions ca_exts \
        -in int.req -out int.cert
    

Memformat sertifikat

Untuk menyertakan sertifikat baru atau yang sudah ada di trust store, format sertifikat menjadi satu baris dan simpan di variabel lingkungan, sehingga dapat dibaca ke dalam file YAML. Sertifikat harus berformat PEM. Untuk memformat sertifikat dan menyimpan dalam variabel lingkungan, lakukan hal berikut:

  1. Simpan root certificate sebagai string satu baris:

    export ROOT_CERT=$(cat root.cert | sed 's/^[ ]*//g' | sed -z '$ s/\n$//' | tr '\n' $ | sed 's/\$/\\n/g')
    
  2. Simpan intermediate certificate sebagai string satu baris:

    export INTERMEDIATE_CERT=$(cat int.cert | sed 's/^[ ]*//g' | sed -z '$ s/\n$//' | tr '\n' $ | sed 's/\$/\\n/g')
    

Membuat file YAML trust store

Di bagian ini, Anda akan membuat file YAML trust store yang berisi anchor kepercayaan dan CA perantara.

Untuk membuat file YAML trust store, jalankan perintah berikut. File ini berisi konten sertifikat dari variabel lingkungan yang Anda buat di Memformat sertifikat. Untuk menambahkan anchor kepercayaan tambahan, tambahkan entri trustAnchors tambahan di bagian trustStore. Untuk menambahkan sertifikat CA perantara tambahan, tambahkan entri intermediateCas tambahan di bagian trustStore.

cat << EOF > trust_store.yaml
trustStore:
  trustAnchors:
  - pemCertificate: "${ROOT_CERT}"
  intermediateCas:
  - pemCertificate: "${INTERMEDIATE_CERT}"
EOF

Menentukan pemetaan dan kondisi atribut

Sertifikat X.509 klien dapat berisi beberapa atribut. Anda harus memilih atribut yang ingin digunakan sebagai ID subjek dengan memetakan google.subject di Google Cloud ke atribut dari sertifikat Anda. Misalnya, jika atribut dalam sertifikat adalah nama umum subjek, pemetaan akan menjadi sebagai berikut: google.subject=assertion.subject.dn.cn

Secara opsional, Anda dapat memetakan atribut tambahan. Selanjutnya, Anda dapat merujuk ke atribut ini saat memberikan akses ke resource.

Pemetaan atribut Anda dapat menggunakan atribut dalam sertifikat klien, termasuk berikut:

  • serialNumberHex: nomor seri
  • subject.dn.cn: nama umum subjek
  • subject.dn.o: nama organisasi subjek
  • subject.dn.ou: unit organisasi subjek
  • issuer.dn.cn: nama umum penerbit
  • issuer.dn.o: nama organisasi penerbit
  • issuer.dn.ou: unit organisasi penerbit
  • san.dns: nama DNS pertama nama alternatif subjek
  • san.uri: URI pertama nama alternatif subjek

Anda harus memetakan salah satu atribut ini ke google.subject untuk mengidentifikasi subjek secara unik. Untuk melindungi dari ancaman spoofing, pilih atribut dengan nilai unik yang tidak dapat diubah. Secara default, ID google.subject ditetapkan ke nama umum subjek sertifikat klien, assertion.subject.dn.cn.

Opsional: Tentukan kondisi atribut. Kondisi atribut adalah ekspresi CEL yang dapat memeriksa atribut pernyataan dan atribut target. Jika kondisi atribut dievaluasi ke true untuk kredensial tertentu, kredensial tersebut akan diterima. Jika tidak, kredensial akan ditolak.

Anda dapat menggunakan kondisi atribut untuk membatasi subjek yang dapat menggunakan Workload Identity Federation untuk mendapatkan token Google Cloud dengan masa berlaku singkat.

Misalnya, kondisi berikut membatasi akses ke sertifikat klien yang berisi ID SPIFFE spiffe://example/path:

assertion.san.uri=="spiffe://example/path"

Membuat workload identity pool dan penyedia workload

  1. Untuk membuat workload identity pool baru, jalankan perintah berikut:

    gcloud iam workload-identity-pools create POOL_ID \
        --location="global" \
        --description="DESCRIPTION" \
        --display-name="DISPLAY_NAME"
    

    Ganti kode berikut:

    • POOL_ID: ID unik untuk pool.
    • DISPLAY_NAME: nama pool.
    • DESCRIPTION: deskripsi pool yang Anda pilih. Deskripsi ini muncul saat Anda memberikan akses ke identitas pool.
  2. Untuk menambahkan penyedia workload identity pool X.509, jalankan perintah berikut:

    gcloud iam workload-identity-pools providers create-x509 PROVIDER_ID \
        --location=global \
        --workload-identity-pool="POOL_ID" \
        --trust-store-config-path="TRUST_STORE_CONFIG" \
        --attribute-mapping="MAPPINGS" \
        --attribute-condition="CONDITIONS" \
        --billing-project="ALLOWLISTED_PROJECT"
    

    Ganti kode berikut:

    • PROVIDER_ID: ID penyedia unik untuk workload identity pool yang Anda pilih.
    • POOL_ID: ID workload identity pool yang telah Anda buat sebelumnya.
    • TRUST_STORE_CONFIG: File YAML trust store.
    • MAPPINGS: Daftar yang dipisahkan koma untuk pemetaan atribut yang telah Anda buat sebelumnya dalam panduan ini. Jika Anda tidak menentukan google.subject, pemetaan defaultnya adalah google.subject=assertion.subject.dn.cn
    • CONDITIONS: Kondisi atribut opsional yang telah Anda buat sebelumnya dalam panduan ini. Hapus parameter jika Anda tidak memiliki kondisi atribut.
    • ALLOWLISTED_PROJECT: Project ID.

Mengautentikasi workload

Langkah ini harus dilakukan satu kali untuk setiap workload.

Mengizinkan workload eksternal Anda mengakses resource Google Cloud

Untuk memberi beban kerja Anda akses ke resource Google Cloud, sebaiknya Anda memberikan akses resource langsung ke akun utama. Dalam hal ini, prinsipal adalah pengguna gabungan. Beberapa produk Google Cloud memiliki batasan Google Cloud API. Jika beban kerja Anda memanggil endpoint API yang memiliki batasan, Anda dapat menggunakan peniruan identitas akun layanan. Dalam hal ini, akun utama adalah akun layanan Google Cloud, yang bertindak sebagai identitas. Anda memberikan akses ke akun layanan di resource.

Akses resource langsung

Anda dapat memberikan akses ke identitas gabungan langsung di resource menggunakan konsol Google Cloud atau gcloud CLI.

Konsol

Untuk menggunakan konsol Google Cloud guna memberikan peran IAM langsung di resource, Anda harus membuka halaman resource, lalu memberikan peran. Contoh berikut menunjukkan cara membuka halaman Cloud Storage dan memberikan peran Storage Object Viewer (roles/storage.objectViewer) ke identitas gabungan langsung di bucket Cloud Storage.

  1. Di Konsol Google Cloud, buka halaman Bucket Cloud Storage.

    Buka Bucket

  2. Pada daftar bucket, klik nama bucket tempat Anda ingin memberi peran.

  3. Pilih tab Permissions di dekat bagian atas halaman.

  4. Klik tombol Berikan akses.

    Dialog Add principals akan muncul.

  5. Di kolom Akun utama baru, masukkan satu atau beberapa identitas yang memerlukan akses ke bucket Anda.

    Menurut subjek

    principal://iam.googleapis.com/projects/PROJECT_NUMBER/locations/global/workloadIdentityPools/POOL_ID/subject/SUBJECT
    

    Ganti kode berikut:

    • PROJECT_NUMBER: nomor project
    • POOL_ID: ID workload pool
    • SUBJECT: subjek individu yang dipetakan dari IdP Anda—misalnya, administrator@example.com

    Menurut grup

    principalSet://iam.googleapis.com/projects/PROJECT_NUMBER/locations/global/workloadIdentityPools/POOL_ID/group/GROUP
    

    Ganti kode berikut:

    • PROJECT_NUMBER: nomor project
    • WORKLOAD_POOL_ID: ID workload pool
    • GROUP: grup yang dipetakan dari IdP Anda—misalnya: administrator-group@example.com

    Menurut atribut

    principalSet://iam.googleapis.com/projects/PROJECT_NUMBER/locations/global/workloadIdentityPools/POOL_ID/attribute.ATTRIBUTE_NAME/ATTRIBUTE_VALUE
    

    Ganti kode berikut:

    • PROJECT_NUMBER: nomor project
    • WORKLOAD_POOL_ID: ID workload pool
    • ATTRIBUTE_NAME: salah satu atribut yang dipetakan dari IdP Anda
    • ATTRIBUTE_VALUE: nilai atribut
  6. Pilih satu (atau beberapa) peran dari menu drop-down Pilih peran. Peran yang Anda pilih akan muncul di panel dengan deskripsi singkat tentang izin yang diberikan.

  7. Klik Simpan.

gcloud

Untuk menggunakan gcloud CLI guna memberikan peran IAM pada resource dalam project, lakukan tindakan berikut:

  1. Dapatkan nomor project dari project tempat resource ditentukan.

    gcloud projects describe $(gcloud config get-value core/project) --format=value\(projectNumber\)
    
  2. Berikan akses ke resource.

    Untuk menggunakan gcloud CLI guna memberikan peran Storage Object Viewer (roles/storage.objectViewer) kepada identitas eksternal yang memenuhi kriteria tertentu, jalankan perintah berikut.

    Menurut subjek

    gcloud storage buckets add-iam-policy-binding BUCKET_ID \
        --role=roles/storage.objectViewer \
        --member="principal://iam.googleapis.com/projects/PROJECT_NUMBER/locations/global/workloadIdentityPools/POOL_ID/subject/SUBJECT"

    Menurut grup

    gcloud storage buckets add-iam-policy-binding BUCKET_ID \
        --role=roles/storage.objectViewer \
        --member="principalSet://iam.googleapis.com/projects/PROJECT_NUMBER/locations/global/workloadIdentityPools/POOL_ID/group/GROUP"

    Menurut atribut

    gcloud storage buckets add-iam-policy-binding BUCKET_ID \
        --role=roles/storage.objectViewer \
        --member="principalSet://iam.googleapis.com/projects/PROJECT_NUMBER/locations/global/workloadIdentityPools/POOL_ID/attribute.ATTRIBUTE_NAME/ATTRIBUTE_VALUE"

    Ganti kode berikut:

    • BUCKET_ID: bucket tempat akses akan diberikan
    • PROJECT_NUMBER: nomor project dari project yang berisi workload identity pool
    • POOL_ID: ID pool dari workload identity pool
    • SUBJECT: nilai yang diharapkan untuk atribut yang Anda petakan ke google.subject
    • GROUP: nilai yang diharapkan untuk atribut yang Anda petakan ke google.groups
    • ATTRIBUTE_NAME: nama atribut khusus dalam pemetaan atribut Anda
    • ATTRIBUTE_VALUE: nilai atribut kustom dalam pemetaan atribut Anda

    Anda dapat memberikan peran di resource Google Cloud mana pun yang mendukung kebijakan izin IAM.

Peniruan akun layanan

  1. Untuk membuat akun layanan untuk workload eksternal, lakukan langkah berikut:

    1. Aktifkan API IAM, Security Token Service, and Service Account Credentials.

      Mengaktifkan API

    2. Buat akun layanan yang merepresentasikan workload. Sebaiknya Anda menggunakan akun layanan khusus untuk setiap workload. Akun layanan tidak perlu berada dalam project yang sama dengan workload identity pool, tetapi Anda harus merujuk ke project yang berisi akun layanan.

    3. Berikan akses akun layanan untuk resource yang ingin diakses oleh identitas eksternal.

    4. Berikan peran Workload Identity User (roles/iam.workloadIdentityUser) ke akun layanan.

  2. Untuk memberikan akses ke identitas gabungan menggunakan peniruan identitas akun layanan menggunakan Konsol Google Cloud atau gcloud CLI:

Konsol

Untuk menggunakan konsol Google Cloud guna memberikan peran IAM ke identitas gabungan dengan akun layanan, lakukan tindakan berikut:

Akun Layanan dalam project yang sama

  1. Untuk memberikan akses menggunakan peniruan identitas akun layanan untuk akun layanan di project yang sama, lakukan hal berikut:

    1. Buka halaman Workload Identity Pool.

      Buka Workload Identity Pool

    2. Pilih Berikan akses.

    3. Pada dialog Grant access to service account, pilih Grant access using Service Account impersonation.

    4. Dalam daftar Akun layanan, pilih akun layanan untuk ditiru oleh identitas eksternal, lalu lakukan hal berikut:

    5. Untuk memilih identitas dalam kumpulan yang dapat meniru identitas akun layanan, lakukan salah satu tindakan berikut:

      • Untuk mengizinkan hanya identitas tertentu dari workload identity pool untuk meniru identitas akun layanan, pilih Hanya identitas yang cocok dengan filter.

      • Di daftar Nama atribut, pilih atribut yang ingin Anda filter.

      • Di kolom Nilai atribut, masukkan nilai atribut yang diharapkan; misalnya, jika Anda menggunakan pemetaan atribut google.subject=assertion.sub, tetapkan nama Atribut menjadi subject dan Nilai atribut menjadi nilai klaim sub dalam token yang dikeluarkan oleh penyedia identitas eksternal Anda.

    6. Untuk menyimpan konfigurasi, klik Simpan, lalu Tutup.

Akun layanan di project lain

  1. Untuk memberikan akses menggunakan peniruan akun layanan untuk akun layanan di project lain, lakukan hal berikut:

    1. Buka halaman Akun Layanan.

      Buka Akun Layanan

    2. Pilih akun layanan yang ingin Anda tirukan identitasnya.

    3. Klik Kelola akses.

    4. Klik Tambahkan akun utama.

    5. Di kolom New principal, masukkan salah satu ID akun utama berikut untuk identitas dalam kumpulan Anda yang akan meniru identitas akun layanan.

      Menurut subjek

      principal://iam.googleapis.com/projects/PROJECT_NUMBER/locations/global/workloadIdentityPools/POOL_ID/subject/SUBJECT
      

      Ganti kode berikut:

      • PROJECT_NUMBER: nomor project
      • POOL_ID: ID workload pool
      • SUBJECT: subjek individu yang dipetakan dari IdP Anda—misalnya, administrator@example.com

      Menurut grup

      principalSet://iam.googleapis.com/projects/PROJECT_NUMBER/locations/global/workloadIdentityPools/POOL_ID/group/GROUP
      

      Ganti kode berikut:

      • PROJECT_NUMBER: nomor project
      • WORKLOAD_POOL_ID: ID workload pool
      • GROUP: grup yang dipetakan dari IdP Anda—misalnya: administrator-group@example.com

      Menurut atribut

      principalSet://iam.googleapis.com/projects/PROJECT_NUMBER/locations/global/workloadIdentityPools/POOL_ID/attribute.ATTRIBUTE_NAME/ATTRIBUTE_VALUE
      

      Ganti kode berikut:

      • PROJECT_NUMBER: nomor project
      • WORKLOAD_POOL_ID: ID workload pool
      • ATTRIBUTE_NAME: salah satu atribut yang dipetakan dari IdP Anda
      • ATTRIBUTE_VALUE: nilai atribut

      Menurut kolam renang

      principalSet://iam.googleapis.com/projects/PROJECT_NUMBER/locations/global/workloadIdentityPools/POOL_ID/*
      

      Ganti kode berikut:

      • PROJECT_NUMBER: nomor project
      • WORKLOAD_POOL_ID: ID workload pool
    6. Di Select a role, pilih peran Workload Identity User (roles/iam.workloadIdentityUser).

    7. Untuk menyimpan konfigurasi, klik Simpan.

gcloud

Untuk menggunakan gcloud CLI guna memberikan peran Pemilik Workload Identity (roles/iam.workloadIdentityUser) ke identitas eksternal yang memenuhi kriteria tertentu, jalankan perintah berikut.

Menurut subjek

gcloud iam service-accounts add-iam-policy-binding SERVICE_ACCOUNT_EMAIL \
    --role=roles/iam.workloadIdentityUser \
    --member="principal://iam.googleapis.com/projects/PROJECT_NUMBER/locations/global/workloadIdentityPools/POOL_ID/subject/SUBJECT"

Menurut grup

gcloud iam service-accounts add-iam-policy-binding SERVICE_ACCOUNT_EMAIL \
    --role=roles/iam.workloadIdentityUser \
    --member="principalSet://iam.googleapis.com/projects/PROJECT_NUMBER/locations/global/workloadIdentityPools/POOL_ID/group/GROUP"

Menurut atribut

gcloud iam service-accounts add-iam-policy-binding SERVICE_ACCOUNT_EMAIL \
    --role=roles/iam.workloadIdentityUser \
    --member="principalSet://iam.googleapis.com/projects/PROJECT_NUMBER/locations/global/workloadIdentityPools/POOL_ID/attribute.ATTRIBUTE_NAME/ATTRIBUTE_VALUE"

Ganti kode berikut:

  • SERVICE_ACCOUNT_EMAIL: alamat email akun layanan
  • PROJECT_NUMBER: nomor project dari project yang berisi workload identity pool
  • POOL_ID: ID pool dari workload identity pool
  • SUBJECT: nilai yang diharapkan untuk atribut yang Anda petakan ke google.subject
  • GROUP: nilai yang diharapkan untuk atribut yang Anda petakan ke google.groups
  • ATTRIBUTE_NAME: nama atribut khusus dalam pemetaan atribut Anda
  • ATTRIBUTE_VALUE: nilai atribut kustom dalam pemetaan atribut Anda

Mendownload atau membuat konfigurasi kredensial

Library Klien Cloud dan gcloud CLI dapat otomatis memperoleh kredensial eksternal, dan menggunakan kredensial ini untuk meniru identitas akun layanan. Agar library dan alat dapat menyelesaikan proses ini, Anda harus menyediakan file konfigurasi kredensial. File ini menentukan hal berikut:

  • Tempat Anda bisa memperoleh kredensial eksternal
  • Workload identity pool dan penyedia workload identity yang akan digunakan
  • Akun layanan yang akan ditiru

Selain itu, untuk federasi sertifikat X.509, file konfigurasi sertifikat diperlukan. File ini berisi jalur ke file kunci pribadi dan sertifikat klien X.509.

Untuk membuat file konfigurasi kredensial dan sertifikat, lakukan hal berikut:

Akses resource langsung

Untuk membuat file konfigurasi kredensial dan sertifikat untuk akses resource langsung menggunakan gcloud iam workload-identity-pools create-cred-config, lakukan hal berikut:

Buat file konfigurasi kredensial dan sertifikat yang memungkinkan library memperoleh token akses menggunakan sertifikat X.509.

gcloud iam workload-identity-pools create-cred-config
    projects/PROJECT_NUMBER/locations/global/workloadIdentityPools/POOL_ID/providers/PROVIDER_ID \
    --credential-cert-path CLIENT_CERT_PATH \
    --credential-cert-private-key-path CLIENT_KEY_PATH \
    --output-file=FILEPATH.json

Ganti kode berikut:

  • PROJECT_NUMBER: Nomor project dari project yang berisi workload identity pool.
  • POOL_ID: ID workload identity pool.
  • PROVIDER_ID: ID penyedia workload identity pool.
  • CLIENT_CERT_PATH : Jalur file sertifikat klien.
  • CLIENT_KEY_PATH : Jalur file kunci pribadi sertifikat klien.
  • FILEPATH: File untuk menyimpan konfigurasi.

Menjalankan perintah ini juga akan membuat file konfigurasi sertifikat dan menyimpan file tersebut di lokasi Google Cloud CLI default:

  • Linux dan macOS: ~/.config/gcloud/certificate_config.json

  • Windows: %APPDATA%\gcloud\certificate_config.json

Peniruan akun layanan

Untuk membuat file konfigurasi kredensial dan sertifikat dengan peniruan identitas akun layanan menggunakan gcloud iam workload-identity-pools create-cred-config, lakukan hal berikut:

Buat file konfigurasi kredensial dan sertifikat yang memungkinkan library memperoleh token akses menggunakan sertifikat X.509.

gcloud iam workload-identity-pools create-cred-config \
    projects/PROJECT_NUMBER/locations/global/workloadIdentityPools/POOL_ID/providers/PROVIDER_ID \
    --service-account=SERVICE_ACCOUNT_EMAIL \
    --service-account-token-lifetime-seconds=SERVICE_ACCOUNT_TOKEN_LIFETIME \
    --credential-cert-path CLIENT_CERT_PATH \
    --credential-cert-private-key-path CLIENT_KEY_PATH \
    --output-file=FILEPATH.json

Ganti kode berikut:

  • PROJECT_NUMBER: Nomor project dari project yang berisi workload identity pool.
  • POOL_ID: ID workload identity pool.
  • PROVIDER_ID: ID penyedia workload identity pool.
  • SERVICE_ACCOUNT_EMAIL: Jika Anda menggunakan peniruan identitas akun layanan, ganti dengan alamat email akun layanan.
  • SERVICE_ACCOUNT_TOKEN_LIFETIME: Jika Anda menggunakan peniruan identitas akun layanan, masa aktif token akses akun layanan, dalam hitungan detik. Jika masa aktif tidak diberikan, default-nya adalah satu jam. Hapus tanda ini jika Anda tidak menggunakan peniruan akun layanan. Untuk menentukan masa aktif agar lebih lama dari satu jam, Anda harus mengonfigurasi batasan kebijakan organisasi constraints/iam.allowServiceAccountCredentialLifetimeExtension.
  • CLIENT_CERT_PATH : Jalur file sertifikat klien.
  • CLIENT_KEY_PATH : Jalur file kunci pribadi sertifikat klien.
  • FILEPATH: File untuk menyimpan konfigurasi.

Menjalankan perintah ini juga akan membuat file konfigurasi sertifikat dan menyimpan file tersebut di lokasi Google Cloud CLI default:

  • Linux dan macOS: ~/.config/gcloud/certificate_config.json

  • Windows: %APPDATA%\gcloud\certificate_config.json

Menggunakan konfigurasi kredensial untuk mengakses Google Cloud

Untuk mengizinkan alat dan library klien menggunakan konfigurasi kredensial Anda, lakukan hal berikut:

  1. Lakukan inisialisasi variabel lingkungan GOOGLE_APPLICATION_CREDENTIALS dan arahkan ke file konfigurasi kredensial:

    Bash

      export GOOGLE_APPLICATION_CREDENTIALS=`pwd`/FILEPATH.json
      
    dengan FILEPATH adalah jalur relatif ke file konfigurasi kredensial.

    PowerShell

      $env:GOOGLE_APPLICATION_CREDENTIALS = Resolve-Path 'FILEPATH.json'
      
    dengan FILEPATH adalah jalur relatif ke file konfigurasi kredensial.
  2. Pastikan library klien dapat menemukan file konfigurasi sertifikat. File konfigurasi sertifikat harus disimpan di lokasi Google Cloud CLI default:

    • Linux dan macOS: ~/.config/gcloud/certificate_config.json

    • Windows: %APPDATA%\gcloud\certificate_config.json

    atau ditunjuk oleh variabel lingkungan GOOGLE_API_CERTIFICATE_CONFIG.

  3. Gunakan library klien atau alat yang mendukung Workload Identity Federation dan dapat menemukan kredensial secara otomatis:

Go

Library klien untuk Go mendukung X.509 Workload Identity Federation jika menggunakan modul cloud.google.com/go/auth versi 0.8.0 atau yang lebih baru dan modul google.golang.org/api versi 0.189.0.

Untuk memeriksa versi modul yang digunakan library klien Anda, jalankan perintah berikut saat berada di direktori yang berisi file go.mod untuk modul Anda:

  go list -m cloud.google.com/go/auth
  go list -m cloud.google.com/api

Python

Library klien untuk Python mendukung Workload Identity Federation X.509 jika menggunakan paket google-auth versi 2.32.0 atau yang lebih baru

Untuk memeriksa versi paket yang digunakan library klien Anda, jalankan perintah berikut di lingkungan tempat paket diinstal:

  pip show google-auth

Untuk menentukan project ID bagi klien autentikasi, Anda dapat menetapkan variabel lingkungan GOOGLE_CLOUD_PROJECT atau mengizinkan klien untuk otomatis menemukan project ID. Untuk otomatis menemukan project ID, akun layanan dalam file konfigurasi harus memiliki peran Browser (roles/browser), atau peran dengan izin yang setara, di project Anda. Untuk mengetahui detailnya, lihat panduan pengguna untuk paket google-auth.

gcloud

Untuk melakukan autentikasi menggunakan X.509 Workload Identity Federation, gunakan perintah gcloud auth login:

  gcloud auth login --cred-file=FILEPATH.json
  

Ganti FILEPATH dengan jalur ke file konfigurasi kredensial.

Dukungan untuk X.509 Workload Identity Federation di gcloud CLI tersedia di gcloud CLI versi 488.0.0 dan versi lebih baru.

Mendapatkan token akses menggunakan permintaan biasa untuk mengakses Google Cloud

Untuk mendapatkan token akses, lakukan langkah berikut:

  1. Gunakan curl untuk melakukan pertukaran token dengan mTLS dan sertifikat klien:

    curl --key CLIENT_CERT_KEY \
    --cert CLIENT_CERT \
    --request POST 'https://sts.mtls.googleapis.com/v1/token' \
    --header "Content-Type: application/json" \
    --data-raw '{
        "subject_token_type": "urn:ietf:params:oauth:token-type:mtls",
        "grant_type": "urn:ietf:params:oauth:grant-type:token-exchange",
        "audience": "WORKLOAD_IDENTITY_POOL_URI",
        "requested_token_type": "urn:ietf:params:oauth:token-type:access_token",
        "scope": "https://www.googleapis.com/auth/cloud-platform",
    }'
    

    Ganti kode berikut:

    • CLIENT_CERT_KEY: kunci pribadi sertifikat klien
    • CLIENT_CERT: sertifikat klien
    • WORKLOAD_IDENTITY_POOL_URI: URL penyedia workload identity pool dalam format berikut:

      //iam.googleapis.com/projects/PROJECT_NUMBER/locations/global/workloadIdentityPools/POOL_ID/providers/PROVIDER_ID

  2. Gunakan token akses pembawa yang dibuat di langkah sebelumnya untuk mengakses resource Google Cloud—misalnya:

    curl -X GET 'https://storage.googleapis.com/my_object' -H "Authorization: Bearer $ACCESS_TOKEN"
    

Kuota dan batas

Tabel berikut mencantumkan kuota dan batas.

Item Kuota dan batas Catatan
Jumlah trust anchor Batas: 3 Setiap sertifikat tidak boleh melebihi 32 KB.
Jumlah intermediate certificate Batas: 10 Setiap sertifikat tidak boleh melebihi 32 KB.
Jumlah batasan nama yang diizinkan selama validasi root dan sertifikat intermediate Batas: 10
Sertifikat perantara yang memiliki informasi Subjek dan Kunci Publik Subjek yang sama Batas: 5 Batas ini berlaku untuk setiap trust store.
Kedalaman rantai sertifikat Batas: 5 Kedalaman maksimum untuk rantai sertifikat, termasuk root dan sertifikat klien.
Frekuensi sertifikat perantara dapat dievaluasi saat mencoba membuat rantai kepercayaan Batas: 100
Kunci sertifikat yang diupload dan diteruskan dari klien

Batas: Kunci RSA dapat berukuran 2048 hingga 4096 bit

Sertifikat ECDSA harus menggunakan kurva P-256 atau P-384

RSA-2048 dan P-256 direkomendasikan untuk kasus penggunaan normal, gunakan yang lain untuk praktik keamanan terbaik

Langkah selanjutnya