Menyimpan data di pengelola secret eksternal
Panduan ini memberi tahu Anda cara menyimpan dan mengelola jenis informasi berikut di layanan penyimpanan secret eksternal, Hashicorp Vault, bukan di file overrides.yaml.
- AX Hash Salt
- Sandi Redis
- Kunci enkripsi
Untuk menyimpan jenis informasi lainnya di Vault, lihat:
Prasyarat
- Driver CSI penyimpanan secret Kubernetes. Anda dapat menginstalnya dengan mengikuti petunjuk di Driver CSI Secrets Store: Penginstalan. Untuk versi yang didukung, lihat Platform dan versi yang didukung Apigee hybrid: Driver CSI Secret Store.
- Penyedia CSI Vault. Anda dapat menginstalnya dengan mengikuti petunjuk di Menginstal penyedia CSI Vault. Untuk versi yang didukung, lihat Platform dan versi yang didukung Apigee Hybrid: Vault.
Prosedur
-
Buat secret, kebijakan, dan peran Vault.
- Gunakan UI atau API Vault untuk membuat secret dan memberikan izin bagi akun layanan Kubernetes Apigee untuk membaca secret tersebut seperti yang dijelaskan di sini. Secret harus terdiri dari kunci dan satu atau beberapa nilai seperti yang ditunjukkan dalam tabel berikut:
Kunci Rahasia Data Rahasia secret/data/apigee/axhashsalt
{ "ax-hash-salt": "AX_HASH_SALT_VALUE" }
secret/data/apigee/redis
{ "redis-password": "REDIS_PASSWORD_VALUE" }
secret/data/apigee/orgencryptionkeys
{ "kmsEncryptionKey": "KMS_ENCRYPTION_KEY_VALUE" "kvmEncryptionKey": "KVM_ENCRYPTION_KEY_VALUE" "contractEncryptionKey": "CONTRACT_ENCRYPTION_KEY_VALUE" }
secret/data/apigee/envencryptionkeys
{ "cacheEncryptionKey": "CACHE_ENCRYPTION_KEY_VALUE" "kvmEncryptionKey": "KVM_ENCRYPTION_KEY_VALUE" "envKvmEncryptionKey": "ENV_KVM_ENCRYPTION_KEY_VALUE" "kmsEncryptionKey": "KMS_ENCRYPTION_KEY_VALUE" }
- Dalam Vault, buat kebijakan yang memberikan akses ke secret:
cat axhashsalt-auth-policy.txt path "secret/data/apigee/axhashsalt" { capabilities = ["read"] }
cat redis-auth-policy.txt path "secret/data/apigee/redis" { capabilities = ["read"] }
cat orgencryptionkeys-auth-policy.txt path "secret/data/apigee/orgencryptionkeys" { capabilities = ["read"] }
cat envencryptionkeys-auth-policy.txt path "secret/data/apigee/envencryptionkeys" { capabilities = ["read"] }
vault policy write apigee-axhashsalt-auth axhashsalt-auth-policy.txt
vault policy write apigee-redis-auth redis-auth-policy.txt
vault policy write apigee-orgencryptionkeys-auth orgencryptionkeys-auth-policy.txt
vault policy write apigee-envencryptionkeys-auth envencryptionkeys-auth-policy.txt
- 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-redis-default,apigee-redis-envoy-default,apigee-mart-${ORG_ENCODE},apigee-mint-task-scheduler-${ORG_ENCODE}" 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-runtime-${ENV_ENCODE},apigee-synchronizer-${ENV_ENCODE} done echo $NAMES
- Jalankan skrip untuk membuat daftar nama akun layanan yang akan mengikat kebijakan ke:
chmod +x ./generate-encoded-sas.sh
./generate-encoded-sas.sh
Output akan mencantumkan nama akun layanan yang dienkode.
- Dengan menggunakan kebijakan, buat peran Vault yang mengikat akun layanan Apigee yang diperlukan.
vault write auth/kubernetes/role/apigee-axhashsalt \ bound_service_account_names=BOUND_SA_NAMES \ bound_service_account_namespaces=APIGEE_NAMESPACE \ policies=apigee-axhashsalt-auth \ ttl=1m
vault write auth/kubernetes/role/apigee-redis \ bound_service_account_names=BOUND_SA_NAMES \ bound_service_account_namespaces=APIGEE_NAMESPACE \ policies=apigee-redis-auth \ ttl=1m
vault write auth/kubernetes/role/apigee-orgencryptionkeys \ bound_service_account_names=BOUND_SA_NAMES \ bound_service_account_namespaces=APIGEE_NAMESPACE \ policies=apigee-orgencryptionkeys-auth \ ttl=1m
vault write auth/kubernetes/role/apigee-envencryptionkeys \ bound_service_account_names=BOUND_SA_NAMES \ bound_service_account_namespaces=APIGEE_NAMESPACE \ policies=apigee-envencryptionkeys-auth \ ttl=1m
- Gunakan UI atau API Vault untuk membuat secret dan memberikan izin bagi akun layanan Kubernetes Apigee untuk membaca secret tersebut seperti yang dijelaskan di sini. Secret harus terdiri dari kunci dan satu atau beberapa nilai seperti yang ditunjukkan dalam tabel berikut:
- Buat objek
SecretProviderClass
.- Tambahkan secret berikut melalui resource
SecretProviderClass
. Resource ini memberi tahu driver CSI penyedia yang akan diajak berkomunikasi saat meminta secret. Tabel berikut menunjukkan nama file (objectNames
) yang diharapkan oleh Apigee hybrid:Secret Nama file rahasia yang diharapkan AX Hash Salt ax-hash-salt
Redis redis-password
Kunci Enkripsi Org kmsEncryptionKey
kvmEncryptionKey
contractEncryptionKey
Kunci Enkripsi Env kmsEncryptionKey
kvmEncryptionKey
envKvmEncryptionKey
cacheEncryptionKey
- Gunakan template
SecretProviderClass
berikut untuk mengonfigurasi resource ini:# axhashsalt-spc.yaml apiVersion: secrets-store.csi.x-k8s.io/v1 kind: SecretProviderClass metadata: name: apigee-axhashsalt-spc spec: provider: vault parameters: roleName: apigee-axhashsalt 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: "ax-hash-salt" secretPath: "" secretKey: ""
# redis-spc.yaml apiVersion: secrets-store.csi.x-k8s.io/v1 kind: SecretProviderClass metadata: name: apigee-redis-spc spec: provider: vault parameters: roleName: apigee-redis 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: "redis-password" secretPath: "" secretKey: ""
# orgencryptionkeys-spc.yaml apiVersion: secrets-store.csi.x-k8s.io/v1 kind: SecretProviderClass metadata: name: apigee-orgencryptionkeys-spc spec: provider: vault parameters: roleName: apigee-orgencryptionkeys 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: "kmsEncryptionKey" secretPath: "" secretKey: "" - objectName: "kvmEncryptionKey" secretPath: "" secretKey: "" - objectName: "contractEncryptionKey" secretPath: "" secretKey: ""
# envencryptionkeys-spc.yaml apiVersion: secrets-store.csi.x-k8s.io/v1 kind: SecretProviderClass metadata: name: apigee-envencryptionkeys-spc spec: provider: vault parameters: roleName: apigee-envencryptionkeys 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: "cacheEncryptionKey" secretPath: "" secretKey: "" - objectName: "kvmEncryptionKey" secretPath: "" secretKey: "" - objectName: "envKvmEncryptionKey" secretPath: "" secretKey: "" - objectName: "kmsEncryptionKey" secretPath: "" secretKey: ""
VAULT_ADDRESS adalah endpoint tempat server Vault Anda berjalan. Jika Vault berjalan di cluster dan namespace yang sama dengan Apigee, formatnya biasanya akan berupa
http://vault.APIGEE_NAMESPACE.svc.cluster.local:VAULT_SERVICE_PORT
. - Terapkan
SecretProviderClasses
di atas ke namespaceAPIGEE_NAMESPACE
:kubectl -n APIGEE_NAMESPACE apply -f axhashsalt-spc.yaml
kubectl -n APIGEE_NAMESPACE apply -f redis-spc.yaml
kubectl -n APIGEE_NAMESPACE apply -f orgencryptionkeys-spc.yaml
kubectl -n APIGEE_NAMESPACE apply -f envencryptionkeys-spc.yaml
- Tambahkan secret berikut melalui resource
- Aktifkan secret eksternal untuk AX Hash Salt.
- Dalam file
overrides.yaml
, tambahkan konfigurasi berikut untuk mengaktifkan penggunaan secret eksternal untuk AX Hash Salt:axHashSaltSecretProviderClass: apigee-axhashsalt-spc
- Terapkan perubahan dengan mengupgrade diagram Helm
org
:helm upgrade org apigee-org/ \ --namespace APIGEE_NAMESPACE \ -f overrides.yaml
- Dalam file
- Aktifkan secret eksternal untuk sandi Redis.
- Dalam file
overrides.yaml
, tambahkan konfigurasi berikut untuk mengaktifkan penggunaan secret eksternal untuk sandi Redis:redis: auth: secretProviderClass: apigee-redis-spc
- Kemudian, terapkan perubahan dengan mengupgrade diagram
operator
danredis
dalam urutan berikut:helm upgrade operator apigee-operator/ \ --namespace APIGEE_NAMESPACE \ -f overrides.yaml
helm upgrade redis apigee-redis/ \ --namespace APIGEE_NAMESPACE \ -f overrides.yaml
- Dalam file
- Mengaktifkan secret eksternal untuk kunci enkripsi
- Dalam file
overrides.yaml
, tambahkan konfigurasi berikut untuk mengaktifkan penggunaan secret eksternal untuk kunci enkripsi tingkat organisasi:encryptionKeySecretProviderClass: apigee-orgencryptionkeys-spc
- Terapkan perubahan dengan mengupgrade diagram Helm
org
:helm upgrade org apigee-org/ \ --namespace APIGEE_NAMESPACE \ -f overrides.yaml
- Dalam file
overrides.yaml
untuk setiap lingkungan, tambahkan konfigurasi berikut untuk kunci enkripsi khusus env:envs: - name: ENV_NAME encryptionKeySecretProviderClass: apigee-envencryptionkeys-spc
- Terapkan perubahan dengan mengupgrade diagram Helm
env
satu kali untuk setiap lingkungan:helm upgrade ENV_NAME apigee-env/ \ --namespace APIGEE_NAMESPACE \ --set env=ENV_NAME \ -f overrides.yaml
- Dalam file
Rollback
AX Hash Salt
- Dalam file
overrides.yaml
, hapus konfigurasi yang mengaktifkan penggunaan secret eksternal untuk AX Hash Salt:# Comment out or delete the following line: # axHashSaltSecretProviderClass: apigee-axhashsalt-spc
- Terapkan perubahan dengan mengupgrade diagram Helm
org
:helm upgrade org apigee-org/ \ --namespace APIGEE_NAMESPACE \ -f overrides.yaml
Sandi Redis
- Dalam file
overrides.yaml
, hapus konfigurasi yang mengaktifkan penggunaan secret eksternal untuk sandi Redis:redis: auth: # Comment out or delete the following line: # secretProviderClass: apigee-redis-spc
- Kemudian, terapkan perubahan dengan mengupgrade diagram
redis
danoperator
dalam urutan berikut:helm upgrade redis apigee-redis/ \ --namespace APIGEE_NAMESPACE \ -f overrides.yaml
helm upgrade operator apigee-operator/ \ --namespace APIGEE_NAMESPACE \ -f overrides.yaml
Kunci enkripsi
- Dalam file
overrides.yaml
, hapus konfigurasi yang mengaktifkan penggunaan secret eksternal untuk kunci enkripsi env:envs: - name: ENV_NAME # Comment out or delete the following line: # encryptionKeySecretProviderClass: apigee-envencryptionkeys-spc
- Terapkan perubahan dengan mengupgrade diagram Helm
env
satu kali untuk setiap lingkungan:helm upgrade ENV_NAME apigee-env/ \ --namespace APIGEE_NAMESPACE \ --set env=ENV_NAME \ -f overrides.yaml
- Dalam file
overrides.yaml
, hapus konfigurasi yang mengaktifkan penggunaan secret eksternal untuk kunci enkripsi organisasi:# Comment out or delete the following line: # encryptionKeySecretProviderClass: apigee-orgencryptionkeys-spc
- Kemudian, Upgrade diagram Helm
org
:helm upgrade org apigee-org/ \ --namespace APIGEE_NAMESPACE \ -f overrides.yaml