Menyimpan rahasia akun layanan di Hashicorp Vault
Fitur ini memungkinkan Anda menyimpan sertifikat akun layanan Google untuk Apigee Hybrid di Hashicorp Vault, rahasia eksternal Google. {i>External secret manager<i} memungkinkan Anda mengelola bagaimana data disimpan di Kubernetes, termasuk mengelola residensi data dan kontrol akses yang sangat detail.
Jika Anda tidak menggunakan Workload Identity on GKE clusters atau Workload Identity Federation di EKS dan AKS, komponen hybrid Apigee perlu mengautentikasi akun layanan Google agar dapat menjalankan tugasnya. Ada tiga metode untuk menyimpan dan merujuk ke kunci akun layanan Google di Apigee Hybrid:
-
File sertifikat akun layanan (file
.json
) yang disimpan di hard drive. Lihat hal ini dalam penggantian dengan properti konfigurasiserviceAccountPath
. Contoh:logger: serviceAccountPath: service-accounts/myhybridorg-apigee-logger.json
-
File sertifikat akun layanan (file
.json
) yang disimpan di hard drive. Lihat hal ini dalam penggantian dengan properti konfigurasiserviceAccountPath
. Lihat Tentang akun layanan. -
Sertifikat akun layanan yang disimpan dalam secret Kubernetes. Lihat hal ini dalam penggantian dengan properti konfigurasi
serviceAccountRef
. Lihat Menyimpan data dalam secret Kubernetes. -
Sertifikat akun layanan yang disimpan di Hashicorp Vault, yang dijelaskan dalam panduan ini. Lihat hal ini dalam penggantian dengan properti konfigurasi
serviceAccountSecretProviderClass
.
Menyiapkan untuk menyimpan rahasia akun layanan di Vault
Instal driver CSI dan penyedia Vault
Jika Anda belum menginstal driver CSI pada cluster menggunakan Helm, ikuti petunjuk di Driver Secrets Store CSI: Penginstalan. Untuk 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 rahasia, kebijakan, dan peran Vault
Gunakan UI atau API Vault untuk membuat secret dan memberikan izin ke akun layanan Kubernetes yang digunakan oleh Apigee Hybrid untuk membaca secret tersebut.
-
Buat rahasia 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.", "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.", "universe_domain": "googleapis.com" }", "cassandraRestore":... ... }
- Berikan akses ke rahasia 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 rahasia 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 rahasia 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 guna mengikat kebijakan ke:
./generate-encoded-sas.sh
Output Anda harus berupa daftar nama akun layanan Kubernetes yang dipisahkan dengan 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 ke dalam 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
. Memisahkannya 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 ini, buat peran Vault yang mengikat akun layanan Apigee spesifik per 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 mengenai penyedia yang harus 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 secret yang diharapkan |
---|---|
Pencadangan Cassandra | cassandraBackup |
Pemulihan Cassandra | cassandraRestore |
Hubungkan agen | connectAgent |
Logger | logger |
MART | mart |
Metrik | metrics |
Monetisasi | mint |
Runtime | runtime |
Penyelaras | synchronizer |
UDCA | udca |
Pengamat | 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 adalah
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 guna 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 adalah
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
guna mengaktifkan penggunaan secret eksternal untuk akun layanan Google. Anda dapat menghapus atau menjadikan properti konfigurasiserviceAccountPath
danserviceAccountPaths
sebagai komentar: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 roll back untuk menggunakan file sertifikat akun layanan
Jika Anda perlu melakukan roll back untuk menggunakan file sertifikat akun layanan Google yang tersimpan, ikuti prosedur berikut:
-
Perbarui file penggantian:
-
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.