Identitas layanan Cloud Run memungkinkan workload yang berjalan memanggil Google Cloud API melalui Library Klien Cloud menggunakan token akses terkelola. Cloud Run memisahkan akses di dua identitas: akun deployer untuk mengelola resource dan identitas layanan untuk permintaan runtime ke layananGoogle Cloud dengan Library Klien Cloud, seperti Cloud Storage, Firestore, Cloud SQL, Pub/Sub, dan Cloud Tasks.
Dokumen ini ditujukan untuk administrator, operator, dan developer yang mengelola kebijakan organisasi dan akses pengguna untuk workload Cloud Run.
Identitas Cloud Run
Untuk menggunakan Cloud Run, Google Cloud memerlukan dua jenis identitas dengan izin yang sesuai:
- Akun deployer Cloud Run: Identitas (baik akun pengguna maupun akun layanan) yang Anda gunakan untuk men-deploy dan mengelola resource Cloud Run dengan membuat permintaan ke Cloud Run Admin API.
- Identitas layanan Cloud Run: Identitas (akun layanan) yang digunakan instance Cloud Run. Saat kode Cloud Run yang Anda tulis berinteraksi dengan Library Klien Cloud, atau memanggil layanan Cloud Run lain untuk komunikasi antar-layanan, Anda menggunakan identitas ini untuk membuat permintaan dari Cloud Run ke APIGoogle Cloud atau layanan Cloud Run lainnya.
Untuk mengakses dan membuat permintaan ke Google Cloud API atau berkomunikasi antar-layanan, 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 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 login ke lingkungan Google Cloud .
Saat akun deployer menggunakan Cloud Run, IAM akan memeriksa apakah akun deployer memiliki izin yang diperlukan untuk melakukan operasi Cloud Run. Diagram berikut menunjukkan cara akun pengguna memanggil Cloud Run Admin API untuk men-deploy revisi baru dari konsolGoogle Cloud :
Memanggil API Google Cloud dengan identitas layanan
Saat instance Cloud Run berinteraksi dengan layanan Cloud Run lain yang diautentikasi IAM, atau memanggil Library Klien Cloud melalui kode aplikasi atau fitur bawaan seperti integrasi Cloud Run atau pemasangan volume Cloud Storage, lingkungan Google Cloud menggunakan Kredensial Default Aplikasi (ADC) untuk otomatis mendeteksi apakah identitas layanan Cloud Run diautentikasi untuk melakukan 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 dalam konfigurasi Cloud Run Anda.
Bagian selanjutnya dari panduan ini menjelaskan cara resource Cloud Run menggunakan identitas layanan untuk memanggil dan mengakses layanan serta API Google. Untuk mengetahui informasi selengkapnya tentang konfigurasi identitas layanan, lihat halaman konfigurasi identitas layanan untuk layanan, tugas, dan worker pool.
Jenis akun layanan untuk identitas layanan
Saat instance Cloud Run Anda melakukan panggilan ke API Google Cloud untuk melakukan operasi yang diperlukan, Cloud Run akan 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.. - Akun layanan default Compute Engine: Cloud Run
secara otomatis menyediakan akun layanan default Compute Engine sebagai
identitas layanan default. Akun layanan default Compute Engine mengikuti format
PROJECT_NUMBER-compute@.
Menghindari akun layanan default saat mengonfigurasi identitas layanan
Secara default, akun layanan default Compute Engine dibuat secara otomatis. Jika Anda tidak menentukan akun layanan saat resource Cloud Run dibuat, Cloud Run akan menggunakan akun layanan ini.
Bergantung pada konfigurasi kebijakan organisasi Anda, akun layanan default mungkin
secara otomatis diberi peran Editor di project
Anda. Sebaiknya Anda menonaktifkan pemberian peran otomatis dengan
menerapkan batasan kebijakan organisasi
iam.automaticIamGrantsForDefaultServiceAccounts. Jika Anda membuat organisasi setelah 3 Mei 2024, batasan ini diterapkan secara default.
Jika Anda menonaktifkan pemberian peran otomatis, Anda harus menentukan peran mana yang akan diberikan ke akun layanan default, lalu memberikan peran tersebut sendiri.
Jika akun layanan default sudah memiliki peran Editor, sebaiknya ganti peran Editor dengan peran yang kurang permisif.
Cara kerja identitas layanan
Saat kode Anda menggunakan Library Klien Cloud yang membuat permintaan ke Google Cloud API, hal berikut akan terjadi:
- Library klien meminta token akses OAuth 2.0 untuk identitas layanan dari server metadata instance.
- Server metadata instance menyediakan token akses IAM untuk akun layanan yang dikonfigurasi sebagai identitas layanan.
- Permintaan ke Google Cloud API dikirim dengan token akses OAuth 2.0.
- IAM memverifikasi identitas layanan yang direferensikan dalam token akses untuk izin yang diperlukan, dan memeriksa binding kebijakan sebelum meneruskan panggilan ke endpoint API.
- Google Cloud API menjalankan operasi.
Membuat token akses untuk permintaan Cloud Run guna memanggil API Google Cloud
Jika kode Cloud Run Anda menggunakan Library Klien Cloud, Anda mengonfigurasi identitas layanan di Cloud Run dengan menetapkan akun layanan saat deployment atau eksekusi. Dengan demikian, library dapat otomatis memperoleh token akses untuk mengautentikasi permintaan kode Anda. Jika kode Cloud Run Anda berkomunikasi dengan layanan Cloud Run terautentikasi lainnya, Anda harus menambahkan token akses ke permintaan Anda.
Untuk menetapkan akun layanan sebagai identitas layanan, lihat panduan berikut:
- Mengonfigurasi identitas layanan untuk layanan
- Mengonfigurasi identitas layanan untuk tugas
- Mengonfigurasi identitas layanan untuk worker pool
Namun, jika Anda menggunakan kode kustom sendiri atau perlu membuat permintaan secara terprogram, Anda dapat menggunakan server metadata secara langsung untuk mengambil token identitas dan token akses secara manual yang dijelaskan di bagian berikutnya. Perlu diperhatikan bahwa Anda tidak dapat membuat kueri server ini langsung dari mesin lokal Anda karena server metadata hanya tersedia untuk workload yang berjalan diGoogle Cloud.
Mengambil token ID dan akses menggunakan server metadata
Dua jenis token yang dapat Anda ambil dengan server metadata adalah sebagai berikut:
- Token akses OAuth 2.0, yang digunakan untuk memanggil sebagian besar Library Klien Google API.
- Token ID, yang digunakan untuk memanggil layanan Cloud Run lain atau untuk memanggil layanan apa pun guna memvalidasi token ID.
Untuk mengambil token, ikuti petunjuk di tab yang sesuai untuk jenis token yang Anda gunakan:
Token akses
Misalnya, jika Anda ingin membuat topik Pub/Sub, gunakan metode
projects.topics.create.
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.Dalam permintaan protokol HTTP, permintaan tersebut harus diautentikasi dengan token akses pada header
Authorization:PUT https://pubsub.googleapis.com/v1/projects/
PROJECT_ID/topics/TOPIC_IDAuthorization: BearerACCESS_TOKENDengan:
PROJECT_IDadalah project ID Anda.TOPIC_IDadalah topic ID Anda.ACCESS_TOKENadalah token akses yang Anda ambil pada 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 tersebut.
https://service.domain.com
Resource lainnya dapat berupa Client ID OAuth dari resource yang dilindungi IAP:
1234567890.apps.googleusercontent.com
Langkah berikutnya
- Konfigurasikan identitas layanan untuk layanan, tugas, atau worker pool.
- Pelajari cara mengelola akses atau mengautentikasi developer, layanan, dan pengguna akhir ke layanan Anda.
- Untuk panduan menyeluruh terkait aplikasi yang menggunakan identitas layanan untuk meminimalkan risiko layanan, ikuti tutorial mengamankan layanan Cloud Run.