2015-12-01 3 views
2

В wiki-загрузке (https://github.com/boot-clj/boot/wiki/S3-Repositories) указано, что вы можете использовать встроенные учетные данные AWS для использования S3 в качестве репозитория Maven. Это неоптимально с точки зрения безопасности, потому что я не хочу проверять кредиты AWS, даже если они имеют ограниченные разрешения.Использование GPG-зашифрованных учетных данных (или конкретных переменных среды) с boot-clj и s3-wagon-private

В Leiningen с s3-вагон-частное, вы можете указать ключ доступа и секретный ключ через переменные среды с:

{: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. Таким образом, в общем, загрузка поддерживает 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 Wagons, настроенных без перекрестных переменных среды.

Я использую последнюю версию Boot (2.4.2) на OS X El-Capitan. GPG может дешифровать учетные данные успешно в командной строке, даже в тихом режиме (gpg --quiet --batch --decrypt ~/.boot/credentials.clj.gpg works). Ввод учетных данных непосредственно в карту репозитория делает работы, и тот же credentials.clj.gpg файл работает от лейн. Я новичок в Boot, хотя, возможно, мне не хватает чего-то очевидного!

ответ

3

Обновите до 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.

Дополнительная информация о wiki