Я думаю, что вы можете смешивать два понятия здесь. Если вы используете GKE шифрование на уровне приложений , вашему кластеру требуются разрешения IAM для связи с KMS. Вы, как пользователь, никогда не шифруете секреты напрямую. Например, когда вы запускаете kubectl create secret
, GKE автоматически шифрует секрет, прежде чем сохранить его в etcd. Когда вы запрашиваете секрет, GKE автоматически расшифровывает его.
Если вы хотите зашифровать секретный внеполосный канал, ваш кластер Kubernetes должен не иметь разрешение на использование ключа KMS. Ни Kubernetes, ни etcd никогда не увидят секрет в открытом тексте. Вы шифруете его локально на своем компьютере и сохраняете зашифрованные данные как секрет в Kubernetes. Если вы хотите получить открытый текст, вашему модулю / службе потребуется запросить секрет Kubernetes, а затем выполнить необходимые вызовы API в Cloud KMS для расшифровки секрета. Вот пример кода Python, который может расшифровать секрет:
def decrypt(client, s):
if not s:
raise ValueError('ciphertext is missing')
response = client \
.projects() \
.locations() \
.keyRings() \
.cryptoKeys() \
.decrypt(name=crypto_key_id, body={"ciphertext":s}) \
.execute()
return base64.b64decode(response['plaintext']).decode('utf-8').strip()