当前位置: 首页 > 知识库问答 >
问题:

安全服务帐户凭据json key kotlin

刘瑞
2023-03-14

因此,我正在尝试在我的本地主机上获取服务应用程序凭据,并且遇到了一些问题。我创建并下载了json密钥,我想保护它们,而不是让它们变成纯文本。

我想知道最好的方法。我有这个代码

fun getServiceAccountCredentials(
    pathToFallBackCredentialsFile: String
): ServiceAccountCredentials {
    return try {
        getApplicationDefault() as ServiceAccountCredentials
    } catch (e: IOException) {
        return ServiceAccountCredentials.fromStream(FileInputStream(pathToFallBackCredentialsFile))
    } catch (e: ClassCastException) {
        return ServiceAccountCredentials.fromStream(this::class.java.classLoader.getResourceAsStream(pathToFallBackCredentialsFile))
    }
}

这里的问题是我的JSON文件在我的存储库中以纯文本形式公开。

共有2个答案

封烈
2023-03-14

我找到了解决方案。

我从GCP激活了秘密管理器,并在那里添加了JSON文件。

为了在java/kotlin应用程序中获得这个秘密(如果没有spring,如果有spring,可以使用“spring-cloud-gcp-starter secretmanager”),我使用了下面的代码。

fun accessSecretVersion(secretId: String?, versionId: String?): String {
    val googleCredentials = GoogleCredentials.getApplicationDefault() as UserCredentials
    val projectId = googleCredentials.quotaProjectId
    return getSecret(projectId, secretId, versionId)
}

fun getSecret(projectId: String?, secretId: String?, versionId: String?): String {
    SecretManagerServiceClient.create().use { client ->
        val secretVersionName = SecretVersionName.of(projectId, secretId, versionId)

        val response = client.accessSecretVersion(secretVersionName)

        return response.payload.data.toStringUtf8()
    }
}
聂炜
2023-03-14

选项

    < li >加密它们,然后让应用程序解密它们。然而,如果解密密钥在同一个存储库中,那么您只是将问题转移到了另一个地方,尽管有人需要有人读取/执行您的代码来获取它们。 < li >您的应用将如何运行,例如在Kubernetes等Docker容器中运行,或者在您的数据中心运行其他应用?如果是这样的话,那么你就把责任传递给应用程序容器管理器,让它在启动时注入凭证(和其他环境细节),比如使用一些类似Kubernetes的配置图。我们这样做,并将生产配置映射保存在单独的DevOps专用存储库中。 < li >有专门的机密管理解决方案来解决这个问题,您的应用程序在运行时会调用机密管理器来获取所需的机密,例如https://www.hashicorp.com/products/vault或一些定制云供应商
 类似资料:
  • 我正在构建一个需要读取普通Gmail收件箱(不是域的一部分)的Web服务。 代码: 错误: 我看不出这有什么原因不起作用,但读完这篇文章后,你似乎不能在个人@gmail帐户上使用服务帐户凭据。有谁知道这是真的还是我做错了什么? 感谢您的帮助! 更新 如果我将更改为,我可以查看邮件,但无法修改标签,这是我的要求。

  • 我试图创建一个谷歌日历服务帐户。 以下是我的证件: 以下是我的服务帐户定义(已启用服务帐户的站点范围委托):

  • 我用Python制作了一个使用Google DialogFlow的CLI应用程序。正如文档所提供的,我创建了一个服务帐户并下载了JSON文件。然后我用Python加载它,应用程序就可以工作了。 现在,我想在GitHub和上发布我的软件,但当我加载所有文件时,我收到一封来自Google的电子邮件,声明我没有正确管理我的凭据。我同意这一点。问题是我不明白如何正确管理这些证书。

  • 我有一个使用OAuth客户端从GDrive文件导出文本的脚本,它运行得非常好- 但是每次都要通过OAuth流是一件痛苦的事情,因为只有我在使用这个脚本,所以我想简化一些事情,使用一个服务帐户来代替它,从这篇文章开始- Google Drive API Python服务帐户示例 我的新服务帐户脚本执行完全相同的操作,如下所示- 但是当我为同一个运行它时,我会得到以下结果- 感觉服务帐户脚本正在通过身

  • 我有一个服务帐户,并且我正在向其中一个真实用户授予此服务帐户上的“服务帐户用户”角色。用户已将“应用程序默认凭据”设置为其配置的一部分,以避免每次运行时出现登录屏幕。我不确定此用户运行操作只有服务帐户才能访问的某些资源的代码的最佳方式是什么。出于安全原因,我不想使用服务帐户密钥 JSON 文件。我正在尝试以下代码 我收到错误:属性错误:“凭据”对象没有属性“with_subject”