Amazon Redshift 用にデフォルトの IAM ロールを作成する - Amazon Redshift

Amazon Redshift 用にデフォルトの IAM ロールを作成する

Redshift コンソールから IAM ロールを作成すると、Amazon Redshift が AWS アカウント 内でプログラム的にロールを作成します。その後、作成したロールに対し、既存の AWS 管理ポリシーを自動的にアタッチします。このアプローチにより、ユーザーは Redshift コンソール内に留まることができ、IAM コンソールに切り替えることなくロールを作成できます Amazon Redshift コンソールで作成された既存の IAM ロールにおいて、アクセス許可をより詳細に制御する場合には、カスタマイズされた管理ポリシーを IAM ロールにアタッチします。

コンソールで作成された IAM ロールの概要

Amazon Redshift コンソールを使用して作成されたすべての IAM ロールは、Amazon Redshift により追跡されます。Amazon Redshift は、新しいすべてのクラスターの作成と、スナップショットからのクラスター復元のために、最新のデフォルトの IAM ロールを事前に選択します。

IAM ロールは、SQL コマンドを実行することが許可されたポリシーを持つコンソールから作成できます。ここで実行されるコマンドには、COPY、UNLOAD、CREATE EXTERNAL FUNCTION、CREATE EXTERNAL TABLE、CREATE EXTERNAL SCHEMA、CREATE MODEL、および CREATE LIBRARY などがあります オプションで、カスタムポリシーを作成し IAM ロールにアタッチすることで、AWS リソースへのユーザーアクセスをより詳細に制御できます。

コンソールを使用して IAM ロールを作成し、クラスターのデフォルトとして設定した場合には、認証と許可を実行するために IAM ロールの Amazon リソースネーム (ARN) を指定する必要はありません。

コンソールで作成された IAM ロールの使用

クラスター用としてコンソールから作成する IAM ロールには、AmazonRedshiftAllCommandsFullAccess マネージドのポリシーが自動的にアタッチされます。この IAM ロールにより Amazon Redshift は、IAM アカウントにある AWS リソースにおいて、データのコピー、解放、クエリ、および分析を行えるようになります。この管理ポリシーは、COPYUNLOADCREATE EXTERNAL FUNCTIONCREATE EXTERNAL SCHEMACREATE MODEL、および CREATE LIBRARY 操作へのアクセスを提供します。また、このポリシーでは、関連する AWS サービス (Amazon S3、Amazon CloudWatch Logs、Amazon SageMaker、AWS Glue など) のために SELECT ステートメントを実行するアクセス許可も付与します。

CREATE EXTERNAL FUNCTION、CREATE EXTERNAL SCHEMA、CREATE MODEL、および CREATE LIBRARY コマンドには、default キーワードが付加されています。これらのコマンドにこのキーワードがある場合、Amazon Redshift は、コマンドの実行時にデフォルトとして設定され、クラスターに関連付けられた IAM ロールを使用します。DEFAULT_IAM_ROLE コマンドを実行すると、クラスターにアタッチされている現在のデフォルトの IAM ロールを確認できます。

Redshift クラスターのデフォルトとして作成ならびに設定された IAM ロールのアクセス権限を制御する場合は、ASSUMEROLE 権限を使用します。このアクセス制御は、先に一覧で示したコマンドを実行する際に、データベースユーザーおよびグループに対し適用されます。IAM ロールのユーザーまたはグループに ASSUMEROLE 権限を付与すると、そのユーザーまたはグループは、コマンドの実行時にそのロールを引き受けることができるようになります。ASSUMEROLE 権限を使用することにより、必要に応じて適切なコマンドにアクセス許可を付与することができます。

Amazon Redshift コンソールを使用すると、以下の操作を実行できます。

AmazonRedshiftAllCommandsFullAccess 管理ポリシーによるアクセスの許可

