Pengantar identitas layanan

Halaman ini menjelaskan kedua identitas Cloud Run dan cara Cloud Run menggunakan identitas layanan untuk memanggil Library Klien Cloud. Contoh Library Klien Cloud meliputi Cloud Storage, Firestore, Cloud SQL, Pub/Sub, dan Cloud Tasks. Halaman ini ditujukan untuk admin, operator, atau developer yang mengelola kebijakan organisasi dan akses pengguna, atau siapa saja yang ingin mempelajari topik tersebut.

Identitas Cloud Run

Untuk menggunakan Cloud Run, Google Cloud mengharuskan pengguna Cloud Run dan instance Cloud Run memiliki identitas.

  • Identitas pengguna Cloud Run disebut sebagai akun deployer Cloud Run. Saat mengelola revisi atau tugas, Anda menggunakan identitas ini untuk membuat permintaan ke Cloud Run Admin API.
  • Identitas instance Cloud Run disebut sebagai identitas layanan Cloud Run. Saat layanan atau tugas Cloud Run berinteraksi dengan Library Klien Cloud, Anda menggunakan identitas ini untuk membuat permintaan ke Google Cloud API dari Cloud Run.

Untuk mengakses dan membuat permintaan ke Google Cloud API, setiap identitas harus memiliki izin yang sesuai yang diberikan kepadanya di Identity and Access Management (IAM).

Memanggil Cloud Run Admin API dengan akun deployer

Anda dapat memanggil Cloud Run Admin API dari Cloud Run menggunakan akun deployer Cloud Run. Akun deployer dapat berupa akun pengguna atau akun layanan, dan mewakili akun yang digunakan untuk login ke lingkungan Google Cloud.

Saat akun deployer menggunakan Cloud Run, IAM akan memeriksa apakah akun deployer memiliki izin yang diperlukan untuk menjalankan operasi Cloud Run. Diagram berikut menunjukkan cara akun pengguna memanggil Cloud Run Admin API untuk men-deploy revisi baru dari Konsol Google Cloud:

Panggil Cloud Run Admin API dari Konsol Google Cloud.
Gambar 1. Pengguna menggunakan konsol Google Cloud untuk men-deploy revisi baru dengan mengirim permintaan menggunakan token akses ke Cloud Run Admin API. IAM menggunakan token akses tersebut untuk memverifikasi bahwa akun pengguna telah diautentikasi untuk mengakses Cloud Run Admin API sebelum menjalankan operasi.

Memanggil Google Cloud API dengan identitas layanan

Saat instance Cloud Run berinteraksi dengan Library Klien Cloud, baik melalui kode aplikasi maupun fitur bawaan, seperti integrasi Cloud Run atau penginstalan volume Cloud Storage, lingkungan Google Cloud menggunakan Kredensial Default Aplikasi (ADC) untuk secara otomatis mendeteksi apakah identitas layanan Cloud Run diautentikasi untuk menjalankan operasi API. Identitas layanan Cloud Run adalah akun layanan yang ditetapkan sebagai identitas instance Cloud Run saat Anda men-deploy revisi atau menjalankan tugas.

Akun layanan yang digunakan sebagai akun deployer hanya akan digunakan sebagai identitas layanan jika Anda mengonfigurasi akun layanan yang sama di konfigurasi Cloud Run.

Bagian selanjutnya dari panduan ini menjelaskan cara layanan atau tugas Cloud Run menggunakan identitas layanan untuk memanggil dan mengakses layanan dan API Google. Untuk mengetahui informasi selengkapnya tentang konfigurasi identitas layanan, lihat halaman konfigurasi identitas layanan untuk layanan dan tugas.

Jenis akun layanan untuk identitas layanan

Saat instance Cloud Run melakukan panggilan ke Google Cloud API untuk menjalankan operasi yang diperlukan, Cloud Run otomatis menggunakan akun layanan sebagai identitas layanan. Dua jenis akun layanan yang dapat digunakan sebagai identitas layanan adalah sebagai berikut:

  • Akun layanan yang dikelola pengguna (direkomendasikan): Anda membuat akun layanan ini secara manual dan menentukan kumpulan izin paling minimal yang diperlukan akun layanan untuk mengakses resource Google Cloud tertentu. Akun layanan yang dikelola pengguna mengikuti format SERVICE_ACCOUNT_NAME@PROJECT_ID.iam.gserviceaccount.com.
  • Akun layanan default Compute Engine: Cloud Run otomatis menyediakan akun layanan default Compute Engine sebagai identitas layanan default. Akun layanan default Compute Engine mengikuti format PROJECT_NUMBER-compute@developer.gserviceaccount.com.

Menghindari akun layanan default saat mengonfigurasi identitas layanan

