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

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

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

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

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

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

  • AmazonRedshiftQueryEditor コンソールでクエリエディタへのフルアクセスを許可します。–Amazon Redshift

  • AmazonRedshiftDataFullAccess AWS アカウントの – Data API オペレーションおよびリソースへのフルアクセスを許可します。Amazon Redshift

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

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

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

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" } ] }

信頼エンティティの詳細については、https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_create_for-service.html の「AWS のサービスにアクセス許可を委任するロールの作成IAM ユーザーガイド」を参照してください。

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

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

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

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

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

  • [ユースケースの選択] で、次の操作を行います。[Redshift - Scheduler] を選択します。

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

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

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

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

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

コンソールで EventBridge クエリエディタを使用してスケジュールされたクエリを作成するときに、Amazon Redshift スケジューラを使用します。

コンソールでスケジュールされたクエリを実行するための IAM ロールを作成できます。IAMこの IAM ロールに、AmazonEventBridgeFullAccessAmazonRedshiftDataFullAccess をアタッチします。

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

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

信頼エンティティの詳細については、https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_create_for-service.html の「AWS のサービスにアクセス許可を委任するロールの作成IAM ユーザーガイド」を参照してください。

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

  • [このロールを使用するサービスを選択] で、以下の操作を行います。[CloudWatch イベント] を選択します。

  • [ユースケースの選択] で、次の操作を行います。[CloudWatch イベント] を選択します。

  • 以下のアクセス許可ポリシーをアタッチします。AmazonEventBridgeFullAccess および AmazonRedshiftDataFullAccess

作成する IAM ロールには、events.amazonaws.com という信頼されたエンティティがあります。 また、サポートされている Amazon Redshift Data API アクション (例: "redshift-data:*") を許可するポリシーもアタッチされています。

のリソースポリシー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 アクションのアクセス権限を付与するユーザーポリシー例を示しています。これらのポリシーは、Amazon Redshift API、AWS SDKs、または AWS CLI を使用しているときに機能します。

注記

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

例 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 アクションへのアクセスを許可し、名前が Amazon Redshift で始まる Delete アクションへのアクセスを明示的に拒否します。 このポリシーは、Amazon Redshift のすべての us-west-2 リソースに適用されます。

{ "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": [ "*" ] } ] }

例 7: コンソールを使用してリソースのタグ付けをユーザーに許可するAmazon Redshift

次のポリシー例では、Amazon Redshift を使用して、AWS リソースグループ コンソールでリソースにタグを付けることをユーザーに許可します。このポリシーは、新規または元の Amazon Redshift コンソールを呼び出すユーザーロールにアタッチできます。タグ付けの詳細については、「 でのリソースへのタグ付けAmazon Redshift」を参照してください。

{ "Version": "2012-10-17", "Statement": [ { "Sid": "Tagging permissions", "Effect": "Allow", "Action": [ "redshift:DeleteTags", "redshift:CreateTags", "redshift:DescribeTags", "tag:UntagResources", "tag:TagResources" ], "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" ] } ] } } }