Использование 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,

Больше информации в вики

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