在引导 wiki ( https://github.com/boot-clj/boot/wiki/S3-Repositories ) 中,它指定您可以内联 AWS 凭证以将 S3 用作 Maven 存储库。从安全角度来看,这是次优的,因为我不想 checkin AWS 凭证,即使它们的权限有限。
在 leiningen 中使用 s3-wagon-private,您可以通过环境变量指定访问 key 和 secret key :
{:url "s3p://acme/repo/"
:username :env
:passphrase :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 加密凭据,以便部署到 $BOOT_HOME/credentials.clj.gpg
中的 Clojars ( https://github.com/boot-clj/boot/wiki/Deploying-with-Boot )。所以,一般来说,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 方法似乎无法获取凭据,并导致 S3 出现 403 错误。
我可以使用 (System/getenv "AWS_ACCESS_KEY_ID")
直接读取存储库映射中的环境变量,但我宁愿使用受支持的机制(如果有)。如果可以从安全角度以及在不处理环境变量的情况下设置多个 S3 Wagon 来实现这一点,那么 GPG 加密凭证对我们来说将是理想的解决方案。
我在 OS X El-Capitan 上使用最新的 Boot (2.4.2)。即使在安静模式下,GPG 也可以在命令行上成功解密凭据(gpg --quiet --batch --decrypt ~/.boot/credentials.clj.gpg
有效)。将凭据直接放入存储库映射确实可以工作,并且相同的credentials.clj.gpg
文件可以在lein中工作。不过,我是启动新手,所以我可能错过了一些明显的东西!
最佳答案
请更新到 Boot-clj 2.5.0,它极大地简化了 gpg 签名和加密。现在,它利用 gpg
二进制文件,无需进一步配置即可获取您的设置。
通过内置的 configure-repositories!
工具支持 GPG 加密的凭据和环境变量。它接受一个将在存储库映射上操作的函数。只要返回一个存储库映射,您就可以在正文中做任何您想做的事情。
因此,就您而言,对于 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 的更多信息
关于maven - 将 GPG 加密凭证(或特定环境变量)与 boot-clj 和 s3-wagon-private 一起使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34017732/