Melakukan autentikasi dengan akun layanan di project

Akun layanan adalah akun yang digunakan oleh workload atau layanan untuk menggunakan resource secara terprogram dan mengakses layanan mikro dengan aman. Akun layanan adalah jenis identitas khusus yang digunakan oleh aplikasi atau workload, bukan oleh pengguna. Mirip dengan akun pengguna, akun layanan dapat diberi izin dan peran, tetapi tidak dapat login seperti pengguna manusia.

Akun layanan berguna untuk mengelola infrastruktur appliance air-gapped Google Distributed Cloud (GDC), seperti:

  • Workload dan layanan appliance air-gapped GDC internal untuk mengakses antarmuka pemrograman aplikasi (API) bidang kontrol appliance air-gapped GDC dengan aman.
  • Workload pelanggan di appliance air-gapped GDC untuk mengakses layanan appliance air-gapped GDC dan melakukan panggilan antarmuka pemrograman aplikasi (API) yang diotorisasi.
  • Workload eksternal untuk digabungkan dengan appliance air-gapped GDC.
  • Layanan appliance air-gapped GDC atau pengontrol sistem untuk mengakses resource pelanggan dengan aman. Misalnya, akun layanan dapat mengelola alur kerja autentikasi dan otorisasi tempat pengontrol layanan yang berjalan di cluster Kubernetes bare metal harus menjalankan workload yang dikelola oleh pelanggan.

Mengelola identitas layanan melibatkan identitas layanan (diwakili oleh resource ProjectServiceAccount) dan kredensial terkait (pasangan kunci publik dan pribadi). Anda dapat mengelola akun menggunakan konsol GDC, gdcloud CLI, atau API. Dengan gdcloud CLI, fitur identitas layanan dibangun di atas ProjectServiceAccount API.

Sebelum memulai

Untuk menyelesaikan tugas dalam dokumen ini, Anda harus memiliki project. Untuk mempelajari cara membuat project, lihat Membuat project.

Anda juga harus memiliki izin yang diperlukan dan menyiapkan lingkungan.

Meminta peran IAM

Untuk membuat, memperbarui, dan menghapus identitas layanan dalam project, hubungi Admin IAM Organisasi atau Admin IAM Project Anda untuk meminta peran Admin IAM Project (project-iam-admin).

Admin IAM Organisasi dapat memberikan peran ini untuk project apa pun dalam organisasi. Admin IAM Project dapat memberikan peran ini dalam cakupan project tertentu.

Menyiapkan lingkungan

Untuk menggunakan alat command line guna mengelola identitas layanan, selesaikan penyiapan berikut:

Membuat identitas layanan

Pengguna yang memiliki akses ke akun layanan dapat mengakses semua akun layanan dalam project.

Untuk membuat identitas layanan dalam project, gunakan konsol GDC, gdcloud CLI, atau API.

Konsol

  1. Login ke konsol GDC.
  2. Di menu navigasi, pilih Identity & Access > Service identities.
  3. Klik Create Service Identity. Halaman Service Identity details akan terbuka.
  4. Di kolom Service identity name, masukkan nama untuk identitas layanan Anda. Contoh: Test service identity.
  5. Klik Create.

gdcloud

Buat identitas layanan:

gdcloud iam service-accounts create NAME \
        --project=PROJECT

Ganti nilai berikut:

  • NAME: nama ProjectServiceAccount. Nama harus unik dalam namespace project.
  • PROJECT: project tempat identitas layanan akan dibuat. Jika gdcloud init sudah ditetapkan, hapus flag --project.

Perintah ini akan membuat ProjectServiceAccount di namespace project.

