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 ロールの関連付けを追加または削除できます。

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

  • 最大 10 の IAM ロールを Amazon Redshift クラスターに関連付けることができます。

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

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

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

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

注記

Amazon Redshift では新しいコンソールを使用できます。使用しているコンソールに基づき、 新しいコンソール または 元のコンソール の手順を選択します。新しいコンソール の手順はデフォルトで開いています。

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

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

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

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

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

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

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

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

  2. ナビゲーションペインで クラスターを選択します。

  3. リストで、IAM ロールの関連付けを管理するクラスターを選択します。

  4. IAM ロールの参照を選択します。

  5. IAM ロールをクラスターに関連付けるには、 使用可能なロールリストから IAM ロールを選択します。リストに表示されない場合は (IAM ロールがまだ作成されていない場合など)、手動で IAM ロールを入力することもできます。

  6. クラスターから IAM ロールの関連付けを解除する場合は、関連付けを解除する IAM ロールの X を選択します。

  7. クラスターの IAM ロールの関連付けを変更することが完了したら、 変更を適用) を選択してクラスターに関連付けられる IAM ロールを更新します。

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

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

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

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

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

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 ロールを最大 10 まで指定できます。

次の例では、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 ロールの関連付けを解除するには、 --remove-iam-roles コマンドの modify-cluster-iam-roles パラメータで IAM ロールの ARN を指定します。modify-cluster-iam-roles コマンドを呼び出すときに削除する IAM ロールを最大 10 まで指定できます。

次の例では、 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 ユーザーガイドを参照してください。