Mendelegasikan izin agen layanan ke akun layanan yang dikelola pengguna

Untuk transfer tanpa agen, Storage Transfer Service secara default menggunakan a 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 tersebut harus memiliki izin pada 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 diberi izin pada bucket sumber 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: Hanya agen layanan

Dalam skenario ini, semua izin diberikan kepada agen layanan.

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

Setiap pengguna dengan izin yang benar untuk membuat tugas transfer dapat mentransfer ke atau 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: Hanya agen layanan yang dikelola pengguna

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

  • Akun layanan yang dikelola pengguna #1 diberi izin pada bucket A dan B.
  • Akun layanan yang dikelola pengguna #2 diberi izin pada 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, hanya.
  • 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 izin.

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

Dalam kasus ini:

  • Setiap pengguna dengan izin yang benar untuk membuat tugas transfer dapat mentransfer ke atau dari bucket A dan B. Mereka tidak dapat mentransfer ke atau dari bucket C atau D.
  • Pengguna Alpha dapat mentransfer ke atau dari bucket A dan B.
  • Alpha dapat mentransfer dari bucket C ke bucket D.
  • Alpha tidak dapat mentransfer keluar 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.
  • Storage Transfer Service memeriksa apakah pengguna memiliki izin yang benar pada 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 hanya berlaku dalam waktu singkat dan akan habis masa berlakunya. 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 yang dikelola pengguna, Anda memerlukan peran Membuat Akun Layanan (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, 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 sudah 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 Mengizinkan akun layanan dilampirkan di seluruh project.

Memberikan akses kepada pengguna

Beri akun pengguna akses ke akun layanan yang dikelola pengguna yang baru, dan tetapkan peran Pengguna Akun Layanan (roles/iam.serviceAccountUser). Akun pengguna adalah akun yang digunakan untuk membuat atau memperbarui tugas transfer.

Google Cloud Konsol

  1. Di Google Cloud konsol, buka halaman Akun Layanan.

    Buka Akun Layanan

  2. Pilih project.

  3. Klik alamat email akun layanan yang dikelola pengguna.

  4. Pilih tab Akun utama dengan akses.

  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 kepada agen layanan

Untuk mengizinkan agen layanan membuat token akses dari akun layanan yang dikelola pengguna, berikan akses agen layanan ke akun layanan yang dikelola pengguna, dan tetapkan peran Pembuat Token Akun Layanan (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, dengan judul Coba metode ini.

  2. Di panel, pada bagian Parameter permintaan, masukkan ID project Anda. Project yang Anda tentukan di sini harus merupakan project yang Anda gunakan untuk mengelola Storage Transfer Service.

  3. Klik Jalankan.

    Email agen layanan Anda akan ditampilkan sebagai nilai accountEmail. Email tersebut 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 Konsol

  1. Di Google Cloud konsol, buka halaman Akun Layanan.

    Buka Akun Layanan

  2. Pilih project.

  3. Klik alamat email akun layanan yang dikelola pengguna.

  4. Pilih tab Akun utama dengan akses.

  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 di Izin agen layanan 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 Konsol

Ikuti petunjuk untuk membuat transfer. Sebelum menyelesaikan tugas transfer:

  1. Di halaman Pilih setelan, temukan bagian Jenis akun layanan.
  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 Buat untuk membuat tugas transfer.

REST API

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

Alamat email akun layanan (SERVICE_ACCOUNT_NAME@PROJECT_ID.iam.gserviceaccount.com) atau ID unik (123456789012345678901) diterima.

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": "SERVICE_ACCOUNT_NAME@PROJECT_ID.iam.gserviceaccount.com",
"transferSpec": {
    ...
  }
}