Mendelegasikan izin agen layanan ke akun layanan yang dikelola pengguna

Untuk transfer tanpa agen, Storage Transfer Service secara default menggunakan agen layanan untuk mentransfer data Anda antara sumber dan tujuan. Anda memberikan izin kepada agen layanan untuk mengakses bucket Cloud Storage Anda.

Karena agen layanan Storage Transfer Service yang sama digunakan oleh semua transfer dalam project, agen layanan tersebut harus memiliki izin di semua bucket yang terlibat dalam setiap transfer.

Sebagai alternatif, Anda dapat menetapkan izin bucket ke beberapa akun layanan yang dikelola pengguna. Akun layanan yang dikelola pengguna ini diberikan izin pada bucket asal dan tujuan tertentu, dan juga dibatasi untuk akun pengguna tertentu (akun yang membuat atau memicu tugas transfer).

Contoh skenario

Skenario berikut menunjukkan berbagai opsi izin menggunakan agen layanan dan akun layanan yang dikelola pengguna.

Luaskan setiap bagian untuk melihat detailnya.

Skenario 1: Khusus agen layanan

Dalam skenario ini, semua izin diberikan kepada agen layanan.

  • Agen layanan diberi izin tulis di bucket A, B, C, dan D.

Setiap pengguna dengan izin yang benar untuk membuat tugas transfer dapat mentransfer ke dalam atau keluar dari bucket A, B, C, dan D.

Hal ini berfungsi dengan baik jika pengguna Storage Transfer Service adalah pengguna tepercaya untuk data di semua bucket, dan dapat mengonfigurasi tugas transfer dengan benar untuk menghindari pemindahan data ke atau dari bucket yang salah.

Skenario 2: Khusus agen layanan yang dikelola pengguna

Dalam skenario ini, semua izin diberikan ke akun layanan yang dikelola pengguna.

  • Akun layanan yang dikelola pengguna #1 diberi izin di bucket A dan B.
  • Akun layanan yang dikelola pengguna #2 diberi izin di bucket C dan D.

Selain itu:

  • Pengguna Alpha diberi akses ke akun layanan #1.
  • Pengguna Bravo diberi akses ke akun layanan #2.
  • Pengguna Charlie diberi akses ke akun layanan #1 dan #2.

Dalam kasus ini:

  • Alpha hanya dapat mentransfer antara bucket A dan B.
  • Bravo hanya dapat mentransfer antara bucket C dan D.
  • Charlie hanya dapat mentransfer antara bucket A dan B, serta antara C dan D.
  • Charlie tidak dapat mentransfer antara A dan C, A dan D, B dan C, atau B dan D.

Skenario 3: Izin campuran

Dalam skenario ini, project Anda berisi campuran izin agen layanan dan izin akun layanan yang dikelola pengguna.

  • Agen layanan diberi izin tulis di bucket A dan B.
  • Akun layanan yang dikelola pengguna #1 diberi izin hanya baca di bucket C dan izin tulis di bucket D.
  • Pengguna Alpha diberi akses ke akun layanan #1 yang dikelola pengguna.

Dalam kasus ini:

  • Setiap pengguna dengan izin yang benar untuk membuat tugas transfer dapat mentransfer ke dalam atau keluar dari bucket A dan B. Data tidak dapat ditransfer ke dalam atau keluar dari bucket C atau D.
  • Pengguna Alpha dapat mentransfer ke dalam atau keluar dari bucket A dan B.
  • Alpha dapat mentransfer ke luar dari bucket C ke bucket D.
  • Alpha tidak dapat mentransfer dari bucket C ke bucket A atau B.

Ringkasan implementasi

