Google Cloud - методы аутентификации - хранилище от HashiCorp

  1. » Через помощника CLI
  2. » Через CLI
  3. » Через API
  4. » конфигурация
  5. » Требуемые разрешения
  6. » Групповые псевдонимы
  7. » Детали реализации
  8. » Генерация JWTs
  9. » Я
  10. » Пример завитка
  11. » Пример gcloud
  12. » Пример Голанга
  13. » GCE
  14. » Пример завитка

Метод аутентификации gcp позволяет объектам Google Cloud Platform проходить аутентификацию в Vault. Vault относится к Google Cloud как к доверенной третьей стороне и проверяет подлинность сущностей по API Google Cloud. Этот бэкэнд позволяет для аутентификации:

  • Учетные записи службы Google Cloud IAM
  • Экземпляры Google Compute Engine (GCE)

Этот бэкэнд фокусируется на идентификационных данных, специфичных для Google Cloud, и не поддерживает аутентификацию произвольных пользователей Google или G Suite или общего OAuth против Google.

Этот плагин разработан в отдельном репозитории GitHub по адресу hashicorp / хранилище-плагин-Auth-GCP , но автоматически включается в выпуски Vault. Пожалуйста, подайте все запросы к функциям, ошибки и запросы извлечения, относящиеся к плагину GCP в этом хранилище.

» Через помощника CLI

Vault включает в себя помощника CLI, который получает подписанный JWT локально и отправляет запрос в Vault. Этот помощник доступен только для ролей типа IAM.

$ vault login -method = gcp \ role = "my-role" \ service_account = "[email protected]" \ project = "my-project" \ jwt_exp = "15m" \ credentials = @ путь / к / поручителя / credentials.json

Для получения дополнительной информации об использовании запустите vault auth help gcp.

» Через CLI

$ vault write -field = токен auth / gcp / login \ role = "my-role" \ jwt = "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9 ..."

Увидеть Генерация JWTs способы получения токена JWT.

» Через API

$ curl \ --request POST \ --data '{"role": "my-role", "jwt": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9 ..."}' http://127.0.0.1:8200/v1/auth/ GCP / Войти

Увидеть API документы для ожидаемого ответа.

» конфигурация

Методы аутентификации должны быть настроены заранее, прежде чем пользователи или машины смогут аутентифицироваться. Эти шаги обычно выполняются оператором или инструментом управления конфигурацией.

  1. Включите метод аутентификации Google Cloud:

  2. Настройте учетные данные метода auth:

    $ vault write auth / gcp / config \ credentials=@/path/to/credentials.json

    Если вы используете учетные данные экземпляра или хотите указать учетные данные через переменную среды, вы можете пропустить этот шаг. Чтобы узнать больше, см. Google Cloud Authentication раздел ниже.

  3. Создайте именованную роль:

    Для роли типа iam:

    $ vault write auth / gcp / role / my-iam-role \ type = "iam" \icies = "dev, prod" \ bound_service_accounts = "[email protected]"

    Для роли типа gce:

    $ vault write auth / gcp / role / my-gce-role \ type = "gce" \icies = "dev, prod" \ bound_projects = "my-project1, my-project2" \ bound_zones = "us-east1-b" \ bound_labels = "foo: bar, zip: zap"

    Полный список параметров конфигурации для каждого типа см. В API документация ,

В методе аутентификации Google Cloud Vault используется официальный Google Cloud Golang SDK. Это означает, что он поддерживает общие способы предоставление учетных данных в Google Cloud ,

  1. Переменная среды GOOGLE_APPLICATION_CREDENTIALS. Это указывается в качестве пути к файлу учетных данных Google Cloud, обычно для служебной учетной записи. Если эта переменная среды присутствует, используются полученные учетные данные. Если учетные данные недействительны, возвращается ошибка.

  2. Учетные данные экземпляра по умолчанию. Если переменная среды отсутствует, используются учетные данные службы по умолчанию.

Для получения дополнительной информации об учетных записях службы см. Документация по учетным записям Google Cloud Service ,

Чтобы использовать этот метод аутентификации, учетная запись службы должна иметь следующую минимальную область:

https://www.googleapis.com/auth/cloud-platform

» Требуемые разрешения

Учетные данные, данные Vault, должны иметь следующие роли:

Роли / iam.serviceAccountKeyAdmin Роли / браузер

Обратите внимание, что это разрешение, данное серверам Vault . Учетная запись службы IAM или экземпляр GCE, который проходит проверку подлинности в Vault, должна иметь следующую роль:

Роли / iam.serviceAccountTokenCreator

» Групповые псевдонимы

Начиная с Vault 1.0, роли могут указывать логический параметр add_group_aliases, который добавляет групповые псевдонимы к автору ответа. Эти псевдонимы могут помочь в создании политик многократного использования, поскольку они доступны как интерполированные значения в механизме политик Vault. После включения ответ аутентификации будет включать следующие псевдонимы:

