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 untuk mengontrol akses dengan memberikan rangkaian izin pengguna minimum menggunakan Identity and Access Management.
Akun layanan runtime
Kecuali Anda menentukan akun layanan runtime yang berbeda saat men-deploy fungsi, fungsi Cloud Run menggunakan akun layanan default sebagai identitasnya untuk eksekusi fungsi:
Fungsi Cloud Run 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, atau
- Membuat akun layanan individual untuk fungsi Anda
Mengubah izin pada akun layanan runtime default
Konsol
Buka halaman IAM di konsol Google Cloud:
Pilih Akun layanan default App Engine atau Akun layanan komputasi default dari tabel.
Klik ikon pensil di sisi kanan baris untuk menampilkan tab Edit izin.
Tambahkan atau hapus peran di menu drop-down Peran untuk memberikan akses hak istimewa terendah.
Klik Simpan.
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
adalah alamat
email akun layanan runtime default seperti yang ditunjukkan sebelumnya di
Akun layanan runtime, dan
ROLE
adalah 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 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 fungsi Cloud Run (service-PROJECT_NUMBER@gcf-admin-robot.iam.gserviceaccount.com
), denganPROJECT
mengacu pada project tempat fungsi berada. Agen Layanan fungsi Cloud Run mengelola akses lintas project untuk akun layanan Anda.Berikan izin
iam.serviceaccounts.actAs
ke agen layanan fungsi Cloud Run di akun layanan dari project yang berbeda.
Beri akses akun layanan ke resource. Metode untuk melakukannya bergantung pada tipe 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 Akun layanan dan pilih akun layanan yang diinginkan.
Klik Berikutnya 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
adalah 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 Akun layanan dan pilih akun layanan yang diinginkan.
Klik Berikutnya 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
adalah nama fungsi Anda, dan
SERVICE_ACCOUNT_EMAIL
adalah 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 untuk menggunakan Server Metadata Compute untuk mengambil token ini, daripada menyiapkan klien OAuth penuh.
Token identitas
Anda dapat menggunakan Server Metadata Compute 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 ID Klien OAuth 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,
token akses dalam token akses Google Cloud memiliki cakupan cloud-platform
. Untuk mengakses Google Cloud API atau Google Cloud API lainnya, Anda harus mengambil token
akses dengan cakupan yang sesuai.
Anda dapat menggunakan Server Metadata Compute 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
adalah daftar cakupan OAuth yang dipisahkan koma 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 memberikan otorisasi akses ke fungsi Anda atau mengautentikasi developer dan fungsi lainnya sehingga mereka dapat memanggil fungsi Anda.