Создать пользователя только для чтения postgres с помощью terraform - PullRequest
0 голосов
/ 23 марта 2020

Я пытаюсь найти правильную комбинацию модулей terraform для создания пользователя только для чтения в экземпляре postgres RDS.

https://www.terraform.io/docs/providers/postgresql/

У меня есть база данных с двумя схемами - public и www.

Я начал с:

resource "postgresql_role" "readonly" {                                                                                                                                                      
  name = "readonly"                                                                                                                                                                          
}                                                                                                                                                                                            

resource postgresql_grant "readonly_public" {                                                                                                                                                
  database    = "db_name"                                                                                                                                                                    
  role        = postgresql_role.readonly.name                                                                                                                                                
  schema      = "public"                                                                                                                                                                     
  object_type = "table"                                                                                                                                                                      
  privileges  = ["SELECT"]                                                                                                                                                                   
}                                                                                                                                                                                            

resource postgresql_grant "readonly_www" {                                                                                                                                                   
  database    = "db_name"                                                                                                                                                                    
  role        = postgresql_role.readonly.name                                                                                                                                                
  schema      = "www"                                                                                                                                                                        
  object_type = "table"                                                                                                                                                                      
  privileges  = ["SELECT"]                                                                                                                                                                   
}                                                                                                                                                                                            

resource "postgresql_role" "readonly_user" {                                                                                                                                                 
  name     = "readonly_user"                                                                                                                                                                 
  password = "some_password_123"                                                                                                                                                             
  login    = true                                                                                                                                                                            
  roles = [postgresql_role.readonly.name]                                                                                                                                                    
}

с намерением:

1 ) Создайте роль с именем readonly, которая будет иметь SELECT доступ только к двум схемам в базе данных db_name.

2) Создайте пользователя, который может войти в систему с именем readonly_user, и дайте ему роль readonly.

Когда я это делаю, созданный пользователь все еще может (например) создать таблицу. Однако они do имеют доступ только для чтения к самим таблицам.

Слегка отредактированный результат \du:

db_name=> \du

     Role name  |   Attributes                   |  Member of
----------------+--------------------------------+---------------------------
 readonly_user  | Password valid until infinity  | {readonly}
 readonly       | Cannot login                  +| {}
                | Password valid until infinity  | 

Если есть способ создать пользователь, который может только читать информацию через terraform, я был бы очень признателен.

...