Использование GPG-шифрованных учетных данных (или определенных переменных среды) с boot-clj и s3-wagon-private
В загрузочной вики ( https://github.com/boot-clj/boot/wiki/S3-Repositories) указывается, что вы можете встроить учетные данные AWS для использования S3 в качестве репозитория Maven. Это неоптимально с точки зрения безопасности, потому что я не хочу проверять кредиты AWS, даже если у них ограниченные разрешения.
В leiningen с s3-wagon-private вы можете указать ключ доступа и секретный ключ через переменные окружения:
{:url "s3p://acme/repo/"
:username :env
:passphrase :env}
Или из определенных переменных env:
{:url "s3p://acme/repo/"
:username :env/aws_access_key_id
:passphrase :env/aws_secret_access_key}
Или с зашифрованной GPG ~/.lein/credentials.clj.gpg
файл с:
{:url "s3p://acme/repo/"
:creds :gpg}
push
задача в загрузке, кажется, поддерживает зашифрованные GPG учетные данные для развертывания в Clojars ( https://github.com/boot-clj/boot/wiki/Deploying-with-Boot) в $BOOT_HOME/credentials.clj.gpg
, Так что, в общем, boot поддерживает GPG, казалось бы.
Когда я пытаюсь использовать любой подход к переменной среды, я получаю следующую ошибку, предполагая, что эта форма учетных данных не поддерживается:
java.lang.IllegalArgumentException: No matching ctor found for class org.sonatype.aether.repository.Authentication
...
cemerick.pomegranate.aether/set-authentication aether.clj: 165
cemerick.pomegranate.aether/make-repository aether.clj: 185
cemerick.pomegranate.aether/resolve-dependencies*/fn aether.clj: 712
...
Подход GPG, по-видимому, не в состоянии получить учетные данные и приводит к ошибке 403 от S3.
Я мог бы использовать (System/getenv "AWS_ACCESS_KEY_ID")
Я полагаю, что для непосредственного чтения переменных env в карте репозитория я бы предпочел использовать поддерживаемый механизм, если он есть. Учетные данные, зашифрованные с помощью GPG, были бы для нас идеальным решением, если бы этого можно было достичь как с точки зрения безопасности, так и с помощью установки нескольких вагонов S3 без манипулирования переменными среды.
Я использую последнюю версию Boot (2.4.2) на OS X El-Capitan. GPG может успешно расшифровать учетные данные в командной строке даже в тихом режиме (gpg --quiet --batch --decrypt ~/.boot/credentials.clj.gpg
работает). Помещение учетных данных непосредственно в карту хранилища работает, и то же самое credentials.clj.gpg
файл работает от лейн. Хотя я новичок в Boot, так что, возможно, я упускаю что-то очевидное!
1 ответ
Пожалуйста, обновите Boot-clj до версии 2.5.0, которая значительно упростила gpg-подпись и шифрование. Теперь он использует gpg
бинарный, и забирает ваши настройки без дальнейшей настройки.
GPG-шифрованные учетные данные и переменные среды поддерживаются с помощью встроенного configure-repositories!
объект. Он принимает функцию, которая будет работать на карте репозиториев. Вы можете делать все что угодно в теле, пока вы возвращаете карту хранилища.
Итак, в вашем случае, для GPG-зашифрованных учетных данных:
(configure-repositories!
(let [creds-file (File. (boot.App/bootdir) "credentials.gpg")
creds-data (gpg-decrypt creds-file :as :edn)]
(fn [{:keys [url] :as repo-map}]
(merge repo-map (creds-data url)))))
И для переменных среды:
(configure-repositories!
(fn [{:keys [url] :as repo-map}]
(->> (condp re-find url
#"^https://example\.org/repo"
{:username (get-sys-env "EXAMPLE_USER" :required)
:password (get-sys-env "EXAMPLE_PASS" :required)}
#".*" nil)
(merge repo-map))))
Хорошее место, чтобы положить это в вашем boot.profile
,
Больше информации в вики