AWS EC2インスタンスがRDSインスタンス(Postgresql)に接続しています。 RDSインスタンスを作成したときに、DBルートのユーザー名はmy_user1
、パスワードはpassword1
であると伝えました。現在、ロールとスーパーユーザーを作成しようとしています。しかし失敗します:
$ createuser -P -d -s -e my_user2 --Host myhost.com -U my_user1
Enter password for new role: XXXYYYZZZ
Enter it again: XXXYYYZZZ
Password: password1
CREATE ROLE my_user2 PASSWORD 'md5999999c0101a1d64afd57575e06f999c' SUPERUSER CREATEDB CREATEROLE INHERIT LOGIN;
createuser: creation of new role failed: ERROR: must be superuser to create superusers
$
-s
フラグなしでコマンドを繰り返すと、機能します。
$ createuser -P -d -e my_user2 --Host myhost.com -U my_user1
Enter password for new role:
Enter it again:
Password:
CREATE ROLE my_user2 PASSWORD 'md5999999c0101a1d64afd57575e06f888c' NOSUPERUSER CREATEDB NOCREATEROLE INHERIT LOGIN;
$
したがって、my_user1
にはスーパーユーザーを作成する権限がありません。しかし、これは、RDSが私の管理ユーザーであると私が言ったユーザーです! my_user1
にスーパーユーザーを作成する権限がない場合、誰が作成しますか?また、AWSからユーザー名/パスワードを取得するにはどうすればよいですか?
RDSインスタンスはAmazonによって管理されます。そのため、レプリケーションなどを壊さないようにするため、ユーザー(インスタンスの作成時に設定したrootユーザーであっても)には、完全なスーパーユーザー権限がありません。
http://docs.aws.Amazon.com/AmazonRDS/latest/UserGuide/Appendix.PostgreSQL.CommonDBATasks.html
DBインスタンスを作成すると、作成したマスターユーザーシステムアカウントがrds_superuserロールに割り当てられます。 rds_superuserロールは、PostgreSQLスーパーユーザーロール(ローカルインスタンスでは通常、postgresという名前)に似た事前定義のAmazon RDSロールですが、いくつかの制限がありますAs PostgreSQLスーパーユーザーの役割では、rds_superuserの役割がDBインスタンスに対する最も高い権限を持っているため、ユーザーがDBインスタンスに最も多くのアクセス権を必要としない限り、この役割をユーザーに割り当てないでください。
現在の権限を\du+
または\dg+
で一覧表示すると、スーパーユーザーではなく、許可された権限のみロールの作成、DBの作成であることがわかります。そのため、現在割り当てられている権限よりも高い権限を自分に割り当てることはできません。
通常、ホストされた環境では、rootまたはスーパーユーザーのアクセス許可は与えられません。完全に制御するには、カスタムEC2インスタンスを起動し、PostgreSQLをローカルにインストールすることをお勧めします。