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

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

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

重要

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

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

{ "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 クラスターに適用されます。

Redshift Spectrum を使用するために必要なアクセス許可

Amazon Redshift Spectrum には、リソースにアクセスするためのその他の AWS のサービスへのアクセス許可が必要です。Redshift Spectrum の IAM ポリシーのアクセス許可の詳細については、Amazon Redshift Database Developer Guide の「Amazon Redshift Spectrum の IAM ポリシー」を参照してください。

Amazon Redshift コンソールの使用に必要なアクセス許可

Amazon Redshift コンソールを使用して作業するユーザーに対しては、ユーザーに AWS アカウントの Amazon Redshift リソースの記述を許可する最小限のアクセス権限のセットが必要です。それらのアクセス権限により、Amazon EC2 セキュリティやネットワーク情報など、その他の関連情報の記述も許可される必要があります。

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

ユーザーに Amazon Redshift コンソールのクエリエディタへのアクセス権を付与するには、AmazonRedshiftQueryEditor 管理ポリシーをアタッチします。

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

Amazon Redshift スケジューラを使用するために必要なアクセス許可

Amazon Redshift スケジューラを使用する際、スケジューラがユーザーに代わってアクセス許可を引き受けることができるよう、Amazon Redshift スケジューラ (scheduler.redshift.amazonaws.com) に対して信頼関係を持つ IAM ロールをセットアップします。また、スケジュールする Amazon Redshift API オペレーションのロールに対してポリシー (アクセス許可) をアタッチすることもできます。

次の例は、Amazon Redshift スケジューラと Amazon Redshift との信頼関係をセットアップする JSON フォーマットでのポリシードキュメントを示しています。

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": [ "scheduler.redshift.amazonaws.com", "redshift.amazonaws.com" ] }, "Action": "sts:AssumeRole" } ] }

信頼エンティティの詳細については、IAM ユーザーガイドの「AWS サービスにアクセス許可を委任するロールの作成」を参照してください。

また、スケジュールする Amazon Redshift オペレーションに対してもアクセス許可を追加する必要があります。

スケジューラで ResizeCluster オペレーションを使用するには、次に類似したアクセス許可を IAM ポリシーに追加します。環境によって、ポリシーをより限定的にする必要がある場合もあります。

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

Amazon Redshift スケジューラに対してロールを作成する手順については、IAM ユーザーガイドの「AWS サービス用のロールの作成 (コンソール)」を参照します。IAM コンソールでロールを作成する際は、次の選択を行います。

  • [このロールを使用するサービスを選択] で、[Redshift] を選択します。

  • [ユースケースの選択] で [Redshift - スケジューラ] を選択します。

  • Amazon Redshift オペレーションがスケジュールされるのを許可するロールにポリシーを作成またはアタッチします。[ポリシーの作成] を選択するか、またはポリシーをアタッチするロールを変更します。スケジュールするオペレーションに対して JSON ポリシーを入力します。

  • ロールを作成した後、サービス redshift.amazonaws.com を含めるよう IAM ロールの信頼関係を編集します。

作成する IAM ロールには、scheduler.redshift.amazonaws.comredshift.amazonaws.com という信頼されたエンティティがあります。また、"redshift:ResizeCluster" などのサポートされた Amazon Redshift API アクションを許可するポリシーがアタッチされています。

GetClusterCredentials のリソースポリシー

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

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

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

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 リソースへのフルアクセスを許可します。

  • AmazonRedshiftQueryEditor – 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 アクションにアクセスできます。

{ "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 リソースに適用されます。

{ "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 で始まるクラスターを削除するアクセス権限が拒否されます。

{ "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) のスナップショットアクセスを取り消します。

{ "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 にする必要があります。

{ "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 で始まるスナップショットを復元できます。

{ "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 アクションではサポートされません。

{ "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

次のポリシーでは、GetCredentialsCreateClusterUser および JoinGroup アクションが有効になります。このポリシーでは条件キーを使用して、AWS ユーザー ID が GetClusterCredentials に一致する場合のみ、CreateClusterUser および "AIDIODR4TAW7CSEXAMPLE:${redshift:DbUser}@yourdomain.com" アクションが許可されます。IAM アクセスは、"testdb" データベース対してのみリクエストされます。また、このポリシーは、ユーザーが "common_group" という名前のグループに参加することを許可します。

{ "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/testdb", "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" ] } ] } } }