メニュー
Amazon Redshift
管理ガイド (API Version 2012年12月1日)

Amazon Redshift でアイデンティティベースのポリシー (IAM ポリシー) を使用する

このトピックでは、アカウント管理者が IAM アイデンティティ (ユーザー、グループ、ロール) へのアクセス権限ポリシーをアタッチする、アイデンティティベースのポリシーの例を示します。

重要

初めに、Amazon Redshift リソースへのアクセスを管理するための基本概念と使用可能なオプションについて説明する概要トピックをお読みになることをお勧めします。詳細については、「Amazon Redshift リソースへのアクセス権限の管理の概要」を参照してください。

このセクションでは、次のトピックを対象としています。

以下に示しているのは、アクセス権限ポリシーの例です。このポリシーでは、ユーザーはすべてのクラスターを作成、削除、変更、再起動できます。さらに、クラスター識別子が production で始まるクラスターを削除または変更するアクセス権限が拒否されます。

Copy
{ "Version": "2012-10-17", "Statement": [ { "Sid":"AllowClusterManagement", "Action": [ "redshift:CreateCluster", "redshift:DeleteCluster", "redshift:ModifyCluster", "redshift:RebootCluster" ], "Resource": [ "*" ], "Effect": "Allow" }, { "Sid":"DenyDeleteModifyProtected", "Action": [ "redshift:DeleteCluster", "redshift:ModifyCluster" ], "Resource": [ "arn:aws:redshift:us-west-2:123456789012:cluster:production*" ], "Effect": "Deny" } ] }

このポリシーには以下の 2 つのステートメントがあります。

  • 最初のステートメントでは、ユーザーがクラスターを作成、削除、変更し、および再起動するユーザーのアクセス権限を付与します。ステートメントはワイルドカード文字 (*) を、Resource 値として指定し、ポリシーをルート AWS アカウントが所有するすべての Amazon Redshift リソースに適用できるようにします。

  • 2 番目のステートメントでは、クラスターの削除または変更するアクセス権限を拒否します。ステートメントではワイルドカード文字 (*) が含まれる Resource 値のためにクラスター Amazon リソースネーム (ARN) を指定します。そのため、このステートメントはクラスター識別子が production で始まるルート AWS アカウントが所有する、すべての Amazon Redshift クラスターに適用されます。

Amazon Redshift コンソールを使用するために必要なアクセス権限

Amazon Redshift コンソールを使用しているユーザーの場合、そのユーザーは、Amazon Redshift リソースと、Amazon EC2 セキュリティーおよびネットワーク情報を含むその他の関連情報をその AWS アカウントで記述できる、最小限のアクセス権限を持っている必要があります。

これらの最小限必要なアクセス権限よりも制限された IAM ポリシーを作成している場合、その IAM ポリシーを使用するユーザーに対してコンソールは意図したとおりには機能しません。Amazon Redshift での AWS 管理 (事前定義) ポリシー で説明されているとおり、ユーザーが Amazon Redshift コンソールを使用できること、および、 AmazonRedshiftReadOnlyAccess 管理対象ポリシーがユーザーにアタッチされていることを確認してください。

AWS CLI または Amazon Redshift API のみを呼び出すユーザーには、最小限のコンソールアクセス権限を付与する必要はありません。

GetClusterCredentials のリソースポリシー

JDBC または ODBC 接続と IAM データベース認証情報を使用してクラスターデータベースに接続するか、必要な GetClusterCredentials アクションをプログラムで呼び出すには、少なくとも redshift:GetClusterCredentials アクションを呼び出すアクセス許可と、dbuser リソースへのアクセス権が必要です。

JDBC または ODBC 接続を使用する場合、server および port の代わりに cluster_id および region を指定できますが、そのためには、ポリシーで redshift:DescribeClusters アクションと cluster リソースへのアクセス権を許可する必要があります。

オプションパラメータ Autocreate、DbGroups、および DbName アクションで GetClusterCredentials アクションを呼び出す場合は、アクションを許可し、次の表にリストされているリソースへのアクセスを許可する必要もあります。

GetClusterCredentials パラメータ

アクション

リソース

Autocreate

