IAM ロールを使用して COPY、UNLOAD、CREATE EXTERNAL FUNCTION、CREATE EXTERNAL SCHEMA オペレーションを承認する - Amazon Redshift

IAM ロールを使用して COPY、UNLOAD、CREATE EXTERNAL FUNCTION、CREATE EXTERNAL SCHEMA オペレーションを承認する

COPY コマンドを使用してデータを Amazon Redshift にロード (またはインポート) および UNLOAD コマンドを使用してデータを Amazon Redshift からアンロード (またはエクスポート) できます。CREATE EXTERAL FUNCTION コマンドを使用して、 AWS Lambdaから関数を呼び出すユーザー定義関数を作成できます。

Amazon Redshift Spectrum を使用する場合、 CREATE EXTERNAL SCHEMA コマンドを使用してデータを含む Amazon S3 バケットの場所を指定します。COPY、UNLOAD、CREATE EXTERNAL SCHEMA コマンドを実行するときは、セキュリティ認証情報を指定する必要があります。これらの認証情報により、Amazon S3 バケットなどのターゲット宛先との間でデータを読み書きする権限が Amazon Redshift クラスターに付与されます。

CREATE EXTERNAL FUNCTION を実行するときは、IAM ロールパラメータを使用してセキュリティ認証情報を指定します。これらの認証情報により、Amazon Redshift クラスターが AWS Lambdaから Lambda 関数を呼び出すことが許可されます。セキュリティ認証情報を指定する望ましい方法は、AWS Identity and Access Management (IAM) ロールを指定することです。COPY と UNLOAD には、AWS アクセスキーを指定することもできます。IAM ロールの作成の詳細については、 ユーザーに代わって Amazon Redshift が他の AWS サービスにアクセスすることを許可するを参照してください。

IAM ロールを使用する手順は次のとおりです。

  • Amazon Redshift クラスターで使用する IAM ロールを作成します。

  • IAM ロールをクラスターに関連付けます。

  • COPY、UNLOAD、CREATE EXTERNAL SCHEMA または CREATE EXTERNAL FUNCTION コマンドを呼び出す場合、IAM ロールの ARN を含めます。

このトピックでは、IAM ロールを Amazon Redshift クラスターに関連付ける方法について説明します。

IAM ロールをクラスターに関連付ける

Amazon Redshift が他の AWS のサービスにアクセスすることを許可する IAM ロールを作成した後、そのロールを Amazon Redshift クラスターに関連付ける必要があります。ロールを使用してデータをロードまたはアンロードする前に、これを行う必要があります。

IAM ロールをクラスターに関連付けるために必要なアクセス許可

IAM ロールをクラスターに関連付けるには、IAM ユーザーは、その IAM ロールの iam:PassRole アクセス許可が必要です。このアクセス許可により、ユーザーが IAM ロールを Amazon Redshift クラスターに関連付けることを管理者が制限できます。

次の例は、ユーザーがアクションを実行することを許可する IAM ユーザーにアタッチできる IAM ポリシーを示します。

  • そのユーザーアカウントによって所有されるすべての Amazon Redshift クラスターの詳細を取得します。

  • 3 つの IAM ロールのいずれかを 2 つの Amazon Redshift クラスターのいずれかに関連付けます。

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "redshift:DescribeClusters", "Resource": "*" }, { "Effect": "Allow", "Action": [ "redshift:ModifyClusterIamRoles", "redshift:CreateCluster" ], "Resource": [ "arn:aws:redshift:us-east-1:123456789012:cluster:my-redshift-cluster", "arn:aws:redshift:us-east-1:123456789012:cluster:my-second-redshift-cluster" ] }, { "Effect": "Allow", "Action": "iam:PassRole", "Resource": [ "arn:aws:iam::123456789012:role/MyRedshiftRole", "arn:aws:iam::123456789012:role/SecondRedshiftRole", "arn:aws:iam::123456789012:role/ThirdRedshiftRole" ] } ] }

IAM ユーザーが適切なアクセス許可を取得したら、そのユーザーは IAM ロールを Amazon Redshift クラスターに関連付けることができます。これで、IAM ロールは COPY や UNLOAD などの Amazon Redshift コマンドで使用できるようになります。

IAM ポリシーの詳細については、 IAM ユーザーガイドIAM ポリシーの概要 を参照してください。

クラスターに関連付けられる IAM ロールの管理

IAM ロールは、Amazon Redshift クラスターの作成時にクラスターに関連付けることができます。または、既存のクラスターを変更し、1 つまたは複数の IAM ロールの関連付けを追加または削除できます。

以下の点に注意してください。

  • 関連付けることができる IAM ロールの最大数は、クォータの対象となります。

  • IAM ロールは複数の Amazon Redshift クラスターと関連付けることができます。

  • IAM ロールとクラスターの両方が同じ AWS アカウントによって所有されている場合にのみ、IAM ロールを Amazon Redshift クラスターに関連付けることができます。

IAM ロールの関連付けを管理するコンソールの使用