API

  1. Buat file YAML resource kustom ProjectServiceAccount, seperti my-project-sa.yaml:

    apiVersion: resourcemanager.gdc.goog/v1
    kind: ProjectServiceAccount
    metadata:
      name: NAME
      namespace: PROJECT
    spec:
      keys:
      - algorithm: ALGORITHM
        id: KEY_ID
        key: BASE64_ENCODED_KEY
        validAfter: "START_TIME"
        validBefore: "EXPIRATION_TIME"
    

    Ganti variabel berikut:

    • NAME: nama resource ProjectServiceAccount. Nama harus unik dalam namespace project.
    • PROJECT: project tempat identitas layanan akan dibuat.
    • ALGORITHM: algoritma kunci. Hanya kunci ES256 yang didukung.
    • KEY_ID: ID unik kunci. ID ini digunakan untuk menentukan kunci mana yang akan diverifikasi.
    • BASE64_ENCODED_KEY: kunci publik yang dienkode base64 dalam format PEM untuk diverifikasi. Kunci pribadi yang digunakan untuk membuat kunci publik ini diharapkan dalam format ECDSA P256 PEM.
    • START_TIME: waktu mulai saat kunci menjadi valid, seperti 2025-02-07T00:59:34Z.
    • EXPIRATION_TIME: waktu habis masa berlaku kunci, seperti 2026-02-07T00:59:34Z.
  2. Terapkan resource kustom ProjectServiceAccount ke server API pengelolaan:

    kubectl --kubeconfig MANAGEMENT_API_SERVER_KUBECONFIG apply -f my-project-sa.yaml
    

    Ganti variabel MANAGEMENT_API_SERVER_KUBECONFIG dengan jalur ke file kubeconfig untuk server API pengelolaan.

Melihat identitas layanan

Untuk melihat daftar akun layanan dalam project, gunakan konsol GDC atau gdcloud CLI.

Konsol

  1. Login ke konsol GDC.
  2. Pilih project.
  3. Di menu navigasi, klik Identity & Access > Service Identities untuk melihat daftar akun layanan untuk project.

gdcloud

Cantumkan akun layanan dalam project:

gdcloud iam service-accounts list \
    --project=PROJECT

Menetapkan binding peran ke identitas layanan

Gunakan konsol GDC atau gdcloud CLI untuk menetapkan binding peran.

Konsol

  1. Login ke konsol GDC.
  2. Pilih project.
  3. Di menu navigasi, pilih Identity & Access > Access.
  4. Di daftar Member, klik Add member. Anda akan melihat halaman Users and roles.
  5. Pilih Service identity di daftar Member type.
  6. Di daftar Service identity, pilih identitas layanan yang ingin Anda tetapkan binding perannya.
  7. Di daftar Role, pilih peran yang ingin Anda tetapkan ke identitas layanan, seperti Backup Creator.
  8. Opsional: Untuk menambahkan peran lain, klik Tambahkan peran lain. Pilih peran tambahan.
  9. Klik Add.

gdcloud

Perintah ini akan membuat dan memberi nama binding peran project untuk mengikat peran yang ditentukan dengan ProjectServiceAccount:

gdcloud iam service-accounts add-iam-policy-binding \
    --project=PROJECT \
    --role=ROLE \
    --iam-account=NAME

Ganti nilai berikut:

  • PROJECT: project tempat binding peran akan dibuat. Jika gdcloud init sudah ditetapkan, Anda dapat menghapus --project flag.
  • ROLE: peran yang telah ditetapkan sebelumnya untuk ditetapkan ke ProjectServiceAccount. Tentukan peran dalam format Role/name dengan Role adalah jenis Kubernetes, seperti Role atau ProjectRole, dan name adalah nama peran yang telah ditetapkan sebelumnya. Misalnya, untuk menetapkan peran Project Viewer, tetapkan peran ke Role/project-viewer.
  • NAME: nama identitas layanan yang akan digunakan.

Menghapus identitas layanan

Untuk menghapus akun layanan dalam project, gunakan konsol GDC atau gdcloud CLI.

Setelah Anda menghapus identitas layanan, aplikasi tidak akan memiliki akses ke resource project melalui identitas layanan tersebut.

Konsol

  1. Login ke konsol GDC.
  2. Di menu navigasi, pilih Identity & Access > Service Identities.
  3. Pilih kotak centang identitas layanan yang ingin Anda hapus.
  4. Klik Delete.
  5. Dialog konfirmasi akan muncul. Di kolom Confirm by typing the following below, masukkan remove.
  6. Klik Delete.

