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 では、一時的な認証情報を指定できます。IAM ロールの作成の詳細については、 ユーザーに代わって Amazon Redshift が他の AWS サービスにアクセスすることを許可するを参照してください。

AWS Management Console の外部で AWS を操作するには、プログラマチックアクセス権が必要です。プログラマチックアクセス権を付与する方法は、AWS にアクセスしているユーザーのタイプによって異なります。

ユーザーにプログラマチックアクセス権を付与するには、以下のいずれかのオプションを選択します。

プログラマチックアクセス権を必要とするユーザー 目的 方法

ワークフォースアイデンティティ

(IAM Identity Center で管理されているユーザー)

一時的な認証情報を使用して、AWS CLI、AWS SDK、または AWS API へのプログラマチックリクエストに署名します。

使用するインターフェイス用の手引きに従ってください。

IAM 一時的な認証情報を使用して、AWS CLI、AWS SDK、または AWS API へのプログラムによるリクエストに署名します。 IAM ユーザーガイド」の「AWS リソースでの一時的な認証情報の使用」の指示に従ってください。
IAM

(非推奨)

長期的な認証情報を使用して、AWS CLI、AWS SDK、AWS API へのプログラムによるリクエストに署名します。

使用するインターフェイス用の手順に従ってください。

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:PassRole アクセス許可が必要です。このアクセス許可により、ユーザーが IAM ロールを Amazon Redshift クラスターに関連付けることを管理者が制限できます。ベストプラクティスとして、アクセス許可ポリシーを IAM ロールにアタッチし、それを必要に応じてユーザーやグループに割り当てることをお勧めします。詳細については、「Amazon Redshift での Identity and Access Management」を参照してください。

次の例に示す 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 ロールを 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/redshiftv2/で 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 ユーザーガイドを参照してください。