次に、クラスターのデフォルトとして設定された IAM ロールに特定のアクションを許可する、AmazonRedshiftAllCommandsFullAccess 管理ポリシーでのアクセス許可の例を示します。許可ポリシーがアタッチされた IAM ロールにより、ユーザーまたはグループで実行可能なことと不可能なことが制御されます。これらのアクセス許可が付与されることで、Amazon S3 からの COPY コマンドや、UNLOAD、CREATE MODEL コマンドの実行が可能になります。

{ "Effect": "Allow", "Action": [ "s3:GetObject", "s3:GetBucketAcl", "s3:GetBucketCors", "s3:GetEncryptionConfiguration", "s3:GetBucketLocation", "s3:ListBucket", "s3:ListAllMyBuckets", "s3:ListMultipartUploadParts", "s3:ListBucketMultipartUploads", "s3:PutObject", "s3:PutBucketAcl", "s3:PutBucketCors", "s3:DeleteObject", "s3:AbortMultipartUpload", "s3:CreateBucket" ], "Resource": [ "arn:aws:s3:::redshift-downloads", "arn:aws:s3:::redshift-downloads/*", "arn:aws:s3:::*redshift*", "arn:aws:s3:::*redshift*/*" ] }

次の例では、クラスターのデフォルトとして設定された IAM ロールのために特定のアクションを許可する、AmazonRedshiftAllCommandsFullAccess 管理ポリシーにより付与されるアクセス許可を表示します。許可ポリシーがアタッチされた IAM ロールにより、ユーザーまたはグループで実行可能なことと不可能なことが制御されます。次のアクセス許可が付与されている場合には、CREATE EXTERNAL FUNCTION コマンドを実行できます。

{ "Action": [ "lambda:InvokeFunction" ], "Resource": "arn:aws:lambda:*:*:function:*redshift*" }

次の例では、クラスターのデフォルトとして設定された IAM ロールのために特定のアクションを許可する、AmazonRedshiftAllCommandsFullAccess 管理ポリシーにより付与されるアクセス許可を表示します。許可ポリシーがアタッチされた IAM ロールにより、ユーザーまたはグループで実行可能なことと不可能なことが制御されます。次のアクセス許可では、Amazon Redshift Spectrum に必要な、CREATE EXTERNAL SCHEMA コマンドおよび CREATE EXTERNAL コマンドを実行できます。

{ "Effect": "Allow", "Action": [ "glue:CreateDatabase", "glue:DeleteDatabase", "glue:GetDatabase", "glue:GetDatabases", "glue:UpdateDatabase", "glue:CreateTable", "glue:DeleteTable", "glue:BatchDeleteTable", "glue:UpdateTable", "glue:GetTable", "glue:GetTables", "glue:BatchCreatePartition", "glue:CreatePartition", "glue:DeletePartition", "glue:BatchDeletePartition", "glue:UpdatePartition", "glue:GetPartition", "glue:GetPartitions", "glue:BatchGetPartition" ], "Resource": [ "arn:aws:glue:*:*:table/*redshift*/*", "arn:aws:glue:*:*:catalog", "arn:aws:glue:*:*:database/*redshift*" ] }

次に、クラスターのデフォルトとして設定された IAM ロールに対する特定のアクションを許可する、AmazonRedshiftAllCommandsFullAccess 管理ポリシーでのアクセス許可の例を示します。許可ポリシーがアタッチされた IAM ロールにより、ユーザーまたはグループで実行可能なことと不可能なことが制御されます。次の権限が付与されている場合は、横串検索を使用する CREATE EXTERNAL SCHEMA コマンドを実行できます。

{ "Effect": "Allow", "Action": [ "secretsmanager:GetResourcePolicy", "secretsmanager:GetSecretValue", "secretsmanager:DescribeSecret", "secretsmanager:ListSecretVersionIds" ], "Resource": [ "arn:aws:secretsmanager:*:*:secret:*Redshift*" ] }, { "Effect": "Allow", "Action": [ "secretsmanager:GetRandomPassword", "secretsmanager:ListSecrets" ], "Resource": "*", "Condition": { "StringEquals": { "secretsmanager:ResourceTag/Redshift": "true" } } },