redshift:CreateClusterUser

dbuser

DbGroups

redshift:JoinGroup

dbgroup

DbName

NA dbname

リソースの詳細については、「Amazon Redshift リソースおよびオペレーション」を参照してください。

また、次の条件をポリシーに含めることもできます。

  • redshift:DurationSeconds

  • redshift:DbName

  • redshift:DbUser

条件の詳細については、「ポリシーでの条件の指定」を参照してください

Amazon Redshift での AWS 管理 (事前定義) ポリシー

AWS は、AWS によって作成され管理されるスタンドアロンの IAM ポリシーが提供する多くの一般的ユースケースに対応します。管理ポリシーは、一般的ユースケースに必要なアクセス権限を付与することで、どの権限が必要なのかをユーザーが調査する必要をなくすることができます。詳細については、IAM ユーザーガイド の「AWS 管理ポリシー」を参照してください。

アカウントのユーザーにアタッチ可能な以下の AWS 管理ポリシーは、Amazon Redshift に固有のものです。

  • AmazonRedshiftReadOnlyAccess – AWS アカウントのすべての Amazon Redshift リソースへの読み取り専用アクセスを許可します。

  • AmazonRedshiftFullAccess – AWS アカウントのすべての Amazon Redshift リソースへのフルアクセスを許可します。

独自のカスタム IAM ポリシーを作成して、Amazon Redshift API アクションとリソースのためのアクセス権限を許可することもできます。これらのカスタムポリシーは、それらのアクセス権限が必要な IAM ユーザーまたはグループにアタッチできます。

お客様が管理するポリシーの例

このセクションでは、さまざまな Amazon Redshift アクションのアクセス権限を付与するユーザーポリシー例を示しています。これらのポリシーは、Amazon Redshift API、AWS SDK、または AWS CLI を使用しているときに機能します。

注記

すべての例で、米国西部 (オレゴン) リージョン (us-west-2) を使用し、架空のアカウント ID を含めています。

例 1: ユーザーにすべての Amazon Redshift アクションおよびリソースへの完全アクセスを許可する

次のポリシーでは、すべてのリソースですべての Amazon Redshift アクションにアクセスできます。

Copy
{ "Version": "2012-10-17", "Statement": [ { "Sid":"AllowRedshift", "Action": [ "redshift:*" ], "Effect": "Allow", "Resource": "*" } ] }

Action 要素の値 redshift:* は、Amazon Redshift のすべてのアクションを示します。

例 2: 一連の Amazon Redshift アクションへのユーザーアクセスを拒否する

デフォルトでは、すべてのアクセス権が拒否されます。ただし、特定のアクションまたは一連のアクションへのアクセスを明示的に拒否しなければならない場合もあります。次のポリシーでは、すべての Amazon Redshift アクションへのアクセスが許可され、名前が Delete で始まる Amazon Redshift アクションへのアクセスが明示的に拒否されます。このポリシーは、us-west-2 のすべての Amazon Redshift リソースに適用されます。

Copy
{ "Version": "2012-10-17", "Statement": [ { "Sid":"AllowUSWest2Region", "Action": [ "redshift:*" ], "Effect": "Allow", "Resource": "arn:aws:redshift:us-west-2:*" }, { "Sid":"DenyDeleteUSWest2Region", "Action": [ "redshift:Delete*" ], "Effect": "Deny", "Resource": "arn:aws:redshift:us-west-2:*" } ] }

例 3: ユーザーがクラスターを管理することを許可する

次のポリシーでは、ユーザーはすべてのクラスターを作成、削除、変更、再起動できます。さらに、名前が protected で始まるクラスターを削除するアクセス権限が拒否されます。

Copy
{ "Version": "2012-10-17", "Statement": [ { "Sid":"AllowClusterManagement", "Action": [ "redshift:CreateCluster", "redshift:DeleteCluster", "redshift:ModifyCluster", "redshift:RebootCluster" ], "Resource": [ "*" ], "Effect": "Allow" }, { "Sid":"DenyDeleteProtected", "Action": [ "redshift:DeleteCluster" ], "Resource": [ "arn:aws:redshift:us-west-2:123456789012:cluster:protected*" ], "Effect": "Deny" } ] }