Implementasinya adalah sebagai berikut:

  • Anda membuat akun layanan yang dikelola pengguna, atau menggunakan akun yang sudah ada.
  • Anda memberikan izin:
    • Agar pengguna dapat mengakses akun layanan yang dikelola pengguna.
    • Agar agen layanan dapat membuat token akses dari akun layanan yang dikelola pengguna.
    • Agar akun layanan yang dikelola pengguna dapat mengakses bucket Anda.
  • Pengguna membuat tugas transfer yang menentukan akun layanan yang dikelola pengguna.
  • Layanan Transfer Penyimpanan memeriksa apakah pengguna memiliki izin yang benar di akun layanan. Jika izin yang benar belum diberikan, pembuatan tugas transfer akan gagal.
  • Agen layanan membuat token OAuth atas nama akun layanan yang dikelola pengguna. Token OAuth memungkinkan Storage Transfer Service mengakses bucket yang terlibat dalam transfer.
  • Tugas transfer dijalankan.
  • Token OAuth berumur pendek dan masa berlakunya terbatas. Jika tugas transfer sedang berlangsung saat masa berlaku token habis, Storage Transfer Service akan membuat token baru dan melanjutkan transfer.

Menyiapkan delegasi izin

Ikuti petunjuk untuk mendelegasikan akses agen layanan ke akun layanan yang dikelola pengguna.

Persyaratan

  • Untuk membuat akun layanan baru yang dikelola pengguna, Anda memerlukan peran Create Service Accounts (roles/iam.serviceAccountCreator) di project.
  • Untuk memberikan akses bagi pengguna dan agen layanan ke akun layanan yang dikelola pengguna, Anda memerlukan peran Admin Akun Layanan (roles/iam.serviceAccountAdmin) di akun layanan yang dikelola pengguna, atau di project.

Membuat atau mengidentifikasi akun layanan yang dikelola pengguna

Anda dapat membuat akun layanan yang dikelola pengguna baru, atau menggunakan akun yang sudah ada.

  • Untuk membuat akun layanan yang dikelola pengguna, ikuti petunjuk di Membuat akun layanan.

  • Untuk menggunakan akun layanan yang dikelola pengguna yang ada, Anda memerlukan alamat emailnya, yang menggunakan format berikut:

    SERVICE_ACCOUNT_NAME@PROJECT_ID.iam.gserviceaccount.com

Jika akun layanan berada di project yang berbeda dengan tugas transfer, lihat Mengaktifkan akun layanan untuk dilampirkan di seluruh project.

Memberikan akses kepada pengguna

Berikan akses akun pengguna ke akun layanan baru yang dikelola pengguna, dan tentukan peran Service Account User (roles/iam.serviceAccountUser). Akun pengguna adalah akun yang digunakan untuk membuat atau memperbarui tugas transfer.

Google Cloud console

  1. Di konsol Google Cloud , buka halaman Service Accounts.

    Buka Akun Layanan

  2. Pilih project.

  3. Klik alamat email akun layanan yang dikelola pengguna.

  4. Pilih tab Izin.

  5. Klik Berikan akses.

  6. Masukkan alamat email pengguna. Misalnya, user1@example.com.

  7. Dari menu drop-down Peran, pilih Pengguna Akun Layanan.

  8. Klik Simpan. akun utama diberi peran pada akun layanan.

gcloud

Untuk memberikan peran kepada akun utama, jalankan perintah add-iam-policy-binding:

gcloud iam service-accounts add-iam-policy-binding USER_MANAGED_SERVICE_ACCOUNT_EMAIL \
  --member=PRINCIPAL --role=roles/iam.serviceAccountUser

Ganti variabel berikut:

  • USER_MANAGED_SERVICE_ACCOUNT_EMAIL: Alamat email akun layanan yang dikelola pengguna dalam bentuk SA_NAME@PROJECT_ID.iam.gserviceaccount.com.
  • PRINCIPAL: Alamat email pengguna yang menjalankan tugas transfer, dalam format user:name@example.com.

Memberikan akses ke agen layanan

Agar agen layanan dapat membuat token akses dari akun layanan yang dikelola pengguna, berikan akses ke akun layanan yang dikelola pengguna kepada agen layanan, dan tetapkan peran Service Account Token Creator (roles/iam.serviceAccountTokenCreator).