コンソールを使用してクラスター用に作成された IAM ロールの管理

Amazon Redshift コンソールから IAM ロールを作成し、変更、および削除するには、コンソールの [Clusters] (クラスター) セクションを使用します。

IAM ロールをデフォルトとして作成する

コンソールでは、AmazonRedshiftAllCommandsFullAccess ポリシーを自動的にアタッチしながら、クラスター用の IAM ロールを作成できます。作成した新しい IAM ロールにより、IAM アカウントの Amazon リソースからデータをコピー、ロード、クエリ、分析することが、Amazon Redshift に許可されます。

クラスターのデフォルトとしては、IAM ロールを 1 つだけ設定できます。既存の IAM ロールがデフォルトとして既に割り当てられている状態で、別の IAM ロールをクラスターのデフォルトとして作成すると、新しい IAM ロールがデフォルトとしてもう一方の IAM ロールを置き換えます。

新しいクラスターと IAM ロールセットを新しいクラスターのデフォルトとして作成するには
  1. AWS Management Console にサインインして、 https://console.aws.amazon.com/redshiftv2/で Amazon Redshift コンソールを開きます。

  2. ナビゲーションメニューで [クラスター] を選択します。現在の AWS リージョン にあるアカウントのクラスターがリストされています。各クラスターのプロパティのサブセットが、リストの列に表示されます。

  3. [クラスターを作成] を選択して、クラスターを作成します。

  4. コンソールページの指示に従って [Cluster configuration (クラスター設定)] のプロパティを入力します。この手順の詳細については、「クラスターの作成」を参照してください。

  5. (オプション) [Load sample data] (サンプルデータをロード) をクリックし Amazon Redshift クラスターにサンプルのデータセットをロードして、データをクエリするためのクエリエディタの使用を開始します。

    ファイアウォールの内側にいる場合、データベースポートはインバウンド接続を受け入れる、開いているポートである必要があります。

  6. コンソールページの指示に従って [Database configurations] (データベース設定) にプロパティを入力します。

  7. [Cluster permissions] (クラスターのアクセス許可) で、[Manage IAM roles] (IAM ロールの管理) から [Create IAM role] (IAM ロールの作成) を選択します。

  8. 以下のいずれかの方法を選択して、IAM ロールがアクセスする Amazon S3 バケットを指定します。

    • [No additional Amazon S3 bucket] (追加の Amazon S3 バケットはありません) を選択し、特定の Amazon S3 バケットを指定せずに IAM ロールを作成します。

    • Amazon Redshift クラスターへのアクセス権を持つユーザーが、AWS アカウント 内の任意の Amazon S3 バケットとそのコンテンツにもアクセスできるようにするには、[Any Amazon S3 bucket] (すべての Amazon S3 バケット) を選択します。

    • IAM ロールを作成中の (1 つ以上の) Amazon S3 バケットに、ユーザーがアクセスできるようにするには、[Specific Amazon S3 buckets] (特定の Amazon S3 バケット) を選択します。次に、テーブルから Amazon S3 バケットを 1 つ以上選択します。

  9. [Create IAM role as default] (デフォルトとして IAM ロールを作成する) をクリックします。Amazon Redshift は、クラスター用に IAM ロールを自動的に作成し、デフォルトとして設定します。

  10. [クラスターを作成] を選択して、クラスターを作成します。クラスターの使用準備ができるまで、数分かかることがあります。

クラスターかのら IAM ロールの削除

クラスターからは、1 つ以上の IAM ロールを削除できます。

