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 にアクセスしているユーザーのタイプによって異なります。
ユーザーにプログラムによるアクセス権を付与するには、以下のいずれかのオプションを選択します。
どのユーザーがプログラムによるアクセスを必要としますか? | To | By |
---|---|---|
ワークフォース ID (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 ロールの関連付けを管理するには
-
AWS Management Console にサインインして、 https://console.aws.amazon.com/redshift/
で Amazon Redshift コンソールを開きます。 -
ナビゲーションメニューで [Clusters] (クラスター) を選択し、更新するクラスターを選択します。
-
アクションで IAM ロールの管理 を選択し、クラスターに現在関連付けられている IAM ロールのリストを表示します。
-
IAM ロールの管理 ページで、追加する IAMロールを使用可能なオプションから選択した後、 IAM ロールの追加を選択します。
-
完了 を選択して変更を保存します。
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-roles
modify-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 ユーザーガイドを参照してください。