gdcloud

Jalankan perintah berikut untuk menghapus identitas layanan:

gdcloud iam service-accounts delete NAME \
    --project=PROJECT

Membuat dan menambahkan pasangan kunci

Untuk membuat dan menambahkan pasangan kunci dalam project, gunakan konsol GDC, gdcloud CLI, atau API.

Konsol

  1. Login ke konsol GDC.
  2. Di menu navigasi, pilih Identity & Access > Service Identities.
  3. Klik nama identitas layanan yang ingin Anda tambahkan di kunci.
  4. Klik Create New Key.
  5. Kunci baru akan muncul di daftar Keys, dan dialog akan mengonfirmasi bahwa Anda telah berhasil membuat kunci.

gdcloud

Perintah gdcloud akan membuat file JSON kredensial default aplikasi dan pasangan kunci publik dan pribadi:

gdcloud iam service-accounts keys create APPLICATION_DEFAULT_CREDENTIALS_FILENAME \
    --project=PROJECT \
    --iam-account=NAME \
    --ca-cert-path=CA_CERTIFICATE_PATH

Ganti nilai berikut:

  • APPLICATION_DEFAULT_CREDENTIALS_FILENAME: nama file JSON.
  • PROJECT : memilih project tempat kunci akan dibuat. Jika gdcloud init sudah ditetapkan, Anda dapat menghapus flag --project.
  • NAME: nama identitas layanan yang akan ditambahkan kuncinya.
  • CA_CERTIFICATE_PATH: Opsional: jalur sertifikat otoritas sertifikat (CA) untuk memverifikasi endpoint autentikasi. Jika Anda tidak menentukan jalur ini, sertifikat CA sistem akan digunakan. Anda harus menginstal CA di sertifikat CA sistem.

Appliance air-gapped GDC menambahkan kunci publik ke kunci ProjectServiceAccount yang Anda gunakan untuk memverifikasi token web JSON (JWT) yang ditandatangani kunci pribadi. Kunci pribadi akan ditulis ke file JSON kredensial default aplikasi.

Contoh berikut menunjukkan file JSON kredensial default aplikasi:

{
"type": "gdch_service_account",
"format_version": "1",
"project": "project_name",
"private_key_id": "abcdef1234567890",
"private_key": "-----BEGIN PRIVATE KEY-----\nETC\n-----END PRIVATE KEY-----\n",
"name": "service_identity_name",
"ca_cert_path": "service_identity_name",
"token_uri": "https://service-identity.<Domain>/authenticate"
}

Contoh ini menggunakan nilai berikut:

  • project: namespace project dalam organisasi.
  • private_key_id: ID yang ditetapkan ke kunci.
  • private_key: kunci pribadi ECDSA P256 dalam format PEM yang dibuat oleh CLI.
  • name: nama identitas layanan.
  • token_uri: alamat endpoint autentikasi.