クラスターから IAM ロールを削除するには
  1. AWS Management Console にサインインして、 https://console.aws.amazon.com/redshiftv2/で Amazon Redshift コンソールを開きます。

  2. ナビゲーションメニューで [クラスター] を選択します。現在の AWS リージョン にあるアカウントのクラスターがリストされています。各クラスターのプロパティのサブセットが、リストの列に表示されます。

  3. IAM ロールを削除するクラスターを選択します。

  4. [Cluster permissions] (クラスターのアクセス許可) で、クラスターから削除する 1 つ以上の IAM ロールを選択します。

  5. [Manage IAM roles] (IAM ロールの管理) で、[Remove IAM roles] (IAM ロールを削除) をクリックします。

クラスターへの IAM ロールの関連付け

クラスターには、1 つ以上の IAM ロールを関連付けることができます。

IAM ロールをクラスターに関連付けるには
  1. AWS Management Console にサインインして、 https://console.aws.amazon.com/redshiftv2/で Amazon Redshift コンソールを開きます。

  2. ナビゲーションメニューで [クラスター] を選択します。現在の AWS リージョン にあるアカウントのクラスターがリストされています。各クラスターのプロパティのサブセットが、リストの列に表示されます。

  3. IAM ロールを関連付けるクラスターを選択します。

  4. [Cluster permissions] (クラスターのアクセス許可) で、クラスターに関連付ける IAM ロールを 1 つ以上選択します。

  5. [Manage IAM roles] (IAM ロールの管理) で、[Associate IAM roles] (IAM ロールを関連付ける) を選択します。

  6. クラスターに関連付ける IAM ロールを 1 つ以上選択します。

  7. その後、[Associate IAM roles] (IAM ロールの関連付け) をクリックします。

IAM ロールをデフォルトとして設定する

IAM ロールをクラスターのデフォルトに設定することができます。

IAM ロールをクラスターのデフォルトにするには
  1. AWS Management Console にサインインして、 https://console.aws.amazon.com/redshiftv2/で Amazon Redshift コンソールを開きます。

  2. ナビゲーションメニューで [クラスター] を選択します。現在の AWS リージョン にあるアカウントのクラスターがリストされています。各クラスターのプロパティのサブセットが、リストの列に表示されます。

  3. IAM ロールをデフォルトに設定するクラスターを選択します。

  4. [Cluster permissions] (クラスターのアクセス許可) にある [Associated IAM roles] (関連付けられた IAM ロール) から、クラスターのデフォルトとして設定する IAM ロールを選択します。

  5. [Set default] (デフォルトの設定) で、[Make default] (デフォルトにする) をクリックします。

  6. プロンプトが表示されたら、[Set default] (デフォルトに設定) をクリックして、指定した IAM ロールをデフォルトにすることを確認します。

クラスターでの IAM ロールのデフォルト解除

クラスターのデフォルトとしての IAM ロールの使用を終了することができます。

クラスターでの IAM ロールのデフォルト使用をクリアするには
  1. AWS Management Console にサインインして、 https://console.aws.amazon.com/redshiftv2/で Amazon Redshift コンソールを開きます。

  2. ナビゲーションメニューで [クラスター] を選択します。現在の AWS リージョン にあるアカウントのクラスターがリストされています。各クラスターのプロパティのサブセットが、リストの列に表示されます。

  3. IAM ロールを関連付けるクラスターを選択します。

  4. [Cluster permissions] (クラスターのアクセス許可) にある [Associated IAM roles] (関連付けられた IAM ロール) から、デフォルトの IAM ロールを選択します。

  5. [Set default] (デフォルトの設定) で、[Clear default] (デフォルトをクリアする) をクリックします。

  6. プロンプトが表示されたら、[Clear default] (デフォルトをクリア) をクリックして、指定された IAM ロールのデフォルト使用を解除することを確認します。

クラスターで作成された IAM ロールの AWS CLI による管理

クラスターで作成された IAM ロールを、AWS CLI を使用して管理することができます。

IAM ロールをデフォルトとして設定しながら Amazon Redshift クラスターを作成するには

IAM ロールをデフォルトとして設定しながら、Amazon Redshift クラスターを作成するには、AWS CLI の aws redshift create-cluster コマンドを使用します。

