Вопрос или проблема
Я хочу предоставить процессам, работающим в инфраструктуре OpenStack, доступ к ресурсам AWS. (Я также хочу избежать ручного вращения ключей и минимизировать влияние в случае утечки учетных данных из этих экземпляров.)
Существует ли какой-либо безопасный способ ассоциировать роли AWS IAM с экземплярами вычислений OpenStack (т.е. без передачи долгоживущих ключей доступа IAM пользователю на экземпляре), аналогично идентификаторам экземпляров EC2 AWS?
Например, есть ли какой-либо провайдер идентификаций OAuth/OIDC, включенный в OpenStack (возможно, предоставляющий токены через IMDS, защищенный гипервизором), который AWS STS мог бы использовать для определения, на каком экземпляре OpenStack выполняется процесс (как IRSA делегировала STS любой управляющей плоскости кластера Kubernetes для распределения токенов и проверки связей между подами и сервисными учетными записями, без доступа долгосрочных процессов на основе AWS SDK в этих подах к чему-либо, кроме временных учетных данных).
Ответ или решение
Для того чтобы обеспечить взаимодействие процессов, работающих в инфраструктуре OpenStack, с ресурсами AWS, можно воспользоваться механизмами управления доступом, которые позволяют избежать передачи статических ключей доступа. Наша задача заключается в разработке безопасного решения по ассоциации ролей IAM AWS с вычислительными инстансами OpenStack.
Подходы к безопасной интеграции
-
Использование AWS IAM Roles Anywhere:
AWS IAM Roles Anywhere позволяет вам управлять доступом к ресурсам AWS с помощью IAM ролей, ассоциированных с вашим OpenStack окружением. Для этого необходимо настроить доверительные отношения между вашим OpenStack окружением и AWS с использованием вашего удостоверяющего центра. Этот подход позволяет получить временные учетные данные для ваших OpenStack инстансов без необходимости использования статических ключей доступа. -
OAuth / OIDC Identity Provider:
OpenStack поддерживает интеграцию с внешними провайдерами идентификации, такими как OAuth или OpenID Connect (OIDC). Вам потребуется настроить OpenStack для работы с OIDC и создать идентификационный провайдер, который сможет выдать токены для ваших инстансов. После этого можно использовать эти токены для аутентификации в AWS.-
Настройка Identity Provider:
Вам необходимо установить и настроить библиотеку, обеспечивающую поддержку OIDC в OpenStack. Это может быть реализовано с помощью Keystone, системы управления идентификацией OpenStack. -
Получение временных AWS учетных данных:
На уровне вашего приложения или службы в OpenStack, вы можете использовать AWS Security Token Service (STS) для обмена OIDC-токенами на временные учетные данные для доступа к ресурсам AWS.
-
-
Использование OpenStack Compute:
Интеграция OpenStack с AWS может быть выполнена через API, которые могут возвращать временные учетные данные. Вам нужно реализовать компонент, который берет OIDC-токены и отправляет их в AWS STS, получая временные учетные данные, которые могут быть использованы приложением.
Реализация
-
Настройка Keystone для поддержки OIDC:
- Конфигурируйте Keystone, чтобы он считывал ваши OIDC настройки и мог выдавать токены.
- Убедитесь, что вы настроили доверительные отношения между вашими OpenStack инстансами и AWS.
-
Обмен токенов через AWS STS:
- Разработайте механизм, который будет отправлять OIDC токены в AWS STS и получать временные AWS учетные данные.
- Эти данные должны быть автоматически получены и обновлены на ваших OpenStack инстансах, обеспечивая непрерывный доступ без участия пользователя.
-
Безопасность:
- Все коммуникации между OpenStack и AWS должны быть защищены с помощью TLS.
- Регулярно обновляйте и проверяйте ваши OIDC токены для сбалансирования безопасности и функциональности.
Заключение
Интеграция OpenStack с AWS ресурсами путем использования IAM ролей и временных учетных данных — это эффективное и безопасное решение. Оно позволяет избежать передачи длинных ключей доступа и минимизировать риск нарушения безопасности. Настройка OIDC и правильное использование AWS STS позволяет реализовать подобный механизм так же просто, как это делается в AWS с EC2 сниппетами кода для временных учетных данных. Таким образом, ваши OpenStack инстансы могут работать с AWS ресурсами безопасно и эффективно.