Menyimpan secret akun layanan di Hashicorp Vault
Fitur ini memungkinkan Anda menyimpan sertifikat akun layanan Google untuk Apigee Hybrid di Hashicorp Vault, pengelola secret eksternal. Pengelola secret eksternal memungkinkan Anda mengelola cara data disimpan di Kubernetes, termasuk mengelola residensi data dan kontrol akses terperinci.
Jika Anda tidak menggunakan Workload Identity di cluster GKE atau Workload Identity Federation di EKS dan AKS, komponen campuran Apigee Anda harus mengautentikasi akun layanan Google agar dapat melakukan tugasnya. Ada tiga metode untuk menyimpan dan mereferensikan kunci akun layanan Google di Apigee hybrid:
-
File sertifikat akun layanan (file
.json
) yang disimpan di hard drive. Lihat ini dalam penggantian Anda dengan properti konfigurasiserviceAccountPath
. Contoh:logger: serviceAccountPath: service-accounts/myhybridorg-apigee-logger.json
-
File sertifikat akun layanan (file
.json
) yang disimpan di hard drive. Lihat ini dalam penggantian Anda dengan properti konfigurasiserviceAccountPath
. Lihat Tentang akun layanan. -
Sertifikat akun layanan yang disimpan dalam secret Kubernetes. Lihat ini dalam penggantian Anda dengan properti konfigurasi
serviceAccountRef
. Lihat Menyimpan data di secret Kubernetes. -
Sertifikat akun layanan yang disimpan di Hashicorp Vault, yang dijelaskan dalam panduan ini. Lihat ini dalam penggantian Anda dengan properti konfigurasi
serviceAccountSecretProviderClass
.
Menyiapkan untuk menyimpan secret akun layanan di Vault
Menginstal driver CSI dan penyedia Vault
Jika Anda belum menginstal driver CSI di cluster menggunakan Helm, ikuti petunjuk di Driver CSI Secrets Store: Penginstalan. Untuk mengetahui informasi selengkapnya, lihat Menginstal penyedia CSI Vault dalam dokumentasi Vault.
Lihat Platform dan versi yang didukung Apigee hybrid untuk mengetahui versi Driver CSI minimum yang didukung oleh Apigee hybrid.
Membuat secret, kebijakan, dan peran Vault
Gunakan UI atau API Vault untuk membuat secret dan memberikan izin bagi akun layanan Kubernetes yang digunakan oleh Apigee hybrid untuk membaca secret tersebut.
-
Buat secret khusus organisasi dan lingkungan dalam format berikut:
Kunci Rahasia Data Rahasia secret/data/apigee/orgsakeys
{ "cassandraBackup": "***", "cassandraRestore": "***", "connectAgent": "***", "logger": "***", "mart": "***", "metrics": "***", "mint": "***", "udca": "***", "watcher": "***" }
secret/data/apigee/envsakeys-ENV_NAME
{ "runtime": "***", "synchronizer": "***", "udca": "***". }
Ganti
"***"
di setiap pasangan dengan konten file .json untuk akun layanan google yang sesuai dengan komponen apigee.apigee-cassandra-backup
danapigee-cassandra-restore
menggunakan akun layananapigee-cassandra
. Contoh:{ "cassandraBackup": "{ "type": "service_account", "project_id": "myhybridorg", "private_key_id": "PRIVATE_KEY_ID", "private_key": "-----BEGIN PRIVATE KEY-----\nPRIVATE_KEY_TEXT\n-----END PRIVATE KEY-----\n", "client_email": "apigee-cassandra@myhybridorg.iam.gserviceaccount.com", "client_id": "123456789012345678901", "auth_uri": "https://accounts.google.com/o/oauth2/auth", "token_uri": "https://oauth2.googleapis.com/token", "auth_provider_x509_cert_url": "https://www.googleapis.com/oauth2/v1/certs", "client_x509_cert_url": "https://www.googleapis.com/robot/v1/metadata/x509/apigee-cassandra%40myhybridorg.iam.gserviceaccount.com", "universe_domain": "googleapis.com" }", "cassandraRestore":... ... }
- Berikan akses ke secret organisasi. Buat file teks bernama orgsakeys-auth-policy.txt dengan konten berikut:
path "secret/data/apigee/orgsakeys" { capabilities = ["read"] }
-
Dalam Vault, buat kebijakan yang memberikan akses ke secret organisasi:
vault policy write apigee-orgsakeys-auth orgsakeys-auth-policy.txt
-
Untuk setiap lingkungan, buat file teks bernama
envsakeys-ENV_NAME-auth-policy.txt
dengan konten berikut:path "secret/data/apigee/envsakeys-ENV_NAME" { capabilities = ["read"] }
Ulangi langkah ini untuk setiap lingkungan.
-
Dalam Vault, buat kebijakan yang memberikan akses ke secret lingkungan:
vault policy write apigee-envsakeys-ENV_NAME-auth envsakeys-ENV_NAME-auth-policy.txt
Ulangi langkah ini untuk setiap lingkungan.
-
Buat skrip bernama
generate-encoded-sas.sh
dengan konten berikut:# generate-encoded-sas.sh ORG=$APIGEE_ORG # Apigee organization name ENVS=$APIGEE_ENV_LIST # comma separated env names, for example: dev,prod ORG_SHORT_NAME=$(echo $ORG | head -c 15) ENCODE=$(echo -n $ORG | shasum -a 256 | head -c 7) ORG_ENCODE=$(echo "$ORG_SHORT_NAME-$ENCODE") NAMES=apigee-manager,apigee-cassandra-default,apigee-cassandra-backup-sa,apigee-cassandra-restore-sa,apigee-cassandra-schema-setup-${ORG_ENCODE},apigee-cassandra-schema-val-${ORG_ENCODE},apigee-cassandra-user-setup-${ORG_ENCODE},apigee-mart-${ORG_ENCODE},apigee-mint-task-scheduler-${ORG_ENCODE},apigee-connect-agent-${ORG_ENCODE},apigee-watcher-${ORG_ENCODE},apigee-udca-${ORG_ENCODE},apigee-metrics-apigee-telemetry,apigee-open-telemetry-collector-apigee-telemetry,apigee-logger-apigee-telemetry for ENV in ${ENVS//,/ } do ENV_SHORT_NAME=$(echo $ENV | head -c 15) ENCODE=$(echo -n $ORG:$ENV | shasum -a 256 | head -c 7) ENV_ENCODE=$(echo "$ORG_SHORT_NAME-$ENV_SHORT_NAME-$ENCODE") NAMES+=,apigee-synchronizer-${ENV_ENCODE},apigee-runtime-${ENV_ENCODE} done echo $NAMES
-
Jalankan skrip untuk membuat daftar nama akun layanan yang akan mengikat kebijakan ke:
./generate-encoded-sas.sh
Output Anda akan berupa daftar nama akun layanan Kubernetes yang dipisahkan koma, mirip dengan contoh berikut:
./generate-encoded-sas.sh
apigee-manager,apigee-cassandra-default,apigee-cassandra-backup-sa, apigee-cassandra-restore-sa,apigee-cassandra-schema-setup-myhybrido rg-5b044c1,apigee-cassandra-schema-val-myhybridorg-5b044c1,apigee-c assandra-user-setup-myhybridorg-5b044c1,apigee-mart-myhybridorg-5b0 44c1,apigee-mint-task-scheduler-myhybridorg-5b044c1,apigee-connect- agent-myhybridorg-5b044c1,apigee-watcher-myhybridorg-5b044c1,apigee -udca-myhybridorg-5b044c1,apigee-metrics-apigee-telemetry,apigee-op en-telemetry-collector-apigee-telemetry,apigee-logger-apigee-teleme try,apigee-synchronizer-myhybridorg-dev-ee52aca,apigee-runtime-myhy bridorg-dev-ee52aca,apigee-synchronizer-myhybridorg-prod-2d0221c,ap igee-runtime-myhybridorg-prod-2d0221c -
Salin teks output ke dalam dan pisahkan menjadi daftar, satu daftar untuk nama akun layanan org dan daftar terpisah untuk nama akun layanan env untuk setiap lingkungan. Akun layanan org berada di urutan pertama dalam daftar output hingga
apigee-logger-apigee-telemetry
.Daftar nama layanan org dari contoh sebelumnya:
apigee-manager,apigee-cassandra-default,apigee-cassandra-backup-sa, apigee-cassandra-restore-sa,apigee-cassandra-schema-setup-myhybrido rg-5b044c1,apigee-cassandra-schema-val-myhybridorg-5b044c1,apigee-c assandra-user-setup-myhybridorg-5b044c1,apigee-mart-myhybridorg-5b0 44c1,apigee-mint-task-scheduler-myhybridorg-5b044c1,apigee-connect- agent-myhybridorg-5b044c1,apigee-watcher-myhybridorg-5b044c1,apigee -udca-myhybridorg-5b044c1,apigee-metrics-apigee-telemetry,apigee-op en-telemetry-collector-apigee-telemetry,apigee-logger-apigee-teleme try
Nama akun layanan env memiliki pola
apigee-synchronizer-ORG_NAME-ENV_NAME-HASH_TEXT
danapigee-runtime-ORG_NAME-ENV_NAME-HASH_TEXT
. Pisahkan ke dalam daftar terpisah untuk setiap lingkungan. Misalnya, output dari contoh sebelumnya dapat dipisahkan menjadi dua daftar berikut:Lingkungan
dev
:apigee-synchronizer-myhybridorg-dev-ee52aca,apigee-runtime-myhybrid org-dev-ee52aca
Lingkungan
prod
:apigee-synchronizer-myhybridorg-prod-2d0221c,apigee-runtime-myhybri dorg-prod-2d0221c
-
Dengan menggunakan kebijakan, buat peran Vault yang mengikat akun layanan Apigee khusus organisasi:
vault write auth/kubernetes/role/apigee-orgsakeys \ bound_service_account_names=LIST_OF_ORG_SA_NAMES \ bound_service_account_namespaces=apigee \ policies=apigee-orgsakeys-auth \ ttl=1m
-
Untuk setiap lingkungan, buat peran Vault untuk kunci akun layanannya:
vault write auth/kubernetes/role/apigee-envsakeys-ENV_NAME \ bound_service_account_names=LIST_OF_ENV_NAME_SA_NAMES \ bound_service_account_namespaces=apigee \ policies=apigee-envsakeys-ENV_NAME-auth \ ttl=1m
Ulangi langkah ini untuk setiap lingkungan.
Membuat objek SecretProviderClass
Resource SecretProviderClass
memberi tahu driver CSI penyedia yang akan diajak berkomunikasi saat meminta secret. Kunci akun layanan harus dikonfigurasi melalui objek ini. Tabel berikut menunjukkan nama file (objectNames
) yang diharapkan oleh Apigee Hybrid:
Akun layanan | Nama file rahasia yang diharapkan |
---|---|
Pencadangan Cassandra | cassandraBackup |
Pemulihan Cassandra | cassandraRestore |
Agen Connect | connectAgent |
Logger | logger |
MART | mart |
Metrik | metrics |
Monetisasi | mint |
Runtime | runtime |
Synchronizer | synchronizer |
UDCA | udca |
Watcher | watcher |
-
Gunakan template
SecretProviderClass
berikut untuk mengonfigurasi resource ini untuk secret khusus organisasi:apiVersion: secrets-store.csi.x-k8s.io/v1 kind: SecretProviderClass metadata: name: apigee-orgsakeys-spc spec: provider: vault parameters: roleName: apigee-orgsakeys vaultAddress: VAULT_ADDRESS # "objectName" is an alias used within the SecretProviderClass to reference # that specific secret. This will also be the filename containing the secret. # Apigee Hybrid expects these exact values so they must not be changed. # "secretPath" is the path in Vault where the secret should be retrieved. # "secretKey" is the key within the Vault secret response to extract a value from. objects: | - objectName: "cassandraBackup" secretPath: "" secretKey: "" - objectName: "cassandraRestore" secretPath: "" secretKey: "" - objectName: "connectAgent" secretPath: "" secretKey: "" - objectName: "logger" secretPath: "" secretKey: "" - objectName: "mart" secretPath: "" secretKey: "" - objectName: "metrics" secretPath: "" secretKey: "" - objectName: "mint" secretPath: "" secretKey: "" - objectName: "udca" secretPath: "" secretKey: "" - objectName: "watcher" secretPath: "" secretKey: ""
VAULT_ADDRESS adalah endpoint tempat server Vault Anda berjalan. Jika Vault berjalan di cluster yang sama dengan Apigee, formatnya umumnya akan berupa
http://vault.APIGEE_NAMESPACE.svc.cluster.local:VAULT_SERVICE_PORT
.Simpan template ke file bernama
spc-org.yaml
. -
Terapkan
SecretProviderClass
khusus organisasi ke namespace apigee Anda:kubectl -n APIGEE_NAMESPACE apply -f spc-org.yaml
-
Untuk setiap lingkungan, gunakan template
SecretProviderClass
berikut untuk mengonfigurasi resource ini untuk secret khusus lingkungan. Ulangi langkah ini untuk setiap lingkungan:apiVersion: secrets-store.csi.x-k8s.io/v1 kind: SecretProviderClass metadata: name: apigee-envsakeys-ENV_NAME-spc spec: provider: vault parameters: roleName: apigee-envsakeys-ENV_NAME vaultAddress: VAULT_ADDRESS # "objectName" is an alias used within the SecretProviderClass to reference # that specific secret. This will also be the filename containing the secret. # Apigee Hybrid expects these exact values so they must not be changed. # "secretPath" is the path in Vault where the secret should be retrieved. # "secretKey" is the key within the Vault secret response to extract a value from. objects: | - objectName: "runtime" secretPath: "" secretKey: "" - objectName: "synchronizer" secretPath: "" secretKey: "" - objectName: "udca" secretPath: "" secretKey: ""
VAULT_ADDRESS adalah endpoint tempat server Vault Anda berjalan. Jika Vault berjalan di cluster dan namespace yang sama dengan Apigee, formatnya umumnya akan berupa
http://vault.APIGEE_NAMESPACE.svc.cluster.local:VAULT_SERVICE_PORT
.Simpan template ke file bernama
spc-env-ENV_NAME.yaml
. -
Untuk setiap lingkungan, terapkan
SecretProviderClass
khusus lingkungan ke namespace apigee Anda:kubectl -n APIGEE_NAMESPACE apply -f spc-env-ENV_NAME.yaml
Ulangi langkah ini untuk setiap lingkungan.
Mengaktifkan secret eksternal untuk akun layanan Google
-
Dalam file penggantian, tambahkan properti konfigurasi
serviceAccountSecretProviderClass
danenvs[].serviceAccountSecretProviderClass
untuk mengaktifkan penggunaan secret eksternal untuk akun layanan Google. Anda dapat menghapus atau mengomentari properti konfigurasiserviceAccountPath
danserviceAccountPaths
:serviceAccountSecretProviderClass: apigee-orgsakeys-spc envs: - name: ENV_NAME serviceAccountSecretProviderClass: apigee-envsakeys-ENV_NAME-spc
-
Terapkan setiap diagram Helm:
helm upgrade datastore apigee-datastore/ \ --install \ --namespace APIGEE_NAMESPACE \ --atomic \ -f overrides.yaml
helm upgrade telemetry apigee-telemetry/ \ --install \ --namespace APIGEE_NAMESPACE \ --atomic \ -f overrides.yaml
helm upgrade redis apigee-redis/ \ --install \ --namespace APIGEE_NAMESPACE \ --atomic \ -f overrides.yaml
helm upgrade ORG_NAME apigee-org/ \ --install \ --namespace APIGEE_NAMESPACE \ --atomic \ -f overrides.yaml
-
Untuk setiap lingkungan, terapkan diagram
apigee-env
:helm upgrade ENV_NAME apigee-env/ \ --install \ --namespace APIGEE_NAMESPACE \ --set env=ENV_NAME \ --atomic \ -f overrides.yaml
Melakukan rollback untuk menggunakan file sertifikat akun layanan
Jika Anda perlu melakukan rollback untuk menggunakan file sertifikat akun layanan Google yang tersimpan, gunakan prosedur berikut:
-
Perbarui file penggantian Anda:
-
Hapus atau jadikan baris
serviceAccountSecretProviderClass
danenvs:serviceAccountSecretProviderClass
sebagai komentar. -
Tambahkan properti konfigurasi
serviceAccountPath
danserviceAccountPaths
dengan jalur ke akun layanan yang sesuai.
Contoh:
# serviceAccountSecretProviderClass: apigee-orgsakeys-spc - (commented out) cassandra: backup: serviceAccountPath: service-accounts/myhybridorg-apigee-cassandra.json restore: serviceAccountPath: service-accounts/myhybridorg-apigee-cassandra.json connectAgent: serviceAccountPath: service-accounts/myhybridorg-apigee-mart.json envs: - name: test # serviceAccountSecretProviderClass: apigee-envsakeys-spc - (commented out) serviceAccountPaths: runtime: service-accounts/myhybridorg-apigee-runtime.json synchronizer: service-accounts/myhybridorg-apigee-synchronizer.json logger: serviceAccountPath: service-accounts/myhybridorg-apigee-logger.json mart: serviceAccountPath: service-accounts/myhybridorg-apigee-mart.json metrics: serviceAccountPath: service-accounts/myhybridorg-apigee-metrics.json udca: serviceAccountPath: service-accounts/myhybridorg-apigee-udca.json watcher: serviceAccountPath: service-accounts/myhybridorg-apigee-watcher.json
-
Hapus atau jadikan baris
-
Terapkan setiap diagram Helm:
helm upgrade datastore apigee-datastore/ \ --install \ --namespace APIGEE_NAMESPACE \ --atomic \ -f overrides.yaml
helm upgrade telemetry apigee-telemetry/ \ --install \ --namespace APIGEE_NAMESPACE \ --atomic \ -f overrides.yaml
helm upgrade redis apigee-redis/ \ --install \ --namespace APIGEE_NAMESPACE \ --atomic \ -f overrides.yaml
helm upgrade ORG_NAME apigee-org/ \ --install \ --namespace APIGEE_NAMESPACE \ --atomic \ -f overrides.yaml
-
Untuk setiap lingkungan, terapkan diagram
apigee-env
:helm upgrade ENV_NAME apigee-env/ \ --install \ --namespace APIGEE_NAMESPACE \ --set env=ENV_NAME \ --atomic \ -f overrides.yaml
Ulangi langkah ini untuk setiap lingkungan.