次の手順を使用して、コンソールでクラスターに対する IAM ロールの関連付けを管理できます。

IAM ロールの関連付けを管理するには

  1. AWS Management Console にサインインして、(https://console.aws.amazon.com/redshift/)でAmazon Redshift コンソール を開きます。

  2. ナビゲーションメニューで [Clusters] (クラスター) を選択し、更新するクラスターを選択します。

  3. アクションIAM ロールの管理 を選択し、クラスターに現在関連付けられている IAM ロールのリストを表示します。

  4. IAM ロールの管理 ページで、追加する IAMロールを使用可能なオプションから選択した後、 IAM ロールの追加を選択します。

  5. 完了 を選択して変更を保存します。

AWS CLI を使用して IAM ロールの関連付けを管理する

次のアプローチを使用して、 AWS CLI でクラスターに対する IAM ロールの関連付けを管理できます。

AWS CLI を使用して IAM ロールをクラスターに関連付ける

クラスターの作成時に IAM ロールをクラスターに関連付けるには、 --iam-role-arns コマンドの create-cluster パラメータで IAM ロールの Amazon リソースネーム (ARN) を指定します。create-cluster コマンドを呼び出すときに追加できる IAM ロールの最大数は、クォータの対象となります。

IAM ロールの Amazon Redshift クラスターへの関連付けおよび関連付けの解除は非同期処理です。describe-clusters コマンドを呼び出して、すべての IAM ロールのクラスター関連付けのステータスを取得できます。

次の例では、2 つの IAM ロールを my-redshift-cluster という名前の新しく作成されたクラスターに関連付けます。

aws redshift create-cluster \ --cluster-identifier "my-redshift-cluster" \ --node-type "dc1.large" \ --number-of-nodes 16 \ --iam-role-arns "arn:aws:iam::123456789012:role/RedshiftCopyUnload" \ "arn:aws:iam::123456789012:role/SecondRedshiftRole"

既存の Amazon Redshift クラスターに IAM ロールを関連付けるには、 modify-cluster-iam-roles コマンドの --add-iam-roles パラメータで IAM ロールの Amazon リソースネーム (ARN) を指定します。modify-cluster-iam-roles コマンドを呼び出すときに追加できる IAM ロールの最大数は、クォータの対象となります。

次の例では、IAM ロールを my-redshift-clusterという名前の既存のクラスターに関連付けます。

aws redshift modify-cluster-iam-roles \ --cluster-identifier "my-redshift-cluster" \ --add-iam-roles "arn:aws:iam::123456789012:role/RedshiftCopyUnload"
AWS CLIを使用してクラスターから IAM ロールの関連付けを解除する

クラスターから IAM ロールの関連付けを解除するには、modify-cluster-iam-roles コマンドの --remove-iam-roles パラメータで IAM ロールの ARN を指定します。modify-cluster-iam-rolesmodify-cluster-iam-roles コマンドを呼び出すときに削除できる IAM ロールの最大数は、クォータの対象となります。

次の例では、 my-redshift-clusterという名前のクラスターから 123456789012 AWS アカウントの IAM ロールの関連付けを削除します。

aws redshift modify-cluster-iam-roles \ --cluster-identifier "my-redshift-cluster" \ --remove-iam-roles "arn:aws:iam::123456789012:role/RedshiftCopyUnload"
AWS CLIを使用してクラスターの IAM ロールの関連付けをリスト化する

Amazon Redshift クラスターに関連付けられている IAM ロールおよび IAM ロールの関連付けのステータスをリスト化するには、 describe-clusters コマンドを呼び出します。クラスターに関連付けられた各 IAM ロールの ARN は、次の出力例のように、 IamRoles リストで返されます。

クラスターに関連付けられているロールは、in-sync のステータスを示します。クラスターとの関連付けの途中であるロールは、adding のステータスを示します。クラスターから関連付けを解除されるロールは、removing のステータスを示します。

{ "Clusters": [ { "ClusterIdentifier": "my-redshift-cluster", "NodeType": "dc1.large", "NumberOfNodes": 16, "IamRoles": [ { "IamRoleArn": "arn:aws:iam::123456789012:role/MyRedshiftRole", "IamRoleApplyStatus": "in-sync" }, { "IamRoleArn": "arn:aws:iam::123456789012:role/SecondRedshiftRole", "IamRoleApplyStatus": "in-sync" } ], ... }, { "ClusterIdentifier": "my-second-redshift-cluster", "NodeType": "dc1.large", "NumberOfNodes": 10, "IamRoles": [ { "IamRoleArn": "arn:aws:iam::123456789012:role/MyRedshiftRole", "IamRoleApplyStatus": "in-sync" }, { "IamRoleArn": "arn:aws:iam::123456789012:role/SecondRedshiftRole", "IamRoleApplyStatus": "in-sync" }, { "IamRoleArn": "arn:aws:iam::123456789012:role/ThirdRedshiftRole", "IamRoleApplyStatus": "in-sync" } ], ... } ] }

AWS CLIの使用の詳細については、 AWS CLI ユーザーガイドを参照してください。