以下の AWS CLI コマンドは、Amazon Redshift クラスターと myrole1 という名前の IAM ロールを作成します。この AWS CLI コマンドでは、同時に myrole1 をクラスターのデフォルトとして設定します。

aws redshift create-cluster \ --node-type dc2.large \ --number-of-nodes 2 \ --master-username adminuser \ --master-user-password TopSecret1 \ --cluster-identifier mycluster \ --iam-roles 'arn:aws:iam::012345678910:role/myrole1' 'arn:aws:iam::012345678910:role/myrole2' \ --default-iam-role-arn 'arn:aws:iam::012345678910:role/myrole1'

以下のスニペットに、この応答例を示します。

{ "Cluster": { "ClusterIdentifier": "mycluster", "NodeType": "dc2.large", "MasterUsername": "adminuser", "DefaultIamRoleArn": "arn:aws:iam::012345678910:role/myrole1", "IamRoles": [ { "IamRoleArn": "arn:aws:iam::012345678910:role/myrole1", "ApplyStatus": "adding" }, { "IamRoleArn": "arn:aws:iam::012345678910:role/myrole2", "ApplyStatus": "adding" } ] ... } }

Amazon Redshift クラスターに IAM ロールを 1 つ以上追加するには

クラスターに 1 つ以上の IAM ロールを追加し関連付けを行うには、AWS CLI の aws redshift modify-cluster-iam-roles コマンドを使用します。

以下の AWS CLI コマンドでは、クラスターに myrole3 および myrole4 が追加されます。

aws redshift modify-cluster-iam-roles \ --cluster-identifier mycluster \ --add-iam-roles 'arn:aws:iam::012345678910:role/myrole3' 'arn:aws:iam::012345678910:role/myrole4'

以下のスニペットに、この応答例を示します。

{ "Cluster": { "ClusterIdentifier": "mycluster", "NodeType": "dc2.large", "MasterUsername": "adminuser", "DefaultIamRoleArn": "arn:aws:iam::012345678910:role/myrole1", "IamRoles": [ { "IamRoleArn": "arn:aws:iam::012345678910:role/myrole1", "ApplyStatus": "in-sync" }, { "IamRoleArn": "arn:aws:iam::012345678910:role/myrole2", "ApplyStatus": "in-sync" }, { "IamRoleArn": "arn:aws:iam::012345678910:role/myrole3", "ApplyStatus": "adding" }, { "IamRoleArn": "arn:aws:iam::012345678910:role/myrole4", "ApplyStatus": "adding" } ], ... } }

Amazon Redshift クラスターから 1 つ以上の IAM ロールを削除するには

クラスターに関連付けられた 1 つ以上の IAM ロールを削除するには、AWS CLI の aws redshift modify-cluster-iam-roles コマンドを使用します。

以下の AWS CLI コマンドにより、クラスターから myrole3 および myrole4 が削除されます。

aws redshift modify-cluster-iam-roles \ --cluster-identifier mycluster \ --remove-iam-roles 'arn:aws:iam::012345678910:role/myrole3' 'arn:aws:iam::012345678910:role/myrole4'

以下のスニペットに、この応答例を示します。

{ "Cluster": { "ClusterIdentifier": "mycluster", "NodeType": "dc2.large", "MasterUsername": "adminuser", "DefaultIamRoleArn": "arn:aws:iam::012345678910:role/myrole1", "IamRoles": [ { "IamRoleArn": "arn:aws:iam::012345678910:role/myrole1", "ApplyStatus": "in-sync" }, { "IamRoleArn": "arn:aws:iam::012345678910:role/myrole2", "ApplyStatus": "in-sync" }, { "IamRoleArn": "arn:aws:iam::012345678910:role/myrole3", "ApplyStatus": "removing" }, { "IamRoleArn": "arn:aws:iam::012345678910:role/myrole4", "ApplyStatus": "removing" } ], ... } }

