IAM データベースアクセス用の IAM ポリシーの作成と使用
ユーザーまたはロールに DB クラスターへの接続を許可するには、IAM ポリシーを作成する必要があります。その後、ポリシーをアクセス許可セットまたはロールにアタッチします。
注記
IAM キーポリシーの詳細については、「Amazon Aurora での 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:cluster-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:DbClusterResourceId
/db-user-name
この形式では、以下のように置き換えます。
-
は、DB クラスターの AWS リージョンです。このポリシー例での AWS リージョンはregion
us-east-2
です。 -
は DB クラスターの AWS アカウント番号です。このポリシー例でのアカウント番号はaccount-id
1234567890
です。ユーザーは DB クラスターのアカウントと同じアカウントでなければなりません。クロスアカウントアクセスを実行するには、DB クラスターのアカウントに上記のポリシーで IAM ロールを作成し、他のアカウントがそのロールを引き継ぐことを許可します。
-
は、DB クラスターの識別子です。この識別子は AWS リージョンに固有であり、変更されることはありません。このポリシー例での識別子はDbClusterResourceId
cluster-ABCDEFGHIJKL01234
です。Amazon Aurora 用の DB クラスターのリソース ID を AWS Management Console で検索するには、DB クラスターを選択して、その詳細を表示します。そして、[Configuration (設定)] タブを選択します。[設定] セクションに [リソース ID] が表示されます。
または、次のように AWS CLI コマンドを使用して、以下に示されているように、現在の AWS リージョンのすべての DB クラスターの識別子とリソース ID をリストできます。
aws rds describe-db-clusters --query "DBClusters[*].[DBClusterIdentifier,DbClusterResourceId]"
注記
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:cluster-ABCDEFGHIJKL01234/jane_doe", "arn:aws:rds-db:us-east-2:123456789012:dbuser:cluster-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 Aurora のアイデンティティベースのポリシーの例」を参照してください。
IAM ポリシーをアクセス許可セットまたはロールにアタッチする
データベース認証を許可する IAM ポリシーを作成した後、そのポリシーをアクセス許可セットまたはロールにアタッチする必要があります。このトピックに関するチュートリアルについては、IAM ユーザーガイドの「はじめてのカスタマー管理ポリシーの作成とアタッチ」を参照してください。
チュートリアルを進める際に、このセクションに記載されているいずれかのポリシー例をスタート点として使用し、ニーズに合わせて調整することができます。チュートリアルを完了すると、rds-db:connect
アクションを利用できる、ポリシーがアタッチされたアクセス許可セットが作成されます。
注記
複数のアクセス許可セットまたはロールを同じデータベースユーザーアカウントにマップできます。例えば、IAM ポリシーで以下のリソース ARN を指定したとします。
arn:aws:rds-db:us-east-2:123456789012:dbuser:cluster-12ABC34DEFG5HIJ6KLMNOP78QR/jane_doe
ポリシーを Jane、Bob、Diego にアタッチした場合、これらの各ユーザーは、jane_doe
データベースアカウントを使用して、指定された DB クラスターに接続できます。