Как исправить ошибку записи в Vault: Ошибка при запросе API

Когда я запускаю + terraform apply --auto-approve, я вижу следующую ошибку:

Error: error writing to Vault: Error making API request.

URL: POST http://host.docker.internal:8200/v1/sys/auth/approle
Code: 400. Errors:

* path is already in use at approle/

  on main.tf line 3, in resource "vault_auth_backend" "approle":
   3: resource "vault_auth_backend" "approle" {

Вот отрывок из main.tf:

provider "vault" {}

resource "vault_auth_backend" "approle" {
  type = "approle"
}

Как я могу это исправить? Локально я мог видеть ту же проблему при запуске сервера хранилища в режиме разработки, и я только что перезапустил сервер разработки, который устранил проблему, но теперь я вижу проблему при запуске docker run.


person Serge Vu    schedule 16.12.2020    source источник


Ответы (1)


path is already in use at approle/ - это ключ здесь

С POST http://host.docker.internal:8200/v1/sys/auth/approle мы можем сделать вывод, что ваше состояние Terraform еще не знает, что метод аутентификации уже установлен на путь approle, поэтому он пытается его создать, а Vault отклоняет запрос, потому что этот путь уже используется.

Контекст: в Vault вы устанавливаете метод аутентификации, например approle на путь, например approle/ (что позволяет подключать один и тот же метод проверки подлинности несколько раз, например, метод Kubernetes, JWT или OIDC, подключенный несколько раз по разным путям, так что каждое новое подключение имеет параметры, специфичные для данного поставщика удостоверений. Таким образом, вы можете использовать OIDC для обоих AzureAD и Google, или разные кластеры Kubernetes)

Возвращаясь к вашей проблеме, есть несколько способов решить эту проблему:

Решение 1. Синхронизируйте состояние Terraform с текущим состоянием мира, чтобы наверстать упущенное

Ошибка возникает из-за того, что Terraform (пока!) Не знает, что approle уже смонтирован на approle/. terraform refresh может исправить это, но более вероятно, что вам придется вручную связать существующий ресурс с состоянием Terraform, terraform import vault_auth_backend.approle approle (см. Документация поставщика хранилища)

Решение 2. Начните с чистого состояния

Если ваш approle/ путь уже используется из-за предыдущих тестов, вы можете просто отключить его от Vault, чтобы Terraform правильно догнал. vault auth disable approle/ удалит существующую одобренную аутентификацию. ВНИМАНИЕ: если approle уже использовался для реальной аутентификации, существующие роли, идентификатор роли и идентификатор секрета будут немедленно отозваны. Делайте это только в том случае, если существующий метод утверждения авторизации не используется ни одной службой.

person Sébastien Portebois    schedule 17.12.2020
comment
Спасибо за этот ответ. Я надеялся, что использование бэкэнда s3 поможет избежать этого, но почему-то этого не произошло, и проблема, казалось, возникла только с ресурсами хранилища. - person openCivilisation; 12.01.2021