Как *безопасно* установить приватный пакет python из github в загрузочный скрипт AWS EMR

Я хочу установить пакет Python3 из частного репозитория Github в кластер AWS EMR Spark.

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

Заранее спасибо.

Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
0
615
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

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

Есть несколько вариантов:

  1. Хранилище параметров диспетчера систем. По сути, это что-то вроде реестра Windows в AWS, регионального хранилища ключей и значений. Здесь вы можете хранить свои учетные данные под таким именем, как my/git/credentials, и даже шифровать их с помощью службы управления ключами. Затем в сценарии начальной загрузки вы можете запросить учетные данные с помощью интерфейса командной строки AWS и использовать их для подключения к частному репозиторию git. Для этого требуется, чтобы роль экземпляра кластера имела разрешения на доступ к этому параметру (и ключ KMS, если вы зашифровали значение).
  2. Менеджер секретов: общая идея аналогична хранилищу параметров SSM. Менеджер секретов также позволяет безопасно хранить ваши учетные данные, в этом случае шифрование является обязательным. Он даже предлагает хуки жизненного цикла для периодического обновления учетных данных, если вам это потребуется. Вы можете использовать ту же технику, которую я описал в варианте 1) в скрипте начальной загрузки. Требования к разрешениям аналогичны, хотя вам обязательно нужно добавить разрешения KMS и разрешения Secrets Manger. В этом случае вам придется проанализировать ответ JSON от диспетчера секретов.

Я бы лично начал с варианта 1, это будет дешевле. Если у вас есть конкретные аудиторские/нормативные требования, я бы рассмотрел вариант 2 — он немного сложнее.

Ответ принят как подходящий

Благодаря Морису я успешно реализовал безопасный процесс, следуя его варианту № 2.

  1. Создайте токен доступа с учетными данными для чтения на github.

  2. Сохраните это в AWS Secrets Manager. В моем случае я назвал этот секрет «github-read-access».

  3. Предоставьте доступ к этому секрету пользователю, который будет запрашивать его, или, в случае загрузочного сценария EMR, ролям EMR.

  4. Используя интерфейс командной строки aws, я сохраняю токен как переменную среды и устанавливаю пакет с помощью следующих команд:

    export GITHUB_TOKEN=`aws secretsmanager get-secret-value --secret-id github-read-access |grep SecretString|cut -d ":" -f 3|cut -d '"' -f 2 |cut -d '\' -f1`
    sudo pip3 install git+https://${GITHUB_TOKEN}@github.com/<USER_NAME>/<REPO_NAME>.git 
    

Другие вопросы по теме