Mengotorisasi akses perwakilan layanan ke Azure Databricks dengan OAuth

Halaman ini menjelaskan cara mengotorisasi akses ke sumber daya Azure Databricks dari proses tanpa pengawasan, seperti perintah CLI otomatis atau panggilan REST API yang dilakukan dari skrip atau aplikasi.

Azure Databricks menggunakan OAuth 2.0 sebagai protokol pilihan untuk otorisasi dan autentikasi perwakilan layanan di luar UI. Autentikasi klien terpadu mengotomatiskan pembuatan dan refresh token. Ketika perwakilan layanan masuk dan diberikan persetujuan, OAuth mengeluarkan token akses untuk CLI, SDK, atau alat lain untuk digunakan atas namanya. Setiap token akses berlaku selama satu jam, setelah itu token baru diminta secara otomatis.

Di halaman ini, otorisasi mengacu pada penggunaan OAuth untuk memberikan akses perwakilan layanan ke sumber daya Azure Databricks, sementara autentikasi mengacu pada memvalidasi kredensial melalui token akses.

Untuk detail tingkat tinggi lainnya, lihat Mengotorisasi akses ke sumber daya Azure Databricks.

Catatan

Halaman ini membahas autentikasi M2M OAuth untuk perwakilan layanan yang dikelola Databricks. Jika Anda menggunakan perwakilan layanan yang dikelola Microsoft Entra, lihat Mengautentikasi dengan perwakilan layanan Microsoft Entra.

Cara mengotorisasi entitas layanan

Azure Databricks mendukung dua cara untuk mengotorisasi perwakilan layanan:

  • Otomatis (disarankan): Gunakan autentikasi terpadu dengan alat dan SDK yang didukung, seperti Azure Databricks Terraform SDK. Pendekatan ini menangani pembuatan token dan refresh secara otomatis, dan ideal untuk otomatisasi atau beban kerja tanpa pengawasan lainnya.

  • Manual: Buat pemverifikasi kode dan tantangan, lalu tukarkan dengan token OAuth. Gunakan metode ini jika alat atau API Anda tidak mendukung autentikasi terpadu. Anda mungkin perlu membangun mekanisme refresh token Anda sendiri untuk aplikasi Anda. Untuk detailnya, lihat Membuat token akses OAuth M2M secara manual.

Prasyarat

Sebelum Anda mengonfigurasi OAuth, lakukan langkah-langkah berikut:

  1. Buat perwakilan layanan Azure Databricks. Lihat Menambahkan perwakilan layanan ke akun Anda.
  2. Buka tab Konfigurasi untuk perwakilan layanan dan pilih hak yang harus dimilikinya untuk ruang kerja ini.
  3. Buka tab Izin dan berikan akses ke pengguna, perwakilan layanan, dan grup Azure Databricks yang ingin Anda kelola dan gunakan perwakilan layanan ini. Lihat Siapa yang dapat mengelola dan memanfaatkan komponen utama layanan?.

Langkah 1: Membuat rahasia OAuth

Untuk mengotorisasi akses ke sumber daya Azure Databricks Anda dengan OAuth, Anda harus membuat rahasia OAuth. Rahasia ini digunakan untuk menghasilkan token akses OAuth untuk autentikasi. Perwakilan layanan dapat memiliki hingga lima rahasia OAuth, dan setiap rahasia dapat berlaku hingga dua tahun.

Admin akun dan admin ruang kerja dapat membuat rahasia OAuth untuk perwakilan layanan.

  1. Klik nama pengguna Anda di bilah atas dan pilih Pengaturan.
  2. Klik tab Identitas dan akses .
  3. Di samping Perwakilan layanan, klik Kelola.
  4. Pilih prinsipal layanan.
  5. Klik tab Rahasia .
  6. Klik Buat rahasia.
  7. Atur masa pakai rahasia dalam hari (maksimum 730 hari).
  8. Klik Hasilkan.
  9. Salin rahasia yang ditampilkan dan ID klien, lalu klik Selesai. Rahasia hanya ditampilkan sekali. ID klien sama dengan ID aplikasi perwakilan layanan.

Admin akun juga dapat membuat rahasia OAuth dari konsol akun. Dari tab Manajemen pengguna , pilih perwakilan layanan, lalu buka tab Kredensial & rahasia .

Catatan

