Identitas Fungsi

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 Cloud Functions, 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, Cloud Functions menggunakan akun layanan default sebagai identitasnya untuk eksekusi fungsi:

  • Cloud Functions (generasi ke-1) menggunakan akun layanan default App Engine, PROJECT_ID@appspot.gserviceaccount.com.
  • Cloud Functions (generasi ke-2) menggunakan akun layanan komputasi default, PROJECT_NUMBER-compute@developer.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

  1. Buka halaman IAM di konsol Google Cloud:

    Buka konsol Google Cloud

  2. Pilih Akun layanan default App Engine atau Akun layanan komputasi default dari tabel.

  3. Klik ikon pensil di sisi kanan baris untuk menampilkan tab Edit izin.

  4. Tambahkan atau hapus peran di menu drop-down Peran untuk memberikan akses hak istimewa terendah.

  5. 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 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.

  1. Buat akun layanan Anda. Catat namanya.
  2. Berikan peran yang sesuai, berdasarkan resource yang perlu diakses fungsi untuk melakukan pekerjaannya.
  3. Jika akun layanan dan fungsi berada di project yang berbeda, dari project tempat akun layanan berada:

    1. Konfigurasikan akun layanan agar dapat berfungsi di seluruh project.
    2. Berikan peran Service Account Token Creator (roles/iam.serviceAccountTokenCreator) ke kedua akun layanan yang dikelola Google ini, dengan PROJECT... mengacu pada project tempat fungsi berada:

      • Akun layanan default, yang bervariasi bergantung pada apakah Anda menggunakan generasi ke-1 atau generasi ke-2:
        • Generasi ke-1: Akun layanan default App Engine (PROJECT_ID@appspot.gserviceaccount.com)
        • Generasi ke-2: Akun layanan default Compute Engine (PROJECT_NUMBER-compute@developer.gserviceaccount.com)
      • Agen Layanan Cloud Functions (service-PROJECT_NUMBER@gcf-admin-robot.iam.gserviceaccount.com)

      Akun ini mengelola akses lintas-project untuk akun layanan Anda.

    3. Berikan izin iam.serviceaccounts.actAs ke agen layanan Cloud Functions di akun layanan dari project yang berbeda.

  4. Beri akses akun layanan ke resource. Metode untuk melakukannya bergantung pada tipe resource.

  5. 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

  1. Buka Konsol Google Cloud:

    Buka konsol Google Cloud

  2. Tentukan dan konfigurasikan fungsi sesuai keinginan Anda.

  3. Klik Runtime, build... untuk menampilkan setelan tambahan.

  4. Pilih tab Runtime.

  5. Klik menu dropdown Akun layanan dan pilih akun layanan yang diinginkan.

  6. Klik Berikutnya dan Deploy.

gcloud

Saat men-deploy fungsi menggunakan gcloud functions deploy, tambahkan flag --service-account. Contoh:

gcloud functions deploy 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

  1. Buka Konsol Google Cloud:

    Buka konsol Google Cloud

  2. Klik nama fungsi yang diinginkan untuk membuka halaman detailnya.

  3. Klik pensil Edit di bagian atas halaman detail untuk mengedit fungsi.

  4. Klik Runtime, build... untuk menampilkan setelan tambahan.

  5. Pilih tab Runtime.

  6. Klik menu dropdown Akun layanan dan pilih akun layanan yang diinginkan.

  7. 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. Agar dapat mengakses Google Cloud API atau Google Cloud API lainnya, Anda perlu 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.