Примечание
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Применяется для: AKS на Azure Local
A секрет в Kubernetes — это объект, содержащий небольшое количество конфиденциальных данных, таких как пароли и SSH-ключи. На сервере API Kubernetes секреты хранятся в etcd, который является отказоустойчивым хранилищем ключей и значений, используемым в качестве основной базы данных Kubernetes для всех данных кластера.
Служба Azure Kubernetes (AKS) в Azure Local поставляется с шифрованием секретов etcd с помощью подключаемого модуля службы управления ключами (KMS). Все кластеры Kubernetes в Azure Local имеют встроенный плагин KMS, включенный по умолчанию. Данный плагин генерирует Key Encryption Key (KEK) и автоматически обновляет его каждые 30 дней.
Эта статья описывает, как убедиться, что данные зашифрованы. Дополнительные сведения см. в официальной документации Kubernetes для подключаемого модуля KMS.
Примечание.
Плагин KMS в настоящее время использует протокол KMS версии 1.
Перед тем как начать
Прежде чем начать, убедитесь, что у вас есть следующие предварительные условия:
- Для взаимодействия с кластерами Kubernetes необходимо установить kubectl и kubelogin.
- Чтобы просматривать или управлять секретами, убедитесь, что у вас есть необходимые права доступа. Для получения дополнительной информации см. Доступ и идентификация.
Доступ к кластеру с поддержкой Microsoft Entra
Получите учетные данные пользователя для доступа к вашему кластеру, используя команду az aksarc get-credentials. Вам нужен ресурс Microsoft.HybridContainerService/provisionedClusterInstances/listUserKubeconfig/action, который включен в разрешения роли пользователя кластера Azure Kubernetes Service Arc.
az aksarc get-credentials --resource-group $resource_group --name $aks_cluster_name
Убедитесь, что плагин KMS включен.
Чтобы убедиться, что подключаемый модуль KMS включен, выполните следующую команду и убедитесь, что состояние работоспособности поставщиков kms-providersОК:
kubectl get --raw='/readyz?verbose'
[+]ping ok
[+]Log ok
[+]etcd ok
[+]kms-providers ok
[+]poststarthook/start-encryption-provider-config-automatic-reload ok
Убедитесь, что данные зашифрованы
Чтобы подтвердить, что секреты и данные зашифрованы с помощью плагина KMS, см. документацию Kubernetes. Вы можете использовать следующие команды, чтобы проверить, что данные зашифрованы:
kubectl exec --stdin --tty <etcd pod name> -n kube-system --etcdctl --cacert /etc/kubernetes/pki/etcd/ca.crt --key /etc/kubernetes/pki/etcd/server.key --cert /etc/kubernetes/pki/etcd/server.crt get /registry/secrets/default/db-user-pass -w fields
kubectl exec
: Это команда kubectl, используемая для выполнения команды внутри работающего пода. Это позволяет вам выполнять команды внутри контейнера пода.--stdin
: Этот флаг позволяет отправлять ввод (stdin) в команду, которую вы выполняете внутри пода.--tty
: Этот флаг выделяет TTY (терминал) для команды, заставляя ее вести себя так, будто вы взаимодействуете с сеансом терминала.<etcd pod name>
: чтобы найти имя pod etcd, выполните следующую команду:kubectl get pods -n kube-system | findstr etcd-moc
-n kube-system
: Указывает пространство имен, в котором находится pod. kube-system — это пространство имён по умолчанию, используемое Kubernetes для системных компонентов, таких как etcd и другие сервисы управляющей плоскости.--etcdctl
: Читает секрет из etcd. Дополнительные поля используются для аутентификации перед получением доступа к etcd.
Следующие поля возвращаются в выводе команды:
"ClusterID" : <cluster id>
"MemberID" : <member id>
"Revision" : <revision number>
"RaftTerm" : 2
"Key" : <path to the key>
"CreateRevision" : <revision number at the time the key was created>
"ModRevision" : <revision number at the time the key was modified>
"Version" : <version of the key-value pair in etcd>
"Value" : "k8s:enc:kms:v1:kms-plugin: <encrypted secret value>"
"Lease" : <lease associated with the secret>
"More" : <indicates if there are more results>
"Count" : <number of key-value pairs returned>
После выполнения команды изучите поле Value
в выводе в окне терминала. Эти выходные данные показывают значение, хранящееся в секретном хранилище etcd для этого ключа, которое является зашифрованным значением секрета. Значение зашифровано с использованием KMS плагина. Префикс k8s:enc:kms:v1:
указывает на то, что Kubernetes использует плагин KMS v1 для хранения секрета в зашифрованном формате.
Примечание.
Если вы используете команду kubectl describe secrets
для получения секретов, они возвращаются в закодированном формате base64, но без шифрования. Команда kubectl describe
извлекает детали Kubernetes ресурса через сервер API, который автоматически управляет шифрованием и дешифрованием. Для конфиденциальных данных, таких как секреты, даже если они монтированы на под, сервер API гарантирует, что они расшифровываются при доступе. В результате выполнение команды kubectl describe
не отображает секреты в их зашифрованной форме, а скорее в расшифрованной, если они используются ресурсом.
Устранение неполадок
Если вы столкнулись с какими-либо ошибками при работе подключаемого модуля KMS, следуйте инструкциям на странице Устранение неполадок , чтобы устранить проблему.
Дальнейшие действия
- Помогите защитить кластер другими способами, следуя инструкциям в книге безопасности для AKS, поддерживаемого Azure Arc.
- Создание кластеров Kubernetes
- Развертывание приложения Linux в кластере Kubernetes