spring 启动 + 从不同的 AWS 账户加载秘密管理器秘密
spring boot + load secret manager secrets from different AWS account
我正在开发一个新的 Spring 引导应用程序,它将与 AWS-Postgres 数据库交互。无服务器数据库托管在不同的 AWS 账户中,其机密存储在 Secretmanager 中。
如何从跨账户秘密管理器有效地获取数据库凭据?
在 POC 中,我通过使用 STSAssumeRoleSessionCredentials
构建一个秘密管理器客户端来做到这一点
AWSSecretsManager awsSecretsManager = AWSSecretsManagerClientBuilder.standard()
.withCredentials(credentialsProvider). // AssumeRole ( cross account session token)
.withRegion("us-west-2")
.build();
我执行了以下步骤来解决用例,但我认为这不是一个干净的解决方案。
- 获取的凭据
- 使用上述数据库凭据填充环境变量
- 让spring-boot/jpa设置数据库连接
我认为可以使用 spring-cloud-starter-aws-secrets-manager-config
解决这个问题,但没有找到任何 example/reference 关于如何配置它以便它可以从不同 AWS 账户中的 SecretManager 获取凭证的信息。
以上方法如何工作,或者有更好的解决方案吗?
你说得对,代码方面可以进一步简化。
假设 accountA 有秘密,而 accountB 是您的应用程序帐户。当前实施执行以下操作:
- 使用 accountA 凭据在 accountB 中创建了一个客户端(遵循 AssumeRole 并且是最佳实践)
- 秘密被获取然后使用。
可以做什么:
- 在 accountA 中使用基于资源的策略,让 IAM 用户 and/or accountB 中的 IAM 角色可以访问 accountA 中的秘密。
- 为用于 encrypt/decrypt 机密的密钥更新 accountA 中的 KMS 密钥策略。让同一个 IAM 用户 and/or 角色有权访问该 KMS 密钥。以便他们可以使用它。
- 更新 IAM 用户的 IAM 策略 and/or accountB 中的角色,明确允许其使用 accountA 的秘密和 KMS 密钥。
现在,您可以使用用于该应用程序的同一 IAM User/Role 访问机密,理论上 spring-cloud-starter-aws-secrets-manager-config
也应该从 accountA 获取机密(我还没有测试过)为我自己)。
您将获得的最少好处是不会为不同的帐户创建 assumedRole 客户端。 More details on AWS Blog
我正在开发一个新的 Spring 引导应用程序,它将与 AWS-Postgres 数据库交互。无服务器数据库托管在不同的 AWS 账户中,其机密存储在 Secretmanager 中。
如何从跨账户秘密管理器有效地获取数据库凭据?
在 POC 中,我通过使用 STSAssumeRoleSessionCredentials
构建一个秘密管理器客户端来做到这一点
AWSSecretsManager awsSecretsManager = AWSSecretsManagerClientBuilder.standard()
.withCredentials(credentialsProvider). // AssumeRole ( cross account session token)
.withRegion("us-west-2")
.build();
我执行了以下步骤来解决用例,但我认为这不是一个干净的解决方案。
- 获取的凭据
- 使用上述数据库凭据填充环境变量
- 让spring-boot/jpa设置数据库连接
我认为可以使用 spring-cloud-starter-aws-secrets-manager-config
解决这个问题,但没有找到任何 example/reference 关于如何配置它以便它可以从不同 AWS 账户中的 SecretManager 获取凭证的信息。
以上方法如何工作,或者有更好的解决方案吗?
你说得对,代码方面可以进一步简化。
假设 accountA 有秘密,而 accountB 是您的应用程序帐户。当前实施执行以下操作:
- 使用 accountA 凭据在 accountB 中创建了一个客户端(遵循 AssumeRole 并且是最佳实践)
- 秘密被获取然后使用。
可以做什么:
- 在 accountA 中使用基于资源的策略,让 IAM 用户 and/or accountB 中的 IAM 角色可以访问 accountA 中的秘密。
- 为用于 encrypt/decrypt 机密的密钥更新 accountA 中的 KMS 密钥策略。让同一个 IAM 用户 and/or 角色有权访问该 KMS 密钥。以便他们可以使用它。
- 更新 IAM 用户的 IAM 策略 and/or accountB 中的角色,明确允许其使用 accountA 的秘密和 KMS 密钥。
现在,您可以使用用于该应用程序的同一 IAM User/Role 访问机密,理论上 spring-cloud-starter-aws-secrets-manager-config
也应该从 accountA 获取机密(我还没有测试过)为我自己)。
您将获得的最少好处是不会为不同的帐户创建 assumedRole 客户端。 More details on AWS Blog