Настройка интеграции с секретами из Secret Manager

С помощью инструкции вы настроите в кластере Managed Kubernetes интеграцию с секретами, которые хранятся в сервисе Secret Manager.

Перед началом работы

  1. Создайте секрет в Secret Manager в формате JSON.

  2. Создайте кластер с публичным IP и группу узлов.

  3. Назначьте на сервисный аккаунт, выбранный при создании кластера, роль scsm.user.

  4. Установите плагин External Secrets Operator.

  5. Подключитесь к кластеру Managed Kubernetes.

Шаг 1. Создайте ресурс для связи с Secret Manager

Вы можете создать ресурс с типом ClusterSecretStore или SecretStore:

  • ClusterSecretStore позволяет оперировать секретами в любом пространстве имен кластера.

  • SecretStore — только в пространстве имен, в котором SecretStore создан. В этом случае для каждого пространства имен можно создать отдельный SecretStore.

  1. Создайте файл cloudrusm-store.yaml и сохраните следующую спецификацию:

    apiVersion : external-secrets.io/v1beta1
    kind : ClusterSecretStore
    metadata :
    name : cloudrusm-store
    spec :
    provider :
    cloudrusm :
    auth :
    secretRef :
    accessKeyIDSecretRef :
    name : cloud-auth-secret
    namespace : kube-system
    key : CLIENT_ID
    accessKeySecretSecretRef :
    name : cloud-auth-secret
    namespace : kube-system
    key : SECRET_ID
    productInstanceID : <идентификатор_продукта>

    Где productInstanceIDидентификатор продукта из Secret Manager.

    В примере выше используется спецификация для создания ClusterSecretStore. Если вы хотите использовать SecretStore, предварительно создайте Secret для сервисного аккаунта, который выбрали при создании кластера. Укажите в Secret и SecretStore одинаковое пространство имен.

    Примеры спецификаций:

  2. В терминале или PowerShell выполните команду:

    kubectl create -f cloudrusm-store.yaml

    Результат:

    clustersecretstore/cloudrusm-store created
  3. Проверьте статус:

    kubectl -n kube-system get clustersecretstore

    Результат:

    NAME AGE STATUS CAPABILITIES READY
    cloudrusm-store 7s Valid ReadOnly True

Шаг 2. Создайте ExternalSecret для извлечения секрета из Secret Manager

  1. Создайте файл cloudrusm-external-secret.yaml и сохраните следующую спецификацию:

    apiVersion : external-secrets.io/v1beta1
    kind : ExternalSecret
    metadata :
    name : cloudrusm-external-secret
    namespace : <пространство_имен>
    spec :
    refreshInterval : 10s
    secretStoreRef :
    name : cloudrusm-store
    kind : <тип_ресурса>
    target :
    name : my-secret
    creationPolicy : Owner
    dataFrom :
    - extract :
    key : <key-UUID>

    Где:

    • metadata.namespace — пространство имен, в которое необходимо разместить секрет из Secret Manager.

    • spec.target.name — произвольное название нового секрета. External Secret Operator создаст ExternalSecret и поместит в него параметры секрета из Secret Manager.

    • spec.secretStoreRef.kind — ClusterSecretStore или SecretStore в зависимости от созданного на первом шаге ресурса.

    • spec.dataFrom.extract.keyUUID секрета из Secret Manager.

  2. В терминале или PowerShell выполните команду:

    kubectl create -f cloudrusm-external-secret.yaml

    Результат:

    externalsecret/cloudrusm-external-secret created
  3. Проверьте статус:

    kubectl get externalsecrets.external-secrets.io

    Результат:

    NAME STORE REFRESH INTERVAL STATUS READY
    cloudrusm-external-secret cloudrusm-store 10s SecretSynced True
  4. Проверьте, что секрет присутствует в кластере:

    kubectl get secrets my-secrets

    Результат:

    NAME TYPE DATA AGE
    my-secrets Opaque 2 3m9s

Шаг 3. Удалите ресурсы

Если вы закончили работать с примером:

  1. Удалите кластер.

  2. Удалите секрет.

Evolution