Как использовать aws-iam-authenticator с удаленными запусками Terraform Cloud?

Я уже успешно использую Terraform с Kubernetes provider для управления различными частями и сервисами на EKS кластере в AWS. Я хотел бы использовать Terraform Cloud для управления им (и воспользоваться преимуществами хорошей интеграции Github/VCS). Однако kubeconfig, который у меня есть для этого кластера, использует aws-iam-authenticator двоичный файл для использования учетных данных AWS (и, следовательно, разрешений IAM) для аутентификации и предоставления разрешений как в AWS, так и внутри кластера через IRSA.

На экземплярах Terraform Cloud не установлен двоичный файл aws-iam-authenticator, и поэтому, хотя у них есть правильные учетные данные AWS, они не могут использовать их для аутентификации и подключения к кластеру EKS.

При использовании обычного (не облачного) Terraform такой проблемы нет, вы просто убеждаетесь, что на машине, с которой вы запускаете plan/apply, установлен двоичный файл и учетные данные, и все "просто работает", как мне заставить Terraform Cloud работать таким же образом?

0
задан 18 August 2021 в 14:06
1 ответ

Документы Terraform Cloud освещают это, и это не запрещено, но и не поощряется. В этих документах упоминаются 2 метода: использование local-exec поставщика (использование которого описывается как «последнее средство» и потенциально проблематично) или использование подмодуля. В документах также упоминается, что следует использовать только «автономные двоичные файлы». К счастью, aws-iam-authenticator действительно доступен в виде статического автономного бинарного файла для многих систем. К сожалению, документация, кроме упоминания подмодулей, не описывает шаги, необходимые для того, чтобы это работало.

Надеемся, что в будущем Hashicorp предоставит менее хакерский и более поддерживаемый способ настройки этих сред, но до тех пор...

Во-первых, нам нужен совместимый двоичный файл, и хотя мы точно не знаем, какая ОС/образ запускается экземплярами Terraform Cloud, мы знаем из документации, что он совместим с Linux x86_64. Поэтому, поскольку aws-iam-authenticator доступен в виде автономного статического двоичного файла для Linux x86_64, нам нужно ввести этот двоичный файл в среду, а затем сделать его доступным для экземпляра в целом (поскольку мы не контролируем, как это называется конкретно).

Terraform Cloud позволяет вам манипулировать переменными среды, мы можем добиться этого, манипулируя переменной $PATH, когда у нас есть двоичный файл на хосте. Самый простой способ сделать это — просто добавить двоичный файл в конфигурацию внутри папки, однако, если вы хотите использовать это для нескольких конфигураций без необходимости управлять двоичным файлом отдельно в каждой (представьте, что вам нужно обновлять их все по отдельности), Я бы рекомендовал сделать это как подмодуль в вашем репозитории git.

Вот пример общедоступного репозитория, содержащего двоичный файл, вы можете добавить его в свой репозиторий в качестве подмодуля следующим образом:

git submodule add https://github.com/comerford/tc-tools.git

Затем вы можете зафиксировать/отправить как обычно, убедившись, что ваша версия настройки управления для вашего рабочего пространства настроены на клонирование подмодулей, как показано ниже:

submodule cloning enabled

Наконец, чтобы убедиться, что независимо от того, как называется двоичный файл, он работает, вам необходимо внести изменения в переменную среды PATH чтобы он увидел ваш новый бинарник, но и ничего не сломал.Вот переменная ENV, которая сработала для меня с учетом приведенного выше подмодуля:

Working PATH Variable on Terraform Cloud

Чтобы представить эту строку в более удобном формате:

"~/tc-tools:/home/terraform/tc-tools:./tc-tools:/usr/bin:/usr/local/bin:/bin:$PATH"

Это предположение о вероятных путях, и я не на 100% уверен, какой из них работает, потому что я не хотел прерывать прогоны ради нескольких символов.

Хотя это специально для двоичного файла aws-iam-authenticator, он должен работать как общий метод для любого такого статического двоичного файла Linux x86_64, который вам понадобится.

1
ответ дан 18 August 2021 в 14:06

Теги

Похожие вопросы