Untuk mengizinkan service principal menggunakan kluster atau gudang SQL, Anda harus memberi mereka akses. Lihat Izin komputasi atau Mengelola gudang SQL.

Langkah 2: Gunakan otorisasi OAuth

Untuk menggunakan otorisasi OAuth dengan alat autentikasi terpadu, Anda harus mengatur variabel lingkungan, bidang, .databrickscfg bidang Terraform, atau Config bidang terkait berikut:

  • Host Azure Databricks, ditentukan sebagai https://accounts.azuredatabricks.net untuk operasi akun atau URL target per ruang kerja, misalnya https://adb-1234567890123456.7.azuredatabricks.net untuk operasi ruang kerja.
  • ID akun Azure Databricks, untuk operasi akun Azure Databricks.
  • ID klien prinsipal layanan.
  • Rahasia prinsipal layanan.

Untuk melakukan autentikasi perwakilan layanan OAuth, integrasikan hal berikut dalam kode Anda, berdasarkan alat atau SDK yang berpartisipasi:

Lingkungan

Untuk menggunakan variabel lingkungan untuk jenis autentikasi Azure Databricks tertentu dengan alat atau SDK, lihat Mengotorisasi akses ke sumber daya Azure Databricks atau dokumentasi alat atau SDK. Lihat juga Variabel dan bidang lingkungan untuk autentikasi terpadu dan prioritas metode Autentikasi.

Untuk operasi tingkat akun, atur variabel lingkungan berikut:

  • DATABRICKS_HOST, atur ke nilai URL konsol akun Azure Databricks Anda, https://accounts.azuredatabricks.net.
  • DATABRICKS_ACCOUNT_ID
  • DATABRICKS_CLIENT_ID
  • DATABRICKS_CLIENT_SECRET

Untuk operasi tingkat ruang kerja, atur variabel lingkungan berikut:

  • DATABRICKS_HOST, atur ke nilai URL per ruang kerja Azure Databricks Anda, misalnya https://adb-1234567890123456.7.azuredatabricks.net.
  • DATABRICKS_CLIENT_ID
  • DATABRICKS_CLIENT_SECRET

Profil

Buat atau identifikasi profil konfigurasi Azure Databricks dengan bidang berikut dalam file Anda.databrickscfg. Jika Anda membuat profil, ganti placeholder dengan nilai yang sesuai. Untuk menggunakan profil dengan alat atau SDK, lihat Mengotorisasi akses ke sumber daya Azure Databricks atau dokumentasi alat atau SDK. Lihat juga Variabel dan bidang lingkungan untuk autentikasi terpadu dan prioritas metode Autentikasi.

Untuk operasitingkat akun , atur nilai berikut dalam file Anda. Dalam hal ini, URL konsol akun Azure Databricks adalah https://accounts.azuredatabricks.net:

[<some-unique-configuration-profile-name>]
host          = <account-console-url>
account_id    = <account-id>
client_id     = <service-principal-client-id>
client_secret = <service-principal-secret>

Untuk operasi tingkat ruang kerja , atur nilai berikut dalam file .databrickscfg Anda. Dalam hal ini, host adalah URL per ruang kerja Azure Databricks, misalnya https://adb-1234567890123456.7.azuredatabricks.net:

[<some-unique-configuration-profile-name>]
host          = <workspace-url>
client_id     = <service-principal-client-id>
client_secret = <service-principal-secret>

antarmuka baris perintah (CLI)

Untuk Databricks CLI, lakukan salah satu hal berikut ini:

  • Atur variabel lingkungan seperti yang ditentukan pada tab Lingkungan .
  • Atur nilai dalam file Anda .databrickscfg seperti yang ditentukan pada tab Profil .

Variabel lingkungan selalu diutamakan daripada nilai dalam file .databrickscfg Anda.

Lihat juga autentikasi mesin-ke-mesin (M2M) OAuth.

Sambungkan

Catatan

Autentikasi perwakilan layanan OAuth didukung pada versi Databricks Connect berikut:

  • Untuk Python, Databricks Connect untuk Databricks Runtime 14.0 atau lebih.
  • Databricks Connect untuk Scala kompatibel dengan Databricks Runtime 13.3 LTS dan versi yang lebih baru. Databricks SDK untuk Java yang disertakan dengan Databricks Connect untuk Databricks Runtime 13.3 LTS ke atas harus ditingkatkan ke Databricks SDK untuk Java 0.17.0 atau lebih tinggi.