例 4: ユーザーにスナップショットアクセスを許可し、取り消す

次のポリシーでは、ユーザー (例: ユーザー A) に次の操作を許可します。

  • shared というクラスターから作成されたスナップショットへのアクセスを許可します。

  • shared クラスターから作成されたスナップショット (スナップショット名の先頭が revokable) のスナップショットアクセスを取り消します。

Copy
{ "Version": "2012-10-17", "Statement": [ { "Sid":"AllowSharedSnapshots", "Action": [ "redshift:AuthorizeSnapshotAccess" ], "Resource": [ "arn:aws:redshift:us-west-2:123456789012:shared/*" ], "Effect": "Allow" }, { "Sid":"AllowRevokableSnapshot", "Action": [ "redshift:RevokeSnapshotAccess" ], "Resource": [ "arn:aws:redshift:us-west-2:123456789012:snapshot:*/revokable*" ], "Effect": "Allow" } ] }

ユーザー A がスナップショットへのアクセスをユーザー B に許可した場合、スナップショットからクラスターを復元できるように、ユーザー B には次のようなポリシーを与える必要があります。次のポリシーでは、ユーザー B はスナップショットを表現したり、スナップショットから復元したり、クラスターを作成したりできます。これらのクラスター名の先頭は from-other-account にする必要があります。

Copy
{ "Version": "2012-10-17", "Statement": [ { "Sid":"AllowDescribeSnapshots", "Action": [ "redshift:DescribeClusterSnapshots" ], "Resource": [ "*" ], "Effect": "Allow" }, { "Sid":"AllowUserRestoreFromSnapshot", "Action": [ "redshift:RestoreFromClusterSnapshot" ], "Resource": [ "arn:aws:redshift:us-west-2:123456789012:snapshot:*/*", "arn:aws:redshift:us-west-2:444455556666:cluster:from-other-account*" ], "Effect": "Allow" } ] }

例 5: クラスタースナップショットのコピーとスナップショットからのクラスターの復元をユーザーに許可する

次のポリシーでは、ユーザーは big-cluster-1 という名前のクラスターから作成したスナップショットをコピーし、名前が snapshot-for-restore で始まるスナップショットを復元できます。

Copy
{ "Version": "2012-10-17", "Statement": [ { "Sid":"AllowCopyClusterSnapshot", "Action": [ "redshift:CopyClusterSnapshot" ], "Resource": [ "arn:aws:redshift:us-west-2:123456789012:snapshot:big-cluster-1/*" ], "Effect": "Allow" }, { "Sid":"AllowRestoreFromClusterSnapshot", "Action": [ "redshift:RestoreFromClusterSnapshot" ], "Resource": [ "arn:aws:redshift:us-west-2:123456789012:snapshot:*/snapshot-for-restore*", "arn:aws:redshift:us-west-2:123456789012:cluster:*" ], "Effect": "Allow" } ] }

次のサンプルポリシーでは、Amazon Redshift、Amazon Simple Notification Service (Amazon SNS)、Amazon CloudWatch のすべてのアクションとリソースへのアクセスを許可し、アカウントにおける関連するすべての Amazon EC2 リソースでの指定されたアクションを許可します。

注記

リソースレベルのアクセス権限は、このサンプルポリシーで指定された Amazon EC2 アクションではサポートされません。

Copy
{ "Version": "2012-10-17", "Statement": [ { "Sid":"AllowRedshift", "Effect": "Allow", "Action": [ "redshift:*" ], "Resource": [ "*" ] }, { "Sid":"AllowSNS", "Effect": "Allow", "Action": [ "sns:*" ], "Resource": [ "*" ] }, { "Sid":"AllowCloudWatch", "Effect": "Allow", "Action": [ "cloudwatch:*" ], "Resource": [ "*" ] }, { "Sid":"AllowEC2Actions", "Effect": "Allow", "Action": [ "ec2:AllocateAddress", "ec2:AssociateAddress", "ec2:AttachNetworkInterface", "ec2:DescribeAccountAttributes", "ec2:DescribeAddresses", "ec2:DescribeAvailabilityZones", "ec2:DescribeInternetGateways", "ec2:DescribeSecurityGroups", "ec2:DescribeSubnets", "ec2:DescribeVpcs" ], "Resource": [ "*" ] } ] }