["project- $ PROJECT_ID", "folder- $ SUBFOLDER_ID", "folder- $ FOLDER_ID", "organization- $ ORG_ID"]

» Детали реализации

В этом разделе описываются детали реализации взаимодействия Vault с Google Cloud для аутентификации и авторизации токенов JWT. Эта информация предоставляется для тех, кому любопытно, но эти детали не являются необходимыми знаниями для использования метода аутентификации.

Логин IAM применяется только к ролям типа iam. Рабочий процесс аутентификации Vault для учетных записей службы IAM выглядит следующим образом:

Рабочий процесс аутентификации Vault для учетных записей службы IAM выглядит следующим образом:

  1. Клиент генерирует подписанный JWT, используя IAM projects.serviceAccounts.signJwt метод. Примеры того, как это сделать, см. В Получение токенов JWT раздел.

  2. Клиент отправляет этот подписанный JWT в Vault вместе с именем роли.

  3. Vault извлекает значение заголовка ребенка, которое содержит идентификатор пары ключей, использованной для создания JWT, и вспомогательный идентификатор / адрес электронной почты для поиска ключа учетной записи службы. Если учетная запись службы не существует или ключ не связан с учетной записью службы, Vault запрещает аутентификацию.

  4. Vault авторизует подтвержденную учетную запись службы для данной роли. Если это успешно, возвращается токен Vault с соответствующими политиками.

Вход в GCE применяется только к ролям типа gce и должен быть выполнен в экземпляре, запущенном в GCE . Эти шаги не будут работать с вашего локального ноутбука или другого облачного провайдера.

  1. Клиент получает токен метаданных идентификатора экземпляра на экземпляре GCE.

  2. Клиент отправляет этот JWT в Vault вместе с именем роли.

  3. Vault извлекает значение заголовка ребенка, которое содержит идентификатор пары ключей, использованной для создания JWT, чтобы найти открытый сертификат OAuth2 для проверки этого JWT.

  4. Vault авторизует подтвержденный экземпляр для данной роли, гарантируя, что экземпляр соответствует связанным зонам, регионам или группам экземпляров. Если это успешно, возвращается токен Vault с соответствующими политиками.

» Генерация JWTs

В этом разделе подробно описаны различные методы и примеры получения токенов JWT.

» Я

Это описывает, как использовать GCP IAM Метод API непосредственно для создания подписанного JWT с утверждениями, которых ожидает Vault. Обратите внимание, что CLI делает этот процесс для вас и намного проще, и что есть очень мало причин, чтобы сделать это самостоятельно.

» Пример завитка

Для хранилища требуется следующий минимальный набор требований:

{"sub": "$ SERVICE_ACCOUNT_EMAIL_OR_ID", "aud": "хранилище / $ ROLE", "exp": "$ EXPIRATION"}

Для метода API срок действия не является обязательным и по умолчанию равен часу. Если указано, срок действия должен быть NumericDate значение (секунды от эпохи). Это значение должно быть до максимального срока действия JWT, разрешенного для роли. По умолчанию это 15 минут и не может быть больше 1 часа.

Если у вас есть вся эта информация, токен JWT может быть подписан с помощью curl и oauth2l :

ROLE = "my-role" PROJECT = "my-project" SERVICE_ACCOUNT = "[email protected]" OAUTH_TOKEN = "$ (облачная платформа заголовка oauth2l)" JWT_CLAIM = "{\\\ "aud \\\": \\\ "хранилище / $ {ROLE} \\\", \\\ "sub \\\": \\\ "$ {SERVICE_ACCOUNT} \\\"} "curl \ - header "$ {OAUTH_TOKEN}" \ --header "Тип содержимого: application / json" \ --request POST \ --data "{\" payload \ ": \" $ {JWT_CLAIM} \ "}" \ "https : //iam.googleapis.com/v1/projects/$ {ПРОЕКТ} / serviceAccounts / $ {SERVICE_ACCOUNT}: signJwt»

» Пример gcloud

Вы также можете сделать это с помощью (в настоящее время бета) команды gcloud.

$ gcloud бета-учетные записи службы iam sign-jwt $ INPUT_JWT_CLAIMS $ OUTPUT_JWT_FILE \ [email protected] \ --project = my-project

» Пример Голанга

Читайте больше на Блог Google с открытым исходным кодом ,

» GCE

Токены GCE могут быть сгенерированы только из экземпляра GCE . Токен JWT можно получить из конечной точки service-account / default / identity для сервера метаданных экземпляра.

» Пример завитка

ROLE = "my-gce-role" curl \ --header "Метаданные-вкус: Google" \ --get \ --data-urlencode "аудитория = http: // vault / $ {ROLE}" \ --data- urlencode "format = full" \ "http: // metadata / computeMetadata / v1 / instance / service-account / default / identity"

Плагин GCP Auth имеет полный HTTP API. Пожалуйста, посмотрите API документы Больше подробностей.