Untuk Databricks Connect, Anda dapat:

  • Gunakan profil konfigurasi: Atur nilai tingkat ruang kerja dalam file Anda .databrickscfg seperti yang dijelaskan pada tab Profil . Atur cluster_id juga ke URL instans ruang kerja Anda.
  • Gunakan variabel lingkungan: Atur nilai yang sama seperti yang ditunjukkan pada tab Lingkungan . Atur DATABRICKS_CLUSTER_ID juga ke URL instans ruang kerja Anda.

Nilai dalam .databrickscfg memiliki prioritas lebih tinggi dibandingkan variabel lingkungan.

Untuk menginisialisasi Databricks Connect dengan pengaturan ini, lihat Konfigurasi komputasi untuk Databricks Connect.

Visual Studio Code

Untuk ekstensi Databricks untuk Visual Studio Code, lakukan hal berikut:

  1. Atur nilai dalam file .databrickscfg Anda untuk operasi tingkat ruang kerja Azure Databricks sebagaimana ditentukan pada tab Profil.
  2. Di panel Konfigurasi ekstensi Databricks untuk Visual Studio Code, klik Konfigurasikan Databricks.
  3. Di Palet Perintah, untuk Host Databricks, masukkan URL per-kantor, sebagai contoh https://adb-1234567890123456.7.azuredatabricks.net, dan lalu tekan Enter.
  4. Di Palet Perintah, pilih nama profil target Anda dari daftar untuk URL Anda.

Untuk detail selengkapnya, lihat Menyiapkan otorisasi untuk ekstensi Databricks untuk Visual Studio Code.

Terraform

Operasi tingkat akun

Untuk autentikasi bawaan:

provider "databricks" {
  alias = "accounts"
}

Untuk konfigurasi langsung:

provider "databricks" {
  alias         = "accounts"
  host          = <retrieve-account-console-url>
  account_id    = <retrieve-account-id>
  client_id     = <retrieve-client-id>
  client_secret = <retrieve-client-secret>
}

Gantilah placeholder retrieve dengan implementasi Anda sendiri untuk mengambil nilai dari konsol atau dari penyimpanan konfigurasi lainnya, seperti HashiCorp Vault. Lihat juga Penyedia Vault. Dalam hal ini, URL konsol akun Azure Databricks adalah https://accounts.azuredatabricks.net.

Operasi tingkat ruang kerja

Untuk konfigurasi default:

provider "databricks" {
  alias = "workspace"
}

Untuk konfigurasi langsung:

provider "databricks" {
  alias         = "workspace"
  host          = <retrieve-workspace-url>
  client_id     = <retrieve-client-id>
  client_secret = <retrieve-client-secret>
}

Gantilah placeholder retrieve dengan implementasi Anda sendiri untuk mengambil nilai dari konsol atau dari penyimpanan konfigurasi lainnya, seperti HashiCorp Vault. Lihat juga Penyedia Vault. Pada kasus ini, host adalah URL per ruang kerja Azure Databricks, misalnya https://adb-1234567890123456.7.azuredatabricks.net.

Untuk informasi selengkapnya tentang mengautentikasi dengan penyedia Databricks Terraform, lihat Autentikasi.

Phyton

Operasi pada tingkat akun

Untuk konfigurasi default:

from databricks.sdk import AccountClient

a = AccountClient()
# ...

Untuk konfigurasi langsung:

from databricks.sdk import AccountClient

a = AccountClient(
  host          = retrieve_account_console_url(),
  account_id    = retrieve_account_id(),
  client_id     = retrieve_client_id(),
  client_secret = retrieve_client_secret()
)
# ...

Ganti placeholder retrieve dengan menggunakan implementasi Anda sendiri, untuk mengambil nilai dari konsol atau penyimpanan konfigurasi lainnya, seperti Azure KeyVault. Dalam hal ini, URL konsol akun Azure Databricks adalah https://accounts.azuredatabricks.net.

Operasi tingkat ruang kerja

Untuk konfigurasi bawaan:

from databricks.sdk import WorkspaceClient

w = WorkspaceClient()
# ...

Untuk konfigurasi langsung:

