Menggunakan mode berperan ketat

Mode bertindak sebagai yang ketat mengaktifkan pemeriksaan keamanan tambahan untuk tindakan pengguna berikut di Dataform:

  • Membuat atau memperbarui repositori
  • Membuat atau memperbarui konfigurasi alur kerja
  • Membuat pemanggilan alur kerja
  • Memperbarui konfigurasi rilis

Pemeriksaan keamanan tambahan ini mewajibkan pengguna yang melakukan tindakan ini memiliki izin iam.serviceAccounts.actAs pada akun layanan yang efektif, yaitu akun layanan yang kredensialnya digunakan untuk menjalankan alur kerja. Untuk mengetahui informasi selengkapnya, lihat Melampirkan akun layanan ke resource.

Anda dapat mengaktifkan izin ini dengan cara berikut:

  • Saat membuat repositori
  • Saat memperbarui repositori yang ada dengan flag repositori strict_act_as_checks

Peran yang diperlukan

Untuk mendapatkan izin yang Anda perlukan untuk menyelesaikan tugas dalam dokumen ini, minta administrator Anda untuk memberi Anda peran IAM berikut:

  • Pengguna Akun Layanan (roles/iam.serviceAccountUser) di akun layanan kustom
  • Melihat log di Logging: Logs Viewer (roles/logging.viewer) di project
  • Memberikan peran IAM kepada pengguna atau akun layanan: Admin Akun Layanan (roles/iam.serviceAccountAdmin) di project

Untuk mengetahui informasi selengkapnya tentang pemberian peran, lihat Mengelola akses ke project, folder, dan organisasi.

Anda mungkin juga bisa mendapatkan izin yang diperlukan melalui peran khusus atau peran bawaan lainnya.

Memverifikasi izin bertindak sebagai untuk akun layanan yang efektif

Untuk memastikan alur kerja Dataform Anda berjalan dengan aman dan tanpa gangguan, penting untuk memverifikasi izin bertindak sebagai pada akun layanan yang digunakan. Bagian ini menjelaskan cara mengidentifikasi akun layanan efektif untuk resource Anda, menggunakan Cloud Logging untuk memeriksa masalah izin, lalu menyelesaikan masalah yang Anda temukan.

Menentukan akun layanan yang efektif

Anda dapat menentukan akun layanan efektif yang menjalankan alur kerja sesuai dengan jenis resource dan kondisi berikut:

Jenis resource Akun layanan yang efektif
Repositori

Jika Anda memilih akun layanan kustom saat membuat repositori, akun layanan Repository.ServiceAccount akan digunakan.

Jika tidak, nilai defaultnya adalah agen layanan Dataform.

Konfigurasi alur kerja

Anda dapat memilih akun layanan kustom saat membuat konfigurasi alur kerja.

Jika tidak, nilai defaultnya adalah agen layanan Dataform repositori.

Pemanggilan alur kerja

Jika hasil kompilasi adalah WORKFLOW_CONFIG, akun layanan efektif konfigurasi alur kerja akan digunakan.

Jika Anda membuat pemanggilan alur kerja dari hasil kompilasi, akun layanan WorkflowInvocation.InvocationConfig akan digunakan jika disetel.

Jika tidak, nilai defaultnya adalah agen layanan Dataform repositori.

Memeriksa masalah izin di Cloud Logging

Untuk meningkatkan keamanan, Dataform memeriksa apakah izin iam.serviceAccounts.actAs tidak ada di akun layanan yang digunakan oleh resource Dataform.

Hasil pemeriksaan ini, termasuk potensi masalah izin, dicatat di Cloud Logging. Anda harus meninjau log ini secara rutin untuk mengidentifikasi dan memberikan izin iam.serviceAccounts.actAs yang tidak ada. Memeriksa log ini memastikan alur kerja dan konfigurasi Dataform Anda terus berfungsi tanpa gangguan.

Lihat log di Cloud Logging

  1. Di konsol Google Cloud , buka halaman Logs Explorer.

    Buka Logs Explorer

  2. Pilih Google Cloud project tempat Anda ingin memeriksa log.

  3. Gunakan editor kueri untuk memfilter log actAs Dataform dengan opsi berikut:

    • Untuk mencantumkan hanya pemeriksaan actAs yang gagal dan memerlukan tindakan, gunakan kueri berikut:

      logName: "projects/PROJECT_ID/logs/dataform.googleapis.com%2Factas_dry_run_result"
      jsonPayload.dryRunResult = false
      
    • Untuk mencantumkan semua pemeriksaan actAs, gunakan kueri berikut:

      logName: "projects/PROJECT_ID/logs/dataform.googleapis.com%2Factas_dry_run_result"
      

    Ganti PROJECT_ID dengan Google Cloud project ID Anda.

  4. Klik Run query.

