Cloud Composer 1 | Cloud Composer 2 | Cloud Composer 3
Halaman ini menunjukkan cara menggunakan Secret Manager untuk menyimpan koneksi dan secret Airflow dengan aman.
Mengonfigurasi Secret Manager untuk lingkungan Anda
Bagian ini menjelaskan cara mengonfigurasi Secret Manager agar Anda dapat menggunakan secret dengan lingkungan Cloud Composer Anda.
Mengaktifkan Secret Manager API
Konsol
Aktifkan API Secret Manager.
gcloud
Aktifkan API Secret Manager:
gcloud services enable secretmanager.googleapis.com
Konfigurasi kontrol akses
Anda harus mengonfigurasi kontrol akses agar Airflow dapat mengakses secret yang disimpan di {i>Secret Manager<i}.
Untuk melakukannya, akun layanan yang
mengakses rahasia harus memiliki peran
izin secretmanager.versions.access
. Misalnya,
peran Secret Manager Secret Accessor mencakup izin ini.
Anda dapat memberikan peran ini di Level Rahasia, Project, Folder, atau Org.
Gunakan salah satu opsi berikut:
(Direkomendasikan) Berikan peran ini ke akun layanan lingkungan Anda.
Ganti akun layanan yang digunakan Airflow {i>Secret Manager<i}.
- Berikan peran ini ke akun layanan.
- Setel parameter
gcp_key_path
elemenbackend_kwargs
Opsi konfigurasi Airflow agar mengarah ke file JSON dengan kredensial akun layanan.
Mengaktifkan dan mengonfigurasi backend Secret Manager
Ganti opsi konfigurasi Airflow berikut:
Bagian Kunci Nilai secrets
backend
airflow.providers.google.cloud.secrets.secret_manager.CloudSecretManagerBackend
Tambahkan setelan opsional dengan mengganti Airflow berikut opsi konfigurasi:
Bagian Kunci Nilai secrets
backend_kwargs
Lihat deskripsi berikut. Nilai
backend_kwargs
adalah representasi JSON dari Objekbackend_kwargs
dengan kolom berikut:connections_prefix
: awalan nama rahasia yang akan dibaca untuk mendapatkan Koneksi. Defaultnya adalahairflow-connections
.variables_prefix
: awalan nama rahasia yang akan dibaca untuk mendapatkan Variabel. Defaultnya adalah:airflow-variables
.gcp_key_path
: jalur ke file JSON Kredensial Google Cloud (jika tidak disediakan, akun layanan default akan digunakan).gcp_keyfile_dict
: Kamus JSON Kredensial Google Cloud. Mutually eksklusif dengangcp_key_path
.sep
: pemisah yang digunakan untuk menggabungkanconnections_prefix
danconn_id
. Defaultnya adalah-
.project_id
: ID Project Google Cloud tempat secret disimpan.
Misalnya, nilai
backend_kwargs
dapat berupa:{"project_id": "<project id>", "connections_prefix":"example-connections", "variables_prefix":"example-variables", "sep":"-"}
.
Menambahkan koneksi dan variabel di Secret Manager
Buat secret dengan mengikuti langkah-langkah yang diuraikan di Membuat secret dan versi.
Variabel
- Harus menggunakan format
[variables_prefix][sep][variable_name]
. - Nilai default untuk
[variables_prefix]
adalahairflow-variables
. - Pemisah default
[sep]
adalah-
.
Misalnya, jika nama variabel adalah example-var
, nama rahasia
adalah airflow-variables-example-var
.
Nama koneksi
- Harus menggunakan format
[connection_prefix][sep][connection_name]
. - Nilai default untuk
[connection_prefix]
adalahairflow-connections
. - Pemisah default
[sep]
adalah-
.
Misalnya, jika nama koneksi adalah exampleConnection
, maka secret
namanya adalah airflow-connections-exampleConnection
.
Nilai koneksi
Harus menggunakan Representasi URI. Contoh,
postgresql://login:secret@examplehost:9000
.URI harus dienkode URL (enkode persen). Misalnya, {i>password<i} yang memiliki simbol spasi di dalamnya harus dienkode ke URL sebagai berikut:
postgresql://login:secret%20password@examplehost:9000
.
Airflow memiliki metode yang praktis untuk membuat koneksi URI. Tersedia contoh cara mengenkode URL kompleks dengan tambahan JSON dalam dokumentasi Airflow.
Menggunakan Secret Manager dengan Cloud Composer
Saat mengambil variabel dan koneksi, Cloud Composer akan memeriksa menggunakan Secret Manager terlebih dahulu. Jika variabel atau koneksi yang diminta tidak ditemukan, Cloud Composer kemudian memeriksa variabel lingkungan dan database Airflow.
Membaca variabel menggunakan template Jinja
Anda dapat menggunakan {i>Secret Manager<i} untuk membaca variabel dengan Template Jinja untuk kolom operator dengan template (diselesaikan pada waktu eksekusi).
Untuk rahasia airflow-variables-secret_filename
:
file_name = '{{var.value.secret_filename}}'
Membaca variabel menggunakan operator dan callback kustom
Anda juga dapat menggunakan Secret Manager untuk membaca variabel dalam operator atau metode callback dari operator. Membaca variabel dari di dalam DAG dapat berdampak negatif terhadap performa, jadi gunakan template Jinja jika ingin menggunakan variabel di DAG.
Misalnya, untuk rahasia airflow-variables-secret_filename
:
from airflow.models.variable import Variable
file_name = Variable.get('secret_filename')
Membaca koneksi
Kecuali jika Anda sedang menulis operator khusus, Anda tidak perlu terlalu sering mengakses koneksi secara langsung. Sebagian besar hook mendapatkan nama koneksi sebagai parameter pembuatan instance, dan harus mengambil koneksi dari secret backend secara otomatis ketika tugas dijalankan.
Membaca koneksi secara langsung mungkin berguna saat menulis hook Anda sendiri.
Misalnya, untuk koneksi airflow-connections-exampleConnection
:
from airflow.hooks.base_hook import BaseHook
exampleConnection = BaseHook.get_connection('exampleConnection')
BaseHook.get_connection
menampilkan objek Connection
. Penting
mungkin untuk mendapatkan representasi string URI dari koneksi seperti ini:
exampleConnectionUri = BaseHook.get_connection('exampleConnection').get_uri()