from databricks.sdk import WorkspaceClient

w = WorkspaceClient(
  host          = retrieve_workspace_url(),
  client_id     = retrieve_client_id(),
  client_secret = retrieve_client_secret()
)
# ...

retrieve Ganti tempat penampung dengan implementasi Anda sendiri untuk mengambil nilai dari konsol, atau penyimpanan konfigurasi lainnya, seperti Azure KeyVault. Pada kasus ini, host adalah URL per ruang kerja Azure Databricks, misalnya https://adb-1234567890123456.7.azuredatabricks.net.

Untuk informasi selengkapnya tentang mengautentikasi dengan alat databricks dan SDK yang menggunakan Python dan menerapkan autentikasi terpadu, lihat:

Catatan

Ekstensi Databricks untuk Visual Studio Code menggunakan Python tetapi belum menerapkan autentikasi perwakilan layanan OAuth.

Java

Operasi tingkat ruang kerja

Untuk konfigurasi default:

import com.databricks.sdk.WorkspaceClient;
// ...
WorkspaceClient w = new WorkspaceClient();
// ...

Untuk konfigurasi langsung:

import com.databricks.sdk.WorkspaceClient;
import com.databricks.sdk.core.DatabricksConfig;
// ...
DatabricksConfig cfg = new DatabricksConfig()
  .setHost(retrieveWorkspaceUrl())
  .setClientId(retrieveClientId())
  .setClientSecret(retrieveClientSecret());
WorkspaceClient w = new WorkspaceClient(cfg);
// ...

Gantilah placeholder retrieve dengan implementasi Anda sendiri untuk mengambil nilai dari konsol atau penyimpanan konfigurasi lainnya, seperti Azure KeyVault. Dalam hal ini, host adalah URL per ruang kerja Azure Databricks, misalnya https://adb-1234567890123456.7.azuredatabricks.net.

Untuk informasi selengkapnya tentang mengautentikasi dengan alat databricks dan SDK yang menggunakan Java dan menerapkan autentikasi terpadu, lihat:

Pergi

Operasi tingkat akun

Konfigurasi default:

import "github.com/databricks/databricks-sdk-go"

// Uses environment configuration automatically
a := databricks.Must(databricks.NewAccountClient())

Untuk konfigurasi langsung:

import (
  "github.com/databricks/databricks-sdk-go"
)
// ...
a := databricks.Must(databricks.NewAccountClient(&databricks.Config{
  Host:         retrieveWorkspaceUrl(),
  ClientId:     retrieveClientId(),
  ClientSecret: retrieveClientSecret(),
}))
// ...

Gantikan retrieve placeholder dengan implementasi Anda sendiri untuk mengambil nilai dari konsol, atau penyimpanan konfigurasi lainnya, seperti Azure KeyVault. Dalam hal ini, URL konsol akun Azure Databricks adalah https://accounts.azuredatabricks.net.

Operasi tingkat ruang kerja

Untuk konfigurasi bawaan:

import "github.com/databricks/databricks-sdk-go"

// Uses environment configuration automatically
w := databricks.Must(databricks.NewWorkspaceClient())

Untuk konfigurasi langsung:

import "github.com/databricks/databricks-sdk-go"
// ...
w := databricks.Must(databricks.NewWorkspaceClient(&databricks.Config{
    Host:         retrieveAccountConsoleUrl(),
    ClientId:     retrieveClientId(),
    ClientSecret: retrieveClientSecret(),
}))
// ...

Gantilah retrieve placeholder dengan implementasi Anda sendiri untuk mengambil nilai dari konsol atau penyimpanan konfigurasi lainnya, seperti Azure KeyVault. Dalam hal ini, host adalah URL per ruang kerja Azure Databricks, misalnya https://adb-1234567890123456.7.azuredatabricks.net.

Untuk informasi selengkapnya tentang mengautentikasi dengan alat databricks dan SDK yang menggunakan Go dan yang mengimplementasikan autentikasi terpadu klien Databricks, lihat Mengautentikasi Databricks SDK for Go dengan akun atau ruang kerja Azure Databricks Anda.

Membuat token akses M2M OAuth secara manual

Bagian ini untuk alat atau layanan yang tidak mendukung autentikasi terpadu Databricks. Jika Anda perlu membuat, merefresh, atau menggunakan token OAuth Azure Databricks secara manual untuk autentikasi M2M, ikuti langkah-langkah ini.