Menafsirkan entri log

Luaskan entri log di hasil kueri untuk melihat kolom jsonPayload berikut:

Kolom Jenis Deskripsi
dryRunResult Boolean true: pemeriksaan izin berhasil.

false: pemeriksaan gagal. Akun utama pemanggil tidak memiliki izin iam.serviceAccounts.actAs di akun layanan.
caller String Alamat email akun utama (pengguna atau akun layanan) yang memulai panggilan API.
serviceAccount String Akun layanan yang dicoba digunakan oleh akun utama pemanggil. Kolom ini biasanya ada jika kolom dryRunResult adalah false.
apiMethod String Metode Dataform API yang memicu pemeriksaan, misalnya, CreateWorkflowInvocation atau UpdateRepository.
*_context Objek Objek yang berisi nama resource yang relevan dengan metode API yang dipanggil. Untuk mengetahui informasi selengkapnya, lihat Objek konteks.
Objek konteks

Entri log mencakup objek konteks dalam kolom jsonPayload. Kolom dalam objek ini berisi nama Google Cloud resource yang sepenuhnya memenuhi syarat dari entity Dataform yang terlibat. Nama-nama ini mengikuti struktur standar yang ditampilkan dalam daftar berikut, sehingga Anda dapat mengidentifikasi resource secara tepat.

  • create_workflow_invocation_context: ada saat metode API adalah CreateWorkflowInvocation.

    • workflowInvocation: nama resource pemanggilan alur kerja.
      • Format nama resource adalah sebagai berikut: projects/PROJECT_ID/locations/LOCATION_ID/repositories/REPOSITORY_ID/workflowInvocations/WORKFLOW_INVOCATION_ID.
    • compilationResult atau workflowConfig: nama resource sumber yang digunakan untuk pemanggilan.
      • Format nama resource untuk compilationResult adalah sebagai berikut: projects/PROJECT_ID/locations/LOCATION_ID/repositories/REPOSITORY_ID/compilationResults/COMPILATION_RESULT_ID.
      • Format nama resource untuk workflowConfig adalah sebagai berikut: projects/PROJECT_ID/locations/LOCATION_ID/repositories/REPOSITORY_ID/workflowConfigs/WORKFLOW_CONFIG_ID.
  • create_repository_context atau update_repository_context: ada saat metode API adalah CreateRepository atau UpdateRepository.

    • repository: nama resource repositori Dataform.
      • Format nama resource adalah sebagai berikut: projects/PROJECT_ID/locations/LOCATION_ID/repositories/REPOSITORY_ID
  • update_release_config_context: ada saat metode API adalah UpdateReleaseConfig.

    • releaseConfig: nama resource konfigurasi rilis.
      • Format nama resource adalah sebagai berikut: projects/PROJECT_ID/locations/LOCATION_ID/repositories/REPOSITORY_ID/releaseConfigs/RELEASE_CONFIG_ID.
  • create_workflow_config_context atau update_workflow_config_context: ada saat metode API adalah CreateWorkflowConfig atau UpdateWorkflowConfig.

    • workflowConfig: nama resource konfigurasi alur kerja.
      • Format nama resource adalah sebagai berikut: projects/PROJECT_ID/locations/LOCATION_ID/repositories/REPOSITORY_ID/workflowConfigs/WORKFLOW_CONFIG_ID.

Untuk membandingkan format yang didokumentasikan dengan entri logging, ganti kode berikut:

  • PROJECT_ID: ID unik Google Cloud project Anda.
  • LOCATION_ID: region tempat repositori Dataform Anda berada.
  • REPOSITORY_ID: ID yang ditentukan pengguna untuk repositori Dataform. Ini adalah nama yang diberikan ke repositori saat dibuat.
  • COMPILATION_RESULT_ID: ID unik yang dibuat sistem untuk hasil kompilasi Dataform.
  • RELEASE_CONFIG_ID: ID yang ditentukan pengguna untuk konfigurasi rilis Dataform.
  • WORKFLOW_CONFIG_ID: ID yang ditentukan pengguna dari konfigurasi alur kerja Dataform.

Menyelesaikan masalah izin

Jika Anda menemukan entri log dengan kolom dryRunResult bernilai false, lakukan langkah-langkah berikut:

  1. Di detail jsonPayload, catat alamat email di kolom caller untuk mengidentifikasi akun utama.

  2. Catat alamat email di kolom serviceAccount untuk mengidentifikasi akun layanan.

  3. Pastikan bahwa akun utama pemanggil seharusnya memiliki izin untuk bertindak sebagai akun layanan. Dengan memberikan izin ini, pemanggil dapat menggunakan izin yang dimiliki oleh akun layanan.

  4. Jika akses dimaksudkan, berikan peran Service Account User (roles/iam.serviceAccountUser) kepada akun utama pemanggil di akun layanan target. Untuk mengetahui informasi selengkapnya, lihat Memberikan peran IAM Pengguna Akun Layanan.

