メニュー
Amazon Relational Database Service
ユーザーガイド (API Version 2014-10-31)

詳細に設定されたアクセスコントロールのための IAM ポリシー条件の使用

Amazon RDS でアクセス権限を付与するときは、アクセス権限ポリシーを有効にする方法を決める条件を指定できます。

概要

Amazon RDS では、IAM ポリシー (「アクセスコントロール」を参照) を使用してアクセス権限を付与するとき、条件を指定することもできます。たとえば、次のようにすることができます。

  • 特定のデータベースエンジンを指定した場合にのみ DB インスタンスを作成することをユーザーに許可する。

  • 特定のタグ名とタグ値でタグ付けされた RDS リソースを変更することをユーザーに許可する。

Amazon RDS の IAM ポリシーで条件を指定するには、以下の 2 つの方法があります。

条件の指定: 条件キーの使用

AWS には、アクセスコントロールのために IAM をサポートするすべての AWS サービスに合わせて事前定義された一連の条件キー (AWS 全体に対する条件キー) が用意されています。たとえば、aws:userid 条件キーを使用して、アクションのリクエスト時に特定の AWS ID を要求できます。AWS 全体に対する条件キーの詳細とリストについては、『IAM ユーザーガイド』の「条件に利用可能なキー」を参照してください。

注記

条件キーは大文字と小文字が区別されます。

Amazon RDS にはさらに、IAM アクセス権限ポリシーで Condition 要素に含めることのできる、独自の条件キーも用意されています。以下の表では、RDS リソースに適用される RDS 条件キーを示しています。

RDS 条件キー 説明 値の型
rds:DatabaseClass DB インスタンスクラスのタイプ。 文字列
rds:DatabaseEngine データベースエンジン (MySQL など)。 文字列
rds:DatabaseName DB インスタンス上のデータベースのユーザー定義名。 文字列
rds:MultiAz DB インスタンスが複数のアベイラビリティーゾーンで実行されるかどうかを指定する値。DB インスタンスがマルチ AZ を使用していることを示すには、true を指定します。 ブール
rds:Piops インスタンスでサポートされているプロビジョンド IOPS (PIOPS) の数を示す値。PIOPS が有効になっていない DB インスタンスを示すには、0 を指定します。 整数
rds:StorageSize ストレージボリュームのサイズ (GB 単位)。 整数
rds:Vpc DB インスタンスが Amazon Virtual Private Cloud (Amazon VPC) で実行されているかどうかを示す値。DB インスタンスが Amazon VPC で実行されていることを示すには、true を指定します。 ブール

たとえば、以下の Condition 要素では、条件キーを使用して、MySQL データベースエンジンを指定しています。rds:CreateDBInstance アクションに対するアクセス権限を付与する IAM ポリシーにこの条件を適用して、MySQL データベースエンジンを使用する DB インスタンスの作成のみをユーザーに許可できます。この条件を使用する IAM ポリシーの例については、「ポリシー例: 条件キーの使用」を参照してください。

"Condition":{"StringEquals":{"rds:DatabaseEngine": "mysql" } }

すべての RDS 条件キー識別子とそれらが適用される RDS のアクションとリソースのリストについては、「Amazon RDS API のアクセス権限: アクション、リソース、条件リファレンス」を参照してください。

ポリシー例: 条件キーの使用

以下に示しているのは、Amazon RDS IAM アクセス権限ポリシーでの条件キーの使用例です。

例 1: 特定の DB エンジンを使用する DB インスタンスの作成のためのアクセス権限を付与する (ただし マルチ AZ でない DB インスタンス)

以下のポリシーでは、RDS 条件キーを使用して、MySQL データベースエンジンを使用するがマルチ AZ でない DB インスタンスのみをユーザーが作成できるようにします。Condition 要素では、データベースエンジンが MySQL であることが要件になることを示しています。

Copy
{ "Version":"2012-10-17", "Statement":[ { "Sid":"AllowMySQLCreate", "Effect":"Allow", "Action":"rds:CreateDBInstance", "Resource":"*", "Condition":{ "StringEquals":{ "rds:DatabaseEngine":"mysql" }, "Bool":{ "rds:MultiAz": false } } } ] }

例 2: 特定の DB インスタンスクラスの DB インスタンスの作成およびプロビジョンド IOPS を使用する DB インスタンスの作成のためのアクセス権限を明示的に拒否する

以下のポリシーでは、最もサイズが大きくてコストの高いインスタンスである DB インスタンスクラス r3.8xlargem4.10xlarge を使用する DB インスタンスの作成のためのアクセス権限を明示的に拒否しています。このポリシーでは、追加のコストが発生するプロビジョンド IOPS を使用する DB インスタンスの作成もユーザーに禁止しています。

明示的に拒否するアクセス権限は、付与する他のいずれのアクセス権限よりも優先されます。これにより、決して付与されることのないアクセス権限を ID が誤って取得することがなくなります。

Copy
{ "Version":"2012-10-17", "Statement":[ { "Sid":"DenyLargeCreate", "Effect":"Deny", "Action":"rds:CreateDBInstance", "Resource":"*", "Condition":{ "StringEquals":{ "rds:DatabaseClass":[ "db.r3.8xlarge", "db.m4.10xlarge" ] } } }, { "Sid":"DenyPIOPSCreate", "Effect":"Deny", "Action":"rds:CreateDBInstance", "Resource":"*", "Condition":{ "NumericNotEquals":{ "rds:Piops":"0" } } } ] }

条件の指定: カスタムタグの使用