Untuk menghasilkan token akses M2M OAuth, gunakan ID klien perwakilan layanan dan rahasia OAuth. Setiap token akses berlaku selama satu jam. Setelah kedaluwarsa, minta token baru. Anda dapat menghasilkan token di tingkat akun atau ruang kerja:

Membuat token akses tingkat akun

Gunakan token tingkat akun untuk memanggil REST API untuk akun dan ruang kerja apa pun yang dapat diakses oleh perwakilan layanan.

  1. Temukan ID akun Anda.

  2. Buat URL titik akhir token dengan mengganti <account-id> di URL berikut dengan ID akun Anda.

    https://accounts.azuredatabricks.net/oidc/accounts/<my-account-id>/v1/token
    
  3. Gunakan curl untuk meminta token akses OAuth. Replace:

    • <token-endpoint-URL> dengan URL di atas.
    • <client-id> dengan ID klien perwakilan layanan (ID aplikasi).
    • <client-secret> dengan rahasia OAuth perwakilan layanan.
    export CLIENT_ID=<client-id>
    export CLIENT_SECRET=<client-secret>
    
      curl --request POST \
      --url <token-endpoint-URL> \
      --user "$CLIENT_ID:$CLIENT_SECRET" \
      --data 'grant_type=client_credentials&scope=all-apis'
    

    Ini menghasilkan respons yang mirip dengan:

    {
      "access_token": "eyJraWQiOiJkYTA4ZTVjZ…",
      "token_type": "Bearer",
      "expires_in": 3600
    }
    

    Cakupan all-apis meminta token akses OAuth yang memungkinkan perwakilan layanan untuk memanggil Databricks REST API apa pun yang memiliki izin untuk diakses.

  4. Salin nilai access_token dari respons.

Membuat token akses tingkat ruang kerja

Gunakan token di tingkat ruang kerja hanya dengan REST API pada ruang kerja tersebut.

  1. Buat URL titik akhir token dengan mengganti <databricks-instance> dengan <databricks-instance> Azure Databricks Anda, misalnya adb-1234567890123456.7.azuredatabricks.net:

    https://<databricks-instance>/oidc/v1/token
    
  2. Gunakan curl untuk meminta token akses OAuth. Replace:

    • <token-endpoint-URL> dengan URL di atas.
    • <client-id> dengan ID klien perwakilan layanan (ID aplikasi).
    • <client-secret> dengan rahasia OAuth perwakilan layanan.
    export CLIENT_ID=<client-id>
    export CLIENT_SECRET=<client-secret>
    
    curl --request POST \
    --url <token-endpoint-URL> \
    --user "$CLIENT_ID:$CLIENT_SECRET" \
    --data 'grant_type=client_credentials&scope=all-apis'
    

    Ini menghasilkan respons yang mirip dengan:

    {
      "access_token": "eyJraWQiOiJkYTA4ZTVjZ…",
      "token_type": "Bearer",
      "expires_in": 3600
    }
    
  3. Salin nilai access_token dari respons.

Catatan

Untuk menghasilkan token untuk titik akhir penyajian, sertakan ID titik akhir dan tindakan dalam permintaan Anda. Lihat Mengambil token OAuth secara manual.

Memanggil REST API Azure Databricks

Gunakan token akses OAuth untuk memanggil REST API tingkat akun atau tingkat ruang kerja . Untuk memanggil API tingkat akun, perwakilan layanan harus menjadi admin akun.

Sertakan token di header otorisasi dengan autentikasi Bearer.

Contoh permintaan REST API tingkat akun

Contoh ini mencantumkan semua ruang kerja untuk akun. Replace:

  • <oauth-access-token> dengan token akses OAuth perwakilan layanan.
  • <account-id> dengan ID akun Anda.
export OAUTH_TOKEN=<oauth-access-token>

curl --request GET --header "Authorization: Bearer $OAUTH_TOKEN" \
'https://accounts.azuredatabricks.net/api/2.0/accounts/<account-id>/workspaces'

Contoh permintaan REST API tingkat ruang kerja

Contoh ini mencantumkan semua kluster yang tersedia di ruang kerja. Replace:

  • <oauth-access-token> dengan token akses OAuth perwakilan layanan.
  • <databricks-instance> dengan nama instans ruang kerja Azure Databricks, misalnya adb-1234567890123456.7.azuredatabricks.net.