Setelah memberikan peran, log mendatang untuk kombinasi pemanggil dan akun layanan ini akan menampilkan dryRunResult: true.

Memberikan peran IAM Service Account User

Peran Service Account User (roles/iam.serviceAccountUser) berisi izin iam.serviceAccounts.actAs, yang diperlukan untuk mode bertindak sebagai yang ketat. Saat menggunakan Dataform API, Anda harus memiliki peran Pengguna Akun Layanan yang diberikan untuk akun layanan yang efektif berdasarkan metode projects.locations.repositories yang Anda panggil:

  • create atau patch
    • Jika properti Repository.ServiceAccount ditetapkan, Anda harus memiliki peran Pengguna Akun Layanan yang diberikan untuk properti tersebut.
    • Jika Anda memanggil metode patch, Anda harus memiliki peran Pengguna Akun Layanan yang diberikan untuk semua akun layanan efektif di semua konfigurasi alur kerja di repositori.
  • workflowConfigs.create atau workflowConfigs.patch
    • Anda harus memiliki peran Pengguna Akun Layanan yang diberikan untuk akun layanan efektif yang digunakan dalam konfigurasi alur kerja.
  • releaseConfigs.patch
    • Anda harus memiliki peran Pengguna Akun Layanan yang diberikan untuk semua akun layanan efektif yang digunakan dalam konfigurasi alur kerja menggunakan konfigurasi rilis ini.
  • workflowInvocations.create
    • Anda harus memiliki peran Pengguna Akun Layanan yang diberikan untuk akun layanan efektif yang digunakan dalam pemanggilan alur kerja.

Untuk memberikan peran Service Account User ke akun layanan kustom, ikuti langkah-langkah berikut:

  1. Di konsol Google Cloud , buka IAM > Service accounts.

    Buka halaman Service accounts

  2. Pilih project.

  3. Di halaman Service accounts for project "PROJECT_NAME", pilih akun layanan kustom Anda.

  4. Buka Principals with access, lalu klik Grant Access.

  5. Di kolom New principals, masukkan ID agen layanan Dataform default Anda.

    ID agen layanan Dataform default Anda memiliki format berikut:

    service-PROJECT_NUMBER@gcp-sa-dataform.iam.gserviceaccount.com
    
  6. Di daftar Pilih peran, pilih peran Service Account User.

  7. Klik Simpan.

Untuk mengetahui informasi selengkapnya, lihat peran yang diperlukan untuk membuat konfigurasi alur kerja dan peran yang diperlukan untuk membuat konfigurasi rilis.

Efek mode berperan ketat pada rilis dan eksekusi otomatis

Jika mode berperan sebagai orang lain yang ketat diaktifkan, hal ini akan memengaruhi rilis repositori otomatis dan eksekusi alur kerja otomatis sebagai berikut:

Untuk repositori yang tidak terhubung ke repositori pihak ketiga:

  • Anda tidak dapat menyetel jadwal Cron untuk rilis otomatis dalam konfigurasi rilis. Hal ini diterapkan untuk mencegah perubahan kode yang dilakukan oleh pengguna yang mungkin tidak memiliki izin iam.serviceAccounts.actAs yang diperlukan pada akun layanan downstream di-deploy secara otomatis.
  • Jadwal alur kerja yang dijalankan menggunakan jadwal Cron dalam konfigurasi alur kerja tetap diaktifkan. Agar eksekusi otomatis ini berhasil, Anda harus memberikan izin iam.serviceAccounts.actAs pada agen layanan Dataform default untuk akun layanan efektif yang ditentukan dalam konfigurasi alur kerja.

Untuk repositori yang terhubung ke repositori pihak ketiga:

  • Rilis terjadwal dan operasi alur kerja terjadwal diizinkan.
  • Untuk mengaktifkan rilis otomatis dari konfigurasi rilis atau eksekusi otomatis dari konfigurasi alur kerja, Anda harus memberikan izin iam.serviceAccounts.actAs kepada agen layanan Dataform default pada akun layanan efektif yang relevan:
    • Untuk konfigurasi rilis otomatis, berikan izin pada akun layanan efektif dari semua konfigurasi alur kerja yang dipicu oleh konfigurasi rilis ini.
    • Untuk konfigurasi alur kerja otomatis, berikan izin pada akun layanan efektif yang digunakan oleh konfigurasi alur kerja tersebut.

Langkah berikutnya