関連付けられた IAM ロールをクラスターのデフォルトとして設定するには

関連付けられた IAM ロールをクラスターのデフォルトとして設定するには、AWS CLI の aws redshift modify-cluster-iam-roles コマンドを使用します。

以下の AWS CLI コマンドでは、myrole2 がクラスターのデフォルトとして指定されます。

aws redshift modify-cluster-iam-roles \ --cluster-identifier mycluster \ --default-iam-role-arn 'arn:aws:iam::012345678910:role/myrole2'

以下のスニペットに、この応答例を示します。

{ "Cluster": { "ClusterIdentifier": "mycluster", "NodeType": "dc2.large", "MasterUsername": "adminuser", "DefaultIamRoleArn": "arn:aws:iam::012345678910:role/myrole2", "IamRoles": [ { "IamRoleArn": "arn:aws:iam::012345678910:role/myrole1", "ApplyStatus": "in-sync" }, { "IamRoleArn": "arn:aws:iam::012345678910:role/myrole2", "ApplyStatus": "in-sync" } ], ... } }

関連付けられていない IAM ロールをクラスターのデフォルトに設定するには

関連付けられていない IAM ロールをクラスターのデフォルトとして設定する場合は、AWS CLI の aws redshift modify-cluster-iam-roles コマンドを使用します。

以下の AWS CLI コマンドは、myrole2 を Amazon Redshift クラスターに追加した上で、そのクラスターのデフォルトとして設定します。

aws redshift modify-cluster-iam-roles \ --cluster-identifier mycluster \ --add-iam-roles 'arn:aws:iam::012345678910:role/myrole3' \ --default-iam-role-arn 'arn:aws:iam::012345678910:role/myrole3'

以下のスニペットに、この応答例を示します。

{ "Cluster": { "ClusterIdentifier": "mycluster", "NodeType": "dc2.large", "MasterUsername": "adminuser", "DefaultIamRoleArn": "arn:aws:iam::012345678910:role/myrole3", "IamRoles": [ { "IamRoleArn": "arn:aws:iam::012345678910:role/myrole1", "ApplyStatus": "in-sync" }, { "IamRoleArn": "arn:aws:iam::012345678910:role/myrole2", "ApplyStatus": "in-sync" }, { "IamRoleArn": "arn:aws:iam::012345678910:role/myrole3", "ApplyStatus": "adding" } ], ... } }

スナップショットからクラスターを復元し、そこに IAM ロールをデフォルトとして設定するには

スナップショットからクラスターを復元する際、既存の IAM ロールを関連付けるか、新しい IAM ロールを作成しクラスターのデフォルトとして設定することができます。

スナップショットから復元した Amazon Redshift クラスターに、IAM ロールをデフォルトとして設定するには、AWS CLI の aws redshift restore-from-cluster-snapshot コマンドを使用します。

以下の AWS CLI コマンドは、スナップショットからクラスターを復元した上で、そのクラスターのデフォルトとして myrole2 を設定します。

aws redshift restore-from-cluster-snapshot \ --cluster-identifier mycluster-clone \ --snapshot-identifier my-snapshot-id --iam-roles 'arn:aws:iam::012345678910:role/myrole1' 'arn:aws:iam::012345678910:role/myrole2' \ --default-iam-role-arn 'arn:aws:iam::012345678910:role/myrole1'

以下のスニペットに、この応答例を示します。

{ "Cluster": { "ClusterIdentifier": "mycluster-clone", "NodeType": "dc2.large", "MasterUsername": "adminuser", "DefaultIamRoleArn": "arn:aws:iam::012345678910:role/myrole1", "IamRoles": [ { "IamRoleArn": "arn:aws:iam::012345678910:role/myrole1", "ApplyStatus": "adding" }, { "IamRoleArn": "arn:aws:iam::012345678910:role/myrole2", "ApplyStatus": "adding" } ], ... } }