GetClusterCredentials を使用するポリシーの例

このセクションのポリシー例では、次のサンプルパラメータ値を使用します。

  • サービス対象: us-west-2

  • AWS アカウント: 123456789012

  • クラスター名: examplecluster

  • データベースユーザー名: temp_creds_user

次の例では、IAM ユーザーまたはロールにデータベースユーザー名 temp_creds_user を使用した GetClusterCredentials アクションの呼び出しを許可するポリシーを示します。指定された dbuser はデータベースに存在している必要があります。

Copy
{ "Version": "2012-10-17", "Statement": { "Effect": "Allow", "Action": "redshift:GetClusterCredentials", "Resource": "arn:aws:redshift:us-west-2:123456789012:dbuser:examplecluster/temp_creds_user" } }

次の例では、redshift:CreateClusterUser アクションのアクセス許可を追加します。これは、新しいユーザーを作成するために必要になります。このポリシーでは任意のユーザー名を使用できますが、データベースグループ名 temp_creds_group を使用した場合のみ、データベースグループパラメータが許可されます。

Copy
{ "Version": "2012-10-17", "Statement": { "Effect": "Allow", "Action": [ "redshift:GetClusterCredentials", "redshift:CreateClusterUser" ], "Resource": "*" }, { "Effect": "Allow", "Action": "redshift:JoinGroup", "Resource": "arn:aws:redshift:us-west-2:123456789012:dbgroup:*/temp_creds_group" } }

次の例では、以下の条件を追加します。

  • 期間は 1200 秒以内である必要があります。

  • データベース名は「dev」である必要があります。

  • データベースユーザー名は「developer」である必要があります。

Copy
{ "Version": "2012-10-17", "Statement": { "Effect": "Allow", "Action": [ "redshift:GetClusterCredentials", "redshift:CreateClusterUser" ], "Resource": "*", "Condition": { "NumericLessThan": { "redshift:DurationSeconds": 1200 }, "StringEquals": { "redshift:DbName": "dev", "redshift:DbUser": "developer" }, { "Effect": "Allow", "Action": "redshift:JoinGroup", "Resource": "arn:aws:redshift:us-west-2:123456789012:dbgroup:*/temp_creds_group" } }

次のポリシーでは、GetCredentials アクションが、CreateClusterUser および JoinGroup アクションとともに許可されます。このポリシーでは条件キーを使用して、AWS ユーザー ID が「AIDIODR4TAW7CSEXAMPLE:${redshift:DbUser}@yourdomain.com」に一致する場合のみ、GetClusterCredentials および CreateClusterUser アクションが許可されます。

Copy
{ "Version": "2012-10-17", "Statement": [ { "Sid": "GetClusterCredsStatement", "Effect": "Allow", "Action": [ "redshift:GetClusterCredentials" ], "Resource": [ "arn:aws:redshift:us-west-2:123456789012:dbuser:examplecluster/${redshift:DbUser}", "arn:aws:redshift:us-west-2:123456789012:dbname:examplecluster/*", "arn:aws:redshift:us-west-2:123456789012:dbgroup:examplecluster/common_group" ], "Condition": { "StringEquals": { "aws:userid":"AIDIODR4TAW7CSEXAMPLE:${redshift:DbUser}@yourdomain.com" } } }, { "Sid": "CreateClusterUserStatement", "Effect": "Allow", "Action": [ "redshift:CreateClusterUser" ], "Resource": [ "arn:aws:redshift:us-west-2:123456789012:dbuser:examplecluster/${redshift:DbUser}" ], "Condition": { "StringEquals": { "aws:userid":"AIDIODR4TAW7CSEXAMPLE:${redshift:DbUser}@yourdomain.com" } } }, { "Sid": "RedshiftJoinGroupStatement", "Effect": "Allow", "Action": [ "redshift:JoinGroup" ], "Resource": [ "arn:aws:redshift:us-west-2:123456789012:dbgroup:examplecluster/common_group" ] } ] }