IAM データベースアクセス用の IAM ポリシーの作成と使用
ユーザーまたはロールに DB インスタンスへの接続を許可するには、IAM ポリシーを作成する必要があります。その後、ポリシーをアクセス許可セットまたはロールにアタッチします。
注記
IAM キーポリシーの詳細については、「Amazon RDS での Identity and Access Management」を参照してください。
次のポリシー例では、ユーザーは IAM データベース認証を使用して、DB インスタンスに接続できます。
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "rds-db:connect" ], "Resource": [ "arn:aws:rds-db:us-east-2:1234567890:dbuser:db-ABCDEFGHIJKL01234/db_user" ] } ] }
重要
管理者権限を持つユーザーは、IAM ポリシーで明示的なアクセス許可が設定されていない場合でも、DB インスタンスのにアクセスできます。管理者アクセスを DB インスタンスのに制限するには、最低限のアクセス許可が適切に設定された IAM ロールを作成し、それを管理者に設定します。
注記
rds-db:
プレフィックスと、rds:
で始まる他の RDS API オペレーションのプレフィックスを混同しないでください。IAM データベース認証に対してのみ、rds-db:
プレフィックスと rds-db:connect
アクションを使用します。これらは、その他のコンテキストでは有効ではありません。
このポリシーには、次の要素を持つ 1 つのステートメントが含まれています。
-
Effect
- DB インスタンスへのアクセスを許可するには、Allow
を指定します。アクセスを明示的に許可しない場合、デフォルトでアクセスは拒否されます。 -
Action
- DB インスタンスへの接続を許可するには、rds-db:connect
を指定します。 -
Resource
- 1 つの DB インスタンスで 1 つのデータベースアカウントを示す Amazon リソースネーム (ARN) を指定します。ARN 形式は次のとおりです。arn:aws:rds-db:
region
:account-id
:dbuser:DbiResourceId
/db-user-name
この形式では、以下のように置き換えます。
-
は、DB インスタンスの AWS リージョンです。このポリシー例での AWS リージョンはregion
us-east-2
です。 -
は DB インスタンスの AWS アカウント番号です。このポリシー例でのアカウント番号はaccount-id
1234567890
です。ユーザーは、DB インスタンスのアカウントと同じアカウントでなければなりません。クロスアカウントアクセスを実行するには、DB インスタンスのアカウントに上記のポリシーで IAM ロールを作成し、他のアカウントがそのロールを引き継ぐことを許可します。
-
は、DB インスタンスの識別子です。この識別子は AWS リージョンに固有であり、変更されることはありません。このポリシー例での識別子はDbiResourceId
db-ABCDEFGHIJKL01234
です。Amazon RDS 用の DB インスタンスのリソース ID を AWS Management Console で検索するには、DB インスタンスを選択して、その詳細を表示します。そして、[Configuration (設定)] タブを選択します。[設定] セクションに [リソース ID] が表示されます。
または、次のように AWS CLI コマンドを使用して、以下に示されているように、現在の AWS リージョンのすべての DB インスタンスの識別子とリソース ID をリストできます。
aws rds describe-db-instances --query "DBInstances[*].[DBInstanceIdentifier,DbiResourceId]"
Amazon Aurora を使用している場合は、
DbiResourceId
の代わりにDbClusterResourceId
を指定してください。詳細については、Amazon Aurora ユーザーガイドの「IAM データベースアクセス用の IAM ポリシーの作成と使用」を参照してください。注記
RDS Proxy 経由でデータベースに接続する場合は、
prx-ABCDEFGHIJKL01234
などのプロキシリソース ID を指定します。RDS Proxy で IAM データベース認証を使用する方法については、「IAM 認証を使用したプロキシへの接続」を参照してください。 -
は、IAM 認証に関連付けるデータベースアカウントの名前です。このポリシー例で、データベースアカウントはdb-user-name
db_user
です。
-
多様なアクセスパターンをサポートするため、他の ARN を構築できます。次のポリシーでは、DB インスタンスで 2 つの異なるデータベースアカウントにアクセスできます。
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "rds-db:connect" ], "Resource": [ "arn:aws:rds-db:us-east-2:123456789012:dbuser:db-ABCDEFGHIJKL01234/jane_doe", "arn:aws:rds-db:us-east-2:123456789012:dbuser:db-ABCDEFGHIJKL01234/mary_roe" ] } ] }
次のポリシーでは、特定の AWS アカウントと AWS リージョンのすべての DB インスタンスとデータベースアカウントに一致させるために「*」文字を使用します。
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "rds-db:connect" ], "Resource": [ "arn:aws:rds-db:us-east-2:1234567890:dbuser:*/*" ] } ] }
次のポリシーは、特定の AWS アカウントと AWS リージョンの DB インスタンスすべてに一致します。ただし、jane_doe
データベースアカウントを持つ DB インスタンス または DB クラスターにのみにアクセスが許可されます。
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "rds-db:connect" ], "Resource": [ "arn:aws:rds-db:us-east-2:123456789012:dbuser:*/jane_doe" ] } ] }
ユーザーまたはロールは、データベースユーザーがアクセスするデータベースにのみアクセスできます。例えば、DB インスタンスに dev という名前のデータベースと、test という名前の別のデータベースがあるとします。データベースユーザー jane_doe
が dev のみにアクセスできる場合、jane_doe
ユーザーでその DB インスタンスにアクセスできるユーザーまたはロールも、dev にのみアクセスできます。このアクセス制限は、テーブル、ビューなどその他のデータベースオブジェクトにも当てはまります。
管理者は、エンティティに必要な、指定されたリソースに対して特定の API オペレーションを実行するアクセス許可を付与する IAM ポリシーを作成する必要があります。続いて、管理者は、それらのアクセス許可を必要とするアクセス許可セットまたはロールに、そのポリシーをアタッチします。ポリシーの例については、「Amazon RDS のアイデンティティベースのポリシーの例」を参照してください。
IAM ポリシーをアクセス許可セットまたはロールにアタッチする
データベース認証を許可する IAM ポリシーを作成した後、そのポリシーをアクセス許可セットまたはロールにアタッチする必要があります。このトピックに関するチュートリアルについては、IAM ユーザーガイドの「はじめてのカスタマー管理ポリシーの作成とアタッチ」を参照してください。
チュートリアルを進める際に、このセクションに記載されているいずれかのポリシー例をスタート点として使用し、ニーズに合わせて調整することができます。チュートリアルを完了すると、rds-db:connect
アクションを利用できる、ポリシーがアタッチされたアクセス許可セットが作成されます。
注記
複数のアクセス許可セットまたはロールを同じデータベースユーザーアカウントにマップできます。例えば、IAM ポリシーで以下のリソース ARN を指定したとします。
arn:aws:rds-db:us-east-2:123456789012:dbuser:db-12ABC34DEFG5HIJ6KLMNOP78QR/jane_doe
ポリシーを Jane、Bob、Diego にアタッチした場合、これらの各ユーザーは、jane_doe
データベースアカウントを使用して、指定された DB インスタンスに接続できます。