Как сохранить / получить зашифрованный KMS-файл .enc в / из секретов kubernetes - PullRequest
0 голосов
/ 06 ноября 2019

У меня есть файл .enc, который был зашифрован ключом GCP KMS. Я сохранил этот зашифрованный файл как секрет в kubernetes. Кластер Kubernetes имеет разрешения на доступ к ключу KMS. Теперь я хочу расшифровать сохраненный зашифрованный файл, используя ключ, когда контейнер работает. Мой сервис написан на python. Как я могу расшифровать сохраненный зашифрованный файл, используя скрипт Python?

1 Ответ

1 голос
/ 06 ноября 2019

Я думаю, что вы можете смешивать два понятия здесь. Если вы используете 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()
...