Anda memerlukan alamat email agen layanan untuk memberikan akses. Untuk menemukan email agen layanan:

  1. Buka halaman referensi googleServiceAccounts.get.

    Panel interaktif akan terbuka, berjudul Coba metode ini.

  2. Di panel, pada bagian Request parameters, masukkan project ID Anda. Project yang Anda tentukan di sini harus berupa project yang Anda gunakan untuk mengelola Storage Transfer Service.

  3. Klik Jalankan.

    Email agen layanan Anda ditampilkan sebagai nilai accountEmail. Format ini menggunakan format project-PROJECT_NUMBER@storage-transfer-service.iam.gserviceaccount.com.

Kemudian, untuk memberikan akses agen layanan ke akun layanan yang dikelola pengguna:

Google Cloud console

  1. Di konsol Google Cloud , buka halaman Service Accounts.

    Buka Akun Layanan

  2. Pilih project.

  3. Klik alamat email akun layanan yang dikelola pengguna.

  4. Pilih tab Izin.

  5. Klik Berikan akses.

  6. Masukkan alamat email agen layanan.

  7. Dari menu drop-down Peran, pilih Pembuat Token Akun Layanan.

  8. Klik Simpan. akun utama diberi peran pada akun layanan.

gcloud

Untuk memberikan peran kepada akun utama, jalankan perintah add-iam-policy-binding:

gcloud iam service-accounts add-iam-policy-binding USER_MANAGED_SERVICE_ACCOUNT_EMAIL \
  --member=serviceAccount:SERVICE_AGENT_EMAIL --role=roles/iam.serviceAccountTokenCreator

Ganti variabel berikut:

  • USER_MANAGED_SERVICE_ACCOUNT_EMAIL: Alamat email akun layanan yang dikelola pengguna dalam bentuk SA_NAME@PROJECT_ID.iam.gserviceaccount.com.
  • SERVICE_AGENT_EMAIL: Alamat email agen layanan.

Memberikan izin bucket ke akun layanan yang dikelola pengguna

Berikan izin yang tercantum dalam izin agen layanan yang dikelola Google ke akun layanan yang dikelola pengguna, bukan ke agen layanan.

Membuat tugas transfer menggunakan akun layanan yang dikelola pengguna

Setelah memberikan izin yang benar, Anda dapat menentukan akun layanan yang dikelola pengguna saat membuat tugas transfer baru.

Google Cloud console

Ikuti petunjuk untuk membuat transfer. Sebelum menyelesaikan tugas transfer:

  1. Di halaman Choose settings, temukan bagian Service account type.
  2. Pilih Akun layanan yang dikelola pengguna.
  3. Masukkan email akun layanan yang dikelola pengguna, menggunakan format SERVICE_ACCOUNT_NAME@PROJECT_ID.iam.gserviceaccount.com.
  4. Klik Create untuk membuat tugas transfer.

REST API

Tentukan akun layanan yang dikelola pengguna sebagai nilai kolom serviceAccount dalam permintaan transferJobs.create.

Nilai harus menggunakan format projects/-/serviceAccounts/ACCOUNT_EMAIL_OR_UNIQUEID.

Email akun layanan (SERVICE_ACCOUNT_NAME@PROJECT_ID.iam.gserviceaccount.com) atau ID unik (123456789012345678901) diterima dalam string. Karakter pengganti - wajib diisi; menggantinya dengan project ID tidak valid.

Contoh:

POST https://storagetransfer.googleapis.com/v1/transferJobs
{
"description": "A transfer using a user-managed service account for bucket permissions",
"status": "ENABLED",
"projectId": "PROJECT_ID",
"serviceAccount": "projects/-/serviceAccounts/SERVICE_ACCOUNT_NAME@PROJECT_ID.iam.gserviceaccount.com",
"transferSpec": {
    ...
  }
}