使用Terraform进行AWS RDS IAM身份验证

问题描述 投票:3回答:1

我正在尝试正确设置我的基础设施,没有密码或密钥。通过使用户(应用程序)能够使用生成的令牌进行身份验证,AWS RDS可以选择执行此操作。

但是,在文档中,其中一个步骤(this one)要求在Postgres数据库中运行查询以创建用户并授予他特定权限:

CREATE USER test_rds WITH LOGIN;
GRANT rds_iam TO test_rds;

我想用Terraform配置整个堆栈。我在RDS实例化后通过以下方式查找了一些“hacks”来运行查询(here):

resource "null_resource" "db_setup" {
  depends_on = ["aws_db_instance.your_database_instance",   "aws_security_group.sg_allowing_external_access"]

    provisioner "local-exec" {
 // run shell commands to manually psql into the db

要么:

resource "aws_instance" "web" {


  provisioner "remote-exec" {
    inline = [
   // run shell commands to manually psql into the db

但是它们都需要创建主密码并以某种方式在“脚本”中提供它。

是否可以干净利落地使用Terraform,没有硬编码密码传递?

我很乐意配置数据库并只启用具有正确permissions的特定EC2 / ECS实例来访问它,而我的git存储库中没有任何密码。

postgresql amazon-web-services amazon-rds terraform infrastructure-as-a-code
1个回答
3
投票

为RDS数据库启用IAM身份验证后,您将无法再对该用户/角色使用基于密码的身份验证。

这意味着您可以使用安全性较低的密码,甚至只生成一个随机密码(使用random_id resource),用于设置主密码并首先使用进行身份验证,以便您可以向主用户和任何其他用户授予rds_iam权限您创建的用户。

虽然这个密码最终会出现在状态文件中(即使是随机生成的),如上所述,一旦应用了rds_iam授权,您将无法使用此密码登录数据库。

© www.soinside.com 2019 - 2024. All rights reserved.