Возвращение секретов GKE даже после удаления ключей KMS, используемых для шифрования - PullRequest
0 голосов
/ 20 июня 2019

Я следовал этому документу для создания кластера GKE (1.13.6-gke.6) с флагом --database-encryption-key, дающим ключ KMS для включения Шифрования секретов прикладного уровня .

Я создал секрет, используя следующую команду:

kubectl create secret generic dev-db-secret --from-literal=username=someuser --from-literal=password=somepass

Так что, если мое предположение верно, эти секреты хранятся в зашифрованном виде с использованием ключа KMS, предоставленного мной при создании кластера.,Однако даже после того, как я уничтожил все версии использованного ключа, я могу видеть секрет, хранящийся внутри GKE etcd, используя kubectl get secret dev-db-secret -o yaml, а также я могу видеть их в модуле, созданном с использованием приведенного ниже манифеста.:

apiVersion: v1
kind: Pod
metadata:
  name: secret-env-pod
spec:
  containers:
  - name: mycontainer
    image: redis
    env:
      - name: SECRET_USERNAME
        valueFrom:
          secretKeyRef:
            name: dev-db-secret
            key: username
      - name: SECRET_PASSWORD
        valueFrom:
          secretKeyRef:
            name: test-secret
            key: password
  restartPolicy: Never

Если я выполняю в вышеупомянутом модуле и выполняю echo SECRET_USERNAME и echo SECRET_PASSWORD, я получаю имя пользователя и пароль, напечатанные на моей консоли в виде простого текста.

Это способшифрование должно работать?Если да, где именно происходит шифрование?Что я делаю неправильно?Секреты действительно зашифрованы?

1 Ответ

1 голос
/ 20 июня 2019

Я не уверен на 100%, но я думаю, что эти ключи кэшируются, поэтому, вероятно, пройдет некоторое время, прежде чем расшифровка завершится неудачей. Это случай для Azure, я думаю, что это похоже на GKE.

Кстати, вы можете прочитать, как защитить файлы манифеста, чтобы вы могли хранить их в Git. Я написал сообщение в блоге , описывающее некоторые опции, которые вы можете использовать.

...