API

  1. Buat pasangan kunci publik dan pribadi. Perintah berikut menggunakan openssl sebagai contoh, yang merupakan alat umum untuk tujuan ini.

    openssl ecparam -name prime256v1 -genkey -noout -out "key.pem"
    openssl ec -in "key.pem" -pubout > "pub.pem"
    
  2. Enkode base64 kunci publik dan ambil ID kuncinya:

    KEY_ID=$(openssl pkey -in key.pem -pubout -outform der | openssl dgst -sha256 | sed 's/^.* //')
    BASE64_ENCODED_KEY=$(cat pub.pem | base64)
    
  3. Buat atau perbarui file YAML resource kustom ProjectServiceAccount, termasuk informasi kunci yang dihasilkan dari langkah sebelumnya:

    apiVersion: resourcemanager.gdc.goog/v1
    kind: ProjectServiceAccount
    metadata:
      name: NAME
      namespace: PROJECT
    spec:
      keys:
      - algorithm: ALGORITHM
        id: KEY_ID
        key: BASE64_ENCODED_KEY
        validAfter: "START_TIME"
        validBefore: "EXPIRATION_TIME"
    

    Ganti variabel berikut:

    • NAME: nama resource ProjectServiceAccount. Nama harus unik dalam namespace project.
    • PROJECT: project tempat Anda membuat kunci.
    • ALGORITHM: algoritma kunci. Hanya kunci ES256 yang didukung.
    • KEY_ID: ID unik kunci. ID ini digunakan untuk menentukan kunci mana yang akan diverifikasi.
    • BASE64_ENCODED_KEY: kunci publik yang dienkode base64 dalam format PEM untuk diverifikasi. Kunci pribadi yang digunakan untuk membuat kunci publik ini diharapkan dalam format ECDSA P256 PEM.
    • START_TIME: waktu mulai saat kunci menjadi valid, seperti 2025-02-07T00:59:34Z.
    • EXPIRATION_TIME: waktu habis masa berlaku kunci, seperti 2026-02-07T00:59:34Z.
  4. Terapkan resource kustom ProjectServiceAccount ke server API pengelolaan:

    kubectl --kubeconfig MANAGEMENT_API_SERVER_KUBECONFIG apply -f my-project-sa.yaml
    

    Ganti variabel MANAGEMENT_API_SERVER_KUBECONFIG dengan jalur ke file kubeconfig untuk server API pengelolaan.

  5. Buat file JSON kredensial default aplikasi yang berisi kunci pribadi. Pastikan variabel KEY_ID dalam file JSON ditetapkan ke nilai yang sama dengan variabel KEY_ID yang Anda gunakan dalam spesifikasi ProjectServiceAccount.

    cat <<EOF > "key_file.json"
    {
      "format_version": "1",
      "name": "NAME",
      "private_key": "$(tr '\n' '\t' < "key.pem" | sed 's/\t/\\n/g')",
      "private_key_id": "KEY_ID",
      "project": "PROJECT",
      "token_uri": "AUTH_URL",
      "type": "gdch_service_account"
    }
    EOF
    

    Ganti variabel berikut:

    • NAME: nama identitas layanan.
    • KEY_ID: ID unik kunci. ID ini digunakan untuk menentukan kunci mana yang akan diverifikasi, dan harus cocok dengan nilai KEY_ID yang digunakan dalam spesifikasi ProjectServiceAccount.
    • PROJECT: namespace project dalam organisasi.
    • AUTH_URL: alamat endpoint autentikasi.
  6. Tambahkan pasangan kunci ke project Anda dengan mengaktifkan akun layanan:

    gdcloud auth activate-service-account –-key-file=key_file.json
    

Mencantumkan kredensial untuk akun layanan

Cantumkan kunci publik dari ProjectServiceAccount tertentu dalam project:

gdcloud iam service-accounts keys list \
    --project=PROJECT \
    --iam-account=NAME

Menghapus kredensial

Untuk menghapus kunci publik, gunakan konsol GDC atau gdcloud CLI.

Konsol

  1. Login ke konsol GDC.
  2. Di menu navigasi, pilih Identity & Access > Service Identities.
  3. Klik nama identitas layanan yang memiliki kunci yang ingin Anda hapus.
  4. Klik Delete.
  5. Di dialog konfirmasi, klik Delete.

gdcloud

Hapus kunci publik dengan ID kunci dari ProjectServiceAccount tertentu dalam project:

gdcloud iam service-accounts keys delete KEY_ID \
    --project=PROJECT \
    --iam-account=NAME

Mengotorisasi akun layanan menggunakan kunci akun layanan

Anda dapat menggunakan perintah gdcloud untuk mengaktifkan akun layanan menggunakan kunci akun layanan:

  1. Buat file kunci akun layanan, jika Anda belum memilikinya.

  2. Aktifkan akun layanan dengan menjalankan perintah berikut:

    gdcloud auth activate-service-account --key-file=KEY_FILE
    

    Ganti KEY_FILE dengan jalur ke file kunci akun layanan.

    Setelah mengaktifkan akun layanan, gdcloud akan menggunakan kredensial akun layanan untuk perintah berikutnya, bukan kredensial pengguna Anda.