export OAUTH_TOKEN=<oauth-access-token>

curl --request GET --header "Authorization: Bearer $OAUTH_TOKEN" \
'https://<workspace-URL>/api/2.0/clusters/list'

Memecahkan masalah autentikasi M2M OAuth

Gunakan langkah-langkah ini untuk memperbaiki masalah paling umum dengan autentikasi Databricks OAuth M2M untuk perwakilan layanan.

Pemeriksaan cepat

Mulailah dengan memverifikasi masalah konfigurasi umum ini yang menyebabkan kegagalan autentikasi OAuth M2M:

  • Kredensial:DATABRICKS_CLIENT_ID diatur ke ID aplikasi perwakilan layanan (ID klien), dan DATABRICKS_CLIENT_SECRET diatur ke nilai rahasia OAuth, keduanya tanpa ruang tambahan.
  • Host: mengarah ke DATABRICKS_HOST untuk operasi akun atau https://accounts.azuredatabricks.net, misalnya untuk operasi ruang kerja. Jangan sertakan /api.
  • Tugas: Perwakilan layanan ditetapkan ke ruang kerja target.
  • Izin: Perwakilan layanan memiliki izin yang diperlukan pada sumber daya target.
  • Konflik: Tidak ada variabel yang bertentangan yang ditetapkan seperti DATABRICKS_TOKEN, DATABRICKS_USERNAME. Jalankan env | grep DATABRICKS dan hapus konflik.
  • Perkakas: Gunakan autentikasi terpadu dan versi CLI atau SDK saat ini.

401 Tidak Sah

Kemungkinan penyebab dan perbaikan:

  • ID Klien atau Rahasia tidak valid: Salin DATABRICKS_CLIENT_ID ulang dan DATABRICKS_CLIENT_SECRET. Regenerasikan kunci rahasia jika tidak yakin.
  • Rahasia kedaluwarsa: Buat rahasia baru jika yang saat ini kedaluwarsa.
  • Penerbit token yang salah: Untuk M2M, gunakan titik akhir token OAuth Databricks, bukan IdP atau titik akhir token cloud Anda.
  • Ketidakcocokan host: Jika Anda mengautentikasi untuk API ruang kerja, DATABRICKS_HOST harus berupa URL ruang kerja yang Anda panggil.

403 Dilarang

Kemungkinan penyebab dan perbaikan:

  • Izin sumber daya yang hilang: Berikan prinsipal layanan CAN USE atau CAN MANAGE di kluster atau gudang SQL, dan izin tingkat objek yang diperlukan untuk notebook, pekerjaan, atau data.
  • Tidak ada penetapan ruang kerja: Tetapkan perwakilan layanan ke ruang kerja di konsol akun.
  • Akses ADMIN API: Untuk API khusus admin, tetapkan perwakilan layanan ke grup admin ruang kerja atau berikan izin admin akun.

Masalah konfigurasi

Gejala-gejala termasuk kedaluwarsa waktu, "host tidak ditemukan," "akun tidak ditemukan," atau "ruang kerja tidak ditemukan."

Fixes:

  • Aturan host: Gunakan URL konsol akun untuk API akun. Gunakan URL ruang kerja untuk API ruang kerja. Jangan sertakan akhiran /api .
  • ID Akun: Pasokan DATABRICKS_ACCOUNT_ID hanya untuk operasi tingkat akun. Gunakan UUID dari konsol akun.
  • Pemilihan profil: Jika Anda menggunakan beberapa profil, lewatkan --profile <name> atau atur DATABRICKS_CONFIG_PROFILE.

Connectivity

Jika autentikasi M2M OAuth gagal karena masalah jaringan, gunakan pengujian ini untuk memverifikasi bahwa lingkungan Anda dapat mencapai titik akhir Databricks:

  • DNS:nslookup <your-host> (harus mengembalikan alamat IP untuk nama host)
  • TLS dan keterjangkauan:curl -I https://<your-host> (harus mengembalikan status HTTP 200, 401, atau 403)
  • Jaringan perusahaan: Konfirmasikan bahwa aturan proksi atau firewall mengizinkan HTTPS ke titik akhir Databricks

Sumber Daya Tambahan: