Identitas fungsi (generasi ke-1)
Untuk keamanan, sebagian besar interaksi antara entity di Google Cloud mengharuskan setiap entity memiliki identitas yang dapat diverifikasi, yang diamankan oleh beberapa jenis secret, seperti sandi atau kunci. Sama seperti entity lain yang memerlukan identitas untuk mengakses fungsi Cloud Run, fungsi itu sendiri sering kali memerlukan akses ke resource lain di Google Cloud untuk melakukan pekerjaannya. Setiap fungsi dikaitkan dengan akun layanan yang berfungsi sebagai identitasnya saat fungsi tersebut mengakses resource lain. Akun layanan yang digunakan fungsi sebagai identitasnya juga dikenal sebagai akun layanan runtime-nya.
Untuk penggunaan produksi, Google merekomendasikan agar Anda memberi setiap fungsi identitas khusus dengan menetapkan akun layanan yang dikelola pengguna untuknya. Akun layanan yang dikelola pengguna memungkinkan Anda mengontrol akses dengan memberikan serangkaian izin minimum menggunakan Identity and Access Management.
Akun layanan runtime
Kecuali Anda menentukan akun layanan runtime yang berbeda saat men-deploy fungsi, Cloud Run Functions menggunakan akun layanan default sebagai identitasnya untuk eksekusi fungsi:
Cloud Run Functions menggunakan akun layanan default App Engine,
PROJECT_ID@appspot.gserviceaccount.com.Perlu diperhatikan bahwa nomor project berbeda dengan project ID dan nama project. Anda dapat menemukan nomor project di halaman Dasbor konsol Google Cloud .
Akun layanan default ini memiliki peran Editor, sehingga memiliki akses luas ke banyak layanan Google Cloud . Meskipun ini adalah cara tercepat untuk mengembangkan fungsi, Google merekomendasikan penggunaan akun layanan default hanya untuk pengujian dan pengembangan. Untuk produksi, Anda harus memberi akun layanan runtime hanya kumpulan izin minimum yang diperlukan untuk mencapai sasarannya.
Untuk mengamankan fungsi Anda dalam produksi:
Mengubah izin pada akun layanan runtime default
Konsol
Buka halaman IAM di konsol Google Cloud :
Pilih App Engine default service account atau Default compute service account dari tabel.
Klik ikon pensil di sisi kanan baris untuk menampilkan tab Edit permissions.
Tambahkan atau hapus peran di menu drop-down Role untuk memberikan akses hak istimewa terendah.
Klik Save.
gcloud
Hapus peran Editor, lalu gunakan
perintah gcloud projects add-iam-policy-binding untuk menambahkan peran baru:
# Remove the Editor role gcloud projects remove-iam-policy-binding PROJECT_ID \ --member="SERVICE_ACCOUNT_EMAIL" \ --role="roles/editor" # Add the desired role gcloud projects add-iam-policy-binding PROJECT_ID \ --member="SERVICE_ACCOUNT_EMAIL" \ --role="ROLE"
Dengan PROJECT_ID sebagai project ID dari project
yang Anda gunakan, SERVICE_ACCOUNT_EMAIL sebagai alamat
email akun layanan runtime default seperti yang ditunjukkan sebelumnya di
Akun layanan runtime, dan
ROLE sebagai peran baru yang akan ditetapkan ke akun
layanan runtime default.
Menggunakan akun layanan individual untuk fungsi Anda
Untuk memberi Anda fleksibilitas yang lebih besar dalam mengontrol akses untuk fungsi Anda, Anda dapat memberi masing-masing fungsi akun layanan yang dikelola penggunanya sendiri.
- Buat akun layanan Anda. Catat namanya.
- Berikan peran yang sesuai, berdasarkan resource yang perlu diakses fungsi untuk melakukan pekerjaannya.
Jika akun layanan dan fungsi berada di project yang berbeda, dari project tempat akun layanan berada:
- Konfigurasikan akun layanan agar dapat berfungsi di seluruh project.
Berikan peran Service Account Token Creator (
roles/iam.serviceAccountTokenCreator) ke Agen Layanan Cloud Run Functions (service-PROJECT_NUMBER@gcf-admin-robot.iam.gserviceaccount.com), denganPROJECTyang mengacu pada project tempat fungsi berada. Agen Layanan Cloud Run Functions mengelola akses lintas project untuk akun layanan Anda.Berikan izin
iam.serviceaccounts.actAske agen layanan Cloud Run Functions di akun layanan dari project yang berbeda.
Beri akun layanan ke akses resource. Metode untuk melakukannya bergantung pada jenis resource.
Hubungkan akun layanan dengan fungsi Anda. Anda dapat melakukannya pada waktu deployment atau dengan memperbarui fungsi yang di-deploy sebelumnya.
Menambahkan akun layanan yang dikelola pengguna saat deployment
Konsol
Buka konsol Google Cloud :
Tentukan dan konfigurasikan fungsi sesuai keinginan Anda.
Klik Runtime, build... untuk menampilkan setelan tambahan.
Pilih tab Runtime.
Klik menu dropdown Service account dan pilih akun layanan yang diinginkan.
Klik Next dan Deploy.
gcloud
Saat men-deploy fungsi menggunakan gcloud functions deploy, tambahkan
flag --service-account. Contoh:
gcloud functions deploy --no-gen2 FUNCTION_NAME --service-account SERVICE_ACCOUNT_EMAIL
dengan FUNCTION_NAME sebagai nama fungsi Anda, dan
SERVICE_ACCOUNT_EMAIL sebagai email akun
layanan.
Memperbarui akun layanan dari fungsi yang sudah ada
Anda dapat memperbarui akun layanan runtime dari fungsi yang sudah ada.
Konsol
Buka konsol Google Cloud :
Klik nama fungsi yang diinginkan untuk membuka halaman detailnya.
Klik pensil Edit di bagian atas halaman detail untuk mengedit fungsi.
Klik Runtime, build... untuk menampilkan setelan tambahan.
Pilih tab Runtime.
Klik menu dropdown Service account dan pilih akun layanan yang diinginkan.
Klik Next dan Deploy.
gcloud
Saat men-deploy fungsi menggunakan gcloud functions deploy, tambahkan
flag --service-account:
gcloud functions deploy FUNCTION_NAME --service-account SERVICE_ACCOUNT_EMAIL
dengan FUNCTION_NAME sebagai nama fungsi Anda, dan
SERVICE_ACCOUNT_EMAIL sebagai akun layanan.
Fungsi yang di-deploy ulang kini menggunakan akun layanan runtime baru.
Menggunakan Server Metadata untuk memperoleh token
Meskipun akun layanan yang ditentukan IAM adalah metode pilihan untuk mengelola akses di Google Cloud, beberapa layanan mungkin memerlukan mode lain, seperti kunci API, klien OAuth 2.0, atau kunci akun layanan. Akses ke resource eksternal mungkin juga memerlukan metode alternatif.
Jika layanan target mengharuskan Anda memberikan token ID OpenID Connect atau token akses Oauth 2.0, Anda mungkin dapat menggunakan Server Metadata Komputasi untuk mengambil token ini, daripada menyiapkan klien OAuth lengkap.
Token identitas
Anda dapat menggunakan Server Metadata Komputasi untuk mengambil token ID dengan audience tertentu sebagai berikut:
curl "http://metadata.google.internal/computeMetadata/v1/instance/service-accounts/default/identity?audience=AUDIENCE" \ -H "Metadata-Flavor: Google"
Jika AUDIENCE adalah target yang diminta,
misalnya: URL layanan yang Anda panggil, seperti
https://service.domain.com, atau OAuth Client ID dari resource yang dilindungi
IAP, seperti 1234567890.apps.googleusercontent.com.
Token akses
Token akses OAuth 2.0 menggunakan cakupan untuk menentukan izin akses. Secara default,
dalam Google Cloud , token akses memiliki cakupan cloud-platform. Untuk mengakses Google API atau Google Cloud API lainnya, Anda harus mengambil token akses
dengan cakupan yang sesuai.
Anda dapat menggunakan Server Metadata Komputasi untuk mengambil token akses.
Jika memerlukan token akses dengan cakupan tertentu, Anda dapat membuatnya sebagai berikut:
curl "http://metadata.google.internal/computeMetadata/v1/instance/service-accounts/default/token?scopes=SCOPES" \ -H "Metadata-Flavor: Google"
Dengan SCOPES sebagai comma separated list berisi cakupan OAuth yang
diminta, misalnya: https://www.googleapis.com/auth/drive,https://www.googleapis.com/auth/spreadsheets.
Lihat daftar lengkap cakupan Google OAuth untuk menemukan cakupan yang Anda butuhkan.
Langkah berikutnya
Pelajari cara mengizinkan akses ke fungsi Anda atau mengautentikasi developer dan fungsi lainnya sehingga mereka dapat memanggil fungsi Anda.