RDS では、カスタムタグを使用して IAM ポリシーで条件を指定することがサポートされています。

たとえば、environment という名前で、betastagingproduction などの値を持つタグを DB インスタンスに追加する場合、environment タグの値に基づいて、DB インスタンスのユーザーを制限するポリシーを作成できます。

注記

カスタムタグ識別子は大文字と小文字が区別されます。

以下の表では、Condition 要素で使用できる RDS タグ識別子を示しています。

RDS タグ識別子 適用先
db-tag リードレプリカを含む DB インスタンス
snapshot-tag DB スナップショット
ri-tag リザーブド DB インスタンス
secgrp-tag DB セキュリティグループ
og-tag DB オプショングループ
pg-tag DB パラメータグループ
subgrp-tag DB サブネットグループ
es-tag イベントサブスクリプション
cluster-tag DB クラスター
cluster-pg-tag DB クラスターのパラメータグループ
cluster-snapshot-tag DB クラスタースナップショット

カスタムタグの条件の構文は次のとおりです。

"Condition":{"StringEquals":{"rds:rds-tag-identifier/tag-name": ["value"]} }

たとえば、次の Condition 要素は、environment という名前のタグを持ち、タグの値が production である DB インスタンスに適用されます。

"Condition":{"StringEquals":{"rds:db-tag/environment": ["production"]} }

タグの作成の詳細については、「Amazon RDS リソースのタグ付け」を参照してください。

重要

タグを使用して RDS リソースへのアクセスを管理する場合は、RDS リソースのタグへのアクセスを保護することをお勧めします。AddTagsToResource および RemoveTagsFromResource アクションのポリシーを作成することによって、タグへのアクセスを管理できます。たとえば、次のポリシーは、ユーザーがすべてのリソースのタグを追加または削除することを拒否します。次に、特定のユーザーがタグを追加または削除することを許可するポリシーを作成できます。

Copy
{ "Version":"2012-10-17", "Statement":[ { "Sid":"DenyTagUpdates", "Effect":"Deny", "Action":[ "rds:AddTagsToResource", "rds:RemoveTagsFromResource" ], "Resource":"*" } ] }

すべての条件キーとそれらが適用される RDS アクションとリソースのリストについては、「Amazon RDS API のアクセス権限: アクション、リソース、条件リファレンス」を参照してください。

ポリシー例: カスタムタグの使用

以下に示しているのは、Amazon RDS IAM アクセス権限ポリシーでのカスタムタグの使用例です。Amazon RDS リソースへのタグの追加の詳細については、「Amazon RDS の Amazon リソースネーム (ARN) での作業」を参照してください。

注記

すべての例で、us-west-2 リージョンを使用し、架空のアカウント ID を含めています。

例 1: 特定のタグが 2 つの異なる値に設定されたリソースに対するアクションのためのアクセス権限を付与する

以下のポリシーでは、 stage タグが development または test に設定されたインスタンスで ModifyDBInstance および CreateDBSnapshot API を実行するためのアクセス権限を付与しています。

Copy
{ "Version":"2012-10-17", "Statement":[ { "Sid":"AllowDevTestCreate", "Effect":"Allow", "Action":[ "rds:ModifyDBInstance", "rds:CreateDBSnapshot" ], "Resource":"*", "Condition":{ "StringEquals":{ "rds:db-tag/stage":[ "development", "test" ] } } } ] }

例 2: 指定した DB パラメータグループを使用する DB インスタンスの作成のためのアクセス権限を明示的に拒否する

以下のポリシーでは、特定のタグ値が設定された DB パラメータグループを使用する DB インスタンスの作成のためのアクセス権限を明示的に拒否しています。DB インスタンスを作成するときに特定のユーザー定義の DB パラメータグループの使用を必須とする場合にも、このポリシーを適用できます。Deny を使用するポリシーは、ほとんどの場合、適用範囲のより広いポリシーによって付与されるアクセス権限を制限するために使用します。

明示的に拒否するアクセス権限は、付与する他のいずれのアクセス権限よりも優先されます。これにより、決して付与されることのないアクセス権限を ID が誤って取得することがなくなります。

Copy
{ "Version":"2012-10-17", "Statement":[ { "Sid":"DenyProductionCreate", "Effect":"Deny", "Action":"rds:CreateDBInstance", "Resource":"*", "Condition":{ "StringEquals":{ "rds:pg-tag/usage":"prod" } } } ] }

例 3: インスタンス名にユーザー名がプレフィックスとして付加されている DB インスタンスに対するアクションのためのアクセス権限を付与する

以下のポリシーでは、DB インスタンス名の前にユーザー名が付いている DB インスタンスのうち、devo と同等の stage というタグが付いているか、または stage というタグが付いていない DB インスタンスに対する、API (AddTagsToResource または RemoveTagsFromResource を除く) の呼び出しのためのアクセス権限を付与しています。

ポリシーの Resource 行では、リソースをその Amazon Resource Name (ARN) により識別しています。ARN と Amazon RDS リソースの使用の詳細については、「Amazon RDS の Amazon リソースネーム (ARN) での作業」を参照してください。

Copy
{ "Version":"2012-10-17", "Statement":[ { "Sid":"AllowFullDevAccessNoTags", "Effect":"Allow", "NotAction":[ "rds:AddTagsToResource", "rds:RemoveTagsFromResource" ], "Resource":"arn:aws:rds:*:123456789012:db:${aws:username}*", "Condition":{ "StringEqualsIfExists":{ "rds:db-tag/stage":"devo" } } } ] }

関連トピック