我有运行 AWS ECS Fargate 的基于 Java 的容器。现在我们通过用户名-密码组合访问AWS RDS Postgres数据库,但我想知道如何使这个过程更安全。
但我有一个担忧:如何避免在.psql脚本(CREATE USER username WITH PASSWORD 'xxx')中存储用户密码?我认为更好的选择是完全避免使用密码,但我不知道该怎么做......
将密码加载到 Fargate 容器来自 AWS Secrets Manager - 这是可以的。
请问您有什么建议吗?
编辑:我将在这里分享我的进展,以便任何人都可以重现
文档:https://docs.aws.amazon.com/.../.../.../UsingWithRDS.IAMDBAuth.html
- 第一阶段 -
目标:IAM Auth 的 PoC(使用 IAM 用户)
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "VisualEditor0",
"Effect": "Allow",
"Action": "rds-db:*",
"Resource": "arn:aws:rds-db:eu-central-1:666:dbuser:db-YFVS/iam_user"
}
]
}
Run Code Online (Sandbox Code Playgroud)
注意:在资源中使用的是resourceId,而不是arn!(这可以在 rds 实例的“配置”选项卡中找到)
CREATE USER iam_user;
GRANT rds_iam …Run Code Online (Sandbox Code Playgroud) 我在使用 Azure Vault 存储我的机密和 .properties 文件来存储机密名称(因此它没有在管道中硬编码)并稍后从 Azure DevOps Pipeline 访问它时遇到问题:.properties 文件:
...
SERVER_ADMIN_SECRET_NAME=server-password-test
...
Run Code Online (Sandbox Code Playgroud)
我正在使用模板管道,它读取文件并将所有 key=values 导出为 $(property),相应的值作为全局属性 ( ##vso[task.setvariable variable=$KEY]$VAL)。
当我调用 Azure Key Vault 时,它会返回密钥名称和导出变量,$(server-password-test)以便以后使用。但是,我无法访问它,因为变量名是另一个变量的值$(SERVER_ADMIN_SECRET_NAME)。解决方案应该是在 variable 内使用变量$($(SERVER_ADMIN_SECRET_NAME)),但这在 Azure Pipelines 中不起作用。
我的管道如下所示:
...
- template: read_properties.yml
parameters:
file: config.properties
- task: AzureKeyVault@1
inputs:
azureSubscription: 'vault-service-connection'
KeyVaultName: 'test-playground'
SecretsFilter: '$(SERVER_ADMIN_SECRET_NAME)'
# TODO : How to fix this??
- task: CmdLine@2
inputs:
script: |
echo $($(SERVER_ADMIN_SECRET_NAME))
...
Run Code Online (Sandbox Code Playgroud)