Secara default, akun layanan default Compute Engine akan otomatis dibuat. Jika Anda tidak menentukan akun layanan saat layanan atau tugas Cloud Run dibuat, Cloud Run akan menggunakan akun layanan ini.

Tujuan akun layanan default adalah untuk membantu instance Cloud Run Anda aktif dan berjalan tanpa error izin. Akun utama ini diberi peran Editor, yang memberikan izin baca dan tulis pada semua resource dalam project Google Cloud Anda. Untuk mengikuti prinsip hak istimewa terendah, Google merekomendasikan agar Anda membuat akun layanan baru dan memberi akun layanan dengan kumpulan izin paling minimal untuk mengakses resource Google Cloud tertentu.

Cara kerja identitas layanan

Saat kode Anda memanggil atau membuat permintaan ke Library Klien Cloud, hal berikut akan terjadi:

  1. Library klien mendeteksi bahwa permintaan dibuat ke Google Cloud API atau Library Klien Cloud, dan meminta token akses OAuth 2.0 untuk identitas layanan dari server metadata instance.
  2. Server metadata instance menyediakan token akses IAM untuk akun layanan yang dikonfigurasi sebagai identitas layanan.
  3. Permintaan ke Google Cloud API dikirim dengan token akses OAuth 2.0.
  4. IAM memverifikasi identitas layanan yang dirujuk dalam token akses untuk izin yang diperlukan, dan memeriksa binding kebijakan sebelum meneruskan panggilan ke endpoint API.
  5. Google Cloud API menjalankan operasi tersebut.
Panggil Google Cloud API dari Cloud Run.
Gambar 1. Cloud Run membuat token akses dari server metadata, dan IAM menggunakan token akses tersebut untuk memverifikasi bahwa identitas layanan Cloud Run yang ditetapkan diautentikasi untuk mengakses Google Cloud API.

Membuat token akses untuk permintaan Cloud Run guna memanggil API Google Cloud

Jika kode Cloud Run Anda menggunakan Library Klien Cloud, Anda harus mengonfigurasi identitas layanan di Cloud Run dengan menetapkan akun layanan pada saat deployment atau eksekusi. Hal ini memungkinkan library secara otomatis memperoleh token akses untuk mengautentikasi permintaan kode Anda. Untuk menetapkan akun layanan sebagai identitas layanan, lihat panduan berikut:

Namun, jika menggunakan kode kustom Anda sendiri atau perlu membuat permintaan secara terprogram, Anda dapat langsung menggunakan server metadata untuk mengambil token identitas dan token akses secara manual yang dijelaskan di bagian berikutnya. Perlu diperhatikan bahwa Anda tidak dapat membuat kueri ke server ini langsung dari mesin lokal karena server metadata hanya tersedia untuk workload yang berjalan di Google Cloud.

Mengambil ID dan token akses menggunakan server metadata

Dua jenis token yang dapat Anda ambil dengan server metadata adalah sebagai berikut:

Untuk mengambil token, ikuti petunjuk di tab yang sesuai dengan jenis token yang Anda gunakan:

Token akses

Misalnya, jika Anda ingin membuat topik Pub/Sub, gunakan metode projects.topics.create.

  1. Gunakan Server Metadata Compute untuk mengambil token akses:

    curl "http://metadata.google.internal/computeMetadata/v1/instance/service-accounts/default/token" \
        --header "Metadata-Flavor: Google"
    

    Endpoint ini menampilkan respons JSON dengan atribut access_token.

  2. Dalam permintaan protokol HTTP, permintaan tersebut harus diautentikasi dengan token akses di header Authorization:

    PUT https://pubsub.googleapis.com/v1/projects/PROJECT_ID/topics/TOPIC_ID
    Authorization: Bearer ACCESS_TOKEN
    

    Dengan keterangan:

    • PROJECT_ID adalah project ID Anda.
    • TOPIC_ID adalah topic ID Anda.
    • ACCESS_TOKEN adalah token akses yang Anda ambil di langkah sebelumnya.

    Respons:

    {
        "name": "projects/PROJECT_ID/topics/TOPIC_ID"
    }
    

Token ID

Gunakan Server Metadata Compute untuk mengambil token identitas dengan audiens tertentu:

curl "http://metadata.google.internal/computeMetadata/v1/instance/service-accounts/default/identity?audience=AUDIENCE" \
    --header "Metadata-Flavor: Google"

Dengan AUDIENCE adalah Audiens JWT yang diminta.

Untuk layanan Cloud Run, audiens harus berupa URL layanan yang Anda panggil atau audiens kustom, seperti domain kustom, yang dikonfigurasi untuk layanan.

https://service.domain.com

Resource lainnya dapat berupa Client ID OAuth dari resource yang dilindungi IAP:

1234567890.apps.googleusercontent.com

Langkah berikutnya