【问题标题】:Where to store private keys for a continuous integration (CI) deployment?在哪里存储用于持续集成 (CI) 部署的私钥?
【发布时间】:2014-11-04 04:15:32
【问题描述】:

我正在构建一个基于私有 git 存储库的持续集成部署。我的项目在资源目录中包含一个未版本化的 PK 文件。当我手动部署时,这工作正常,我确保私钥的副本位于任何工作站的路径上。

现在我正在从存储库进行部署,我很好奇在哪里存储密钥。这是一个私人仓库,我想我可以只对 PK 进行版本控制,但如果有替代方案,我宁愿不要。

任何提示或技巧?

更新:抱歉含糊不清,PK 是用于 Google API 的服务帐户。因此,它必须在运行时提供给 Java API 库。例如:

public void startGoogleDrive() {
    HttpTransport httpTransport = new NetHttpTransport();
    JacksonFactory jsonFactory = new JacksonFactory();
    GoogleCredential credential = new GoogleCredential.Builder()
            .setTransport(httpTransport)
            .setJsonFactory(jsonFactory)
            .setServiceAccountId(SERVICE_ACCOUNT_EMAIL)
            .setServiceAccountScopes(Arrays.asList(DriveScopes.DRIVE))
            .setServiceAccountUser(userEmail)
            .setServiceAccountPrivateKeyFromP12File(
                    new java.io.File(SERVICE_ACCOUNT_PKCS12_FILE_PATH)) // <- private key file
            .build();
}

【问题讨论】:

    标签: git deployment continuous-integration


    【解决方案1】:

    是的,在 Git 存储库中保留凭据或其他敏感数据几乎总是一个坏主意。

    我所知道的对诸如私钥之类的东西进行版本控制的唯一良好做法是将它们放在configuration management 策略的私有存储库中,例如CFEnginePuppetAnsible、@ 987654325@ 或Salt。当配置管理系统守护程序运行时,它可以从存储库创建或更新密钥。再说一次,如果随意执行,即使这样也可能导致密钥被滥用。

    我个人不会将该密钥保留在项目的源存储库中。您可能会发现有人需要查看代码但无法访问密钥的情况。理想情况下,应手动或通过配置管理系统将密钥单独部署到应用程序服务器。

    【讨论】:

    • 感谢修改后的答案并建议 Ed
    猜你喜欢
    • 1970-01-01
    • 2017-12-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-12-04
    相关资源
    最近更新 更多