ユーザーに代わって Amazon Redshift が他の AWS サービスにアクセスすることを許可する - Amazon Redshift

「翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。」

ユーザーに代わって Amazon Redshift が他の AWS サービスにアクセスすることを許可する

一部の Amazon Redshift 機能ではAmazon Redshift、ユーザーに代わって他の AWS サービスにアクセスする必要があります。たとえば、COPY コマンドと UNLOAD コマンドでは、 Amazon Redshift バケットを使用してデータをAmazon S3クラスターにロードまたはアンロードできます。CREATE EXTERNAL FUNCTION コマンドは、スAWSカラーユーザー定義LambdaLambda関数 (UDF) を使用して 関数を呼び出すことができます。 Amazon RedshiftSpectrum は、 Amazon Athena または のデータカタログを使用できますAWS Glue。Amazon Redshift クラスターがユーザーに代わってタスクを実行するには、クラスターにセキュリティ認証情報を指定します。セキュリティ認証情報を指定する望ましい方法は、AWS Identity and Access Management (IAM) ロールを指定する方法です。COPY および UNLOAD の場合AWS、アクセスキーを指定できます。

以下に、他の IAM サービスにアクセスするための適切なアクセス許可を持つ AWS ロールを作成する方法について説明します。また、 Amazon Redshift コマンドを実行するときに、ロールをクラスターに関連付け、ロールの Amazon リソースネーム (ARN) を指定する必要があります。詳細については、「 」を参照してください。IAM ロールを使用した COPY、UNLOAD、CREATE EXTERNAL FUNCTION、および CREATE EXTERNAL SCHEMA オペレーションの承認.

さらに、スーパーユーザーは、特定のユーザーおよびグループに ASSUMEROLE 権限を付与して、COPY および UNLOAD オペレーションのロールへのアクセスを提供できます。詳細については、の「GRANT」を参照してくださいAmazon Redshift Database Developer Guide

IAM クラスターから Amazon Redshift サービスへのアクセスを許可する AWS ロールの作成

ユーザーに代わって IAM クラスターが他の Amazon Redshift サービスと通信することを許可する AWS ロールを作成するには、次の手順を実行します。このセクションで使用される値は例です。必要に応じて値を選択できます。

IAM のサービスへのアクセスを に許可Amazon Redshiftする AWS ロールを作成するには

  1. IAM コンソール.を開きます。

  2. ナビゲーションペインで [ロール.] を選択します。

  3. Create role (ロールの作成).] を選択します。

  4. AWS service (AWS サービス)]、[Redshift.] の順に選択します。

  5. Select your use case] で、[Redshift - Customizable]、[Next: Permissions.] の順に選択します。[Attach permissions policy] ページが表示されます。

  6. COPY Amazon S3 を使用して にアクセスするには、例として、 AmazonS3ReadOnlyAccess と を追加できます。COPY または UNLOAD Amazon S3 を使用して にアクセスする場合は、必要なバケットおよびプレフィックスへのアクセスを制限する管理ポリシーを作成することをお勧めします。読み取りと書き込みの両方のオペレーションでは、最小限の権限を適用し、 Amazon S3 が必要とするAmazon Redshiftバケットとキープレフィックスのみに制限することをお勧めします。

    CREATE EXTERNAL FUNCTION コマンドのLambda関数を呼び出すためのアクセスには、 を追加しますAWSLambdaRole

    For Redshift Spectrum の場合は、Amazon S3 アクセスに加えて、AWSGlueConsoleFullAccess または AmazonAthenaFullAccess. を追加します。

    次へ: タグ.] を選択します。

  7. [タグの追加] ページが表示されます。必要に応じてタグを追加できます。Next: Review.] を選択します。

  8. [ロール名] に、ロールの名前 (例: ) を入力しますRedshiftCopyUnload。 [ロールの作成] を選択します。

  9. 新しいロールは、そのロールを使用するクラスターのすべてのユーザーが利用できます。特定のクラスターの特定のユーザーのみ、または特定のリージョンのクラスターのみにアクセスを制限するには、ロールの信頼関係を編集します。詳細については、「 」を参照してください。IAM ロールへのアクセスの制限.

  10. ロールとクラスターを関連付けます。クラスターの作成時に IAM ロールをクラスターに関連付けるか、既存クラスターにロールを追加できます。詳細については、「 」を参照してください。IAM ロールをクラスターに関連付ける.

    注記

    特定のデータへのアクセスを制限するには、必要な最小限の権限を付与する IAM ロールを使用します。

IAM ロールへのアクセスの制限

デフォルトでは、IAM クラスターに使用できる Amazon Redshift ロールはそのクラスターですべてのユーザーが利用できます。特定のクラスターの特定の Amazon Redshift データベースユーザーまたは特定のリージョンに IAM ロールを制限することもできます。

IAM ロールの使用を特定のデータベースユーザーのみに許可するには、次の手順に従います。

IAM ロールへのアクセス権を持つ特定のデータベースユーザーを特定する

  1. Amazon Redshift クラスターでデータベースユーザーの Amazon リソースネーム (ARN) を特定します。データベースユーザーの ARN は次の形式になります。arn:aws:redshift:region:account-id:dbuser:cluster-name/user-name.

  2. IAM コンソール (url="https://console.aws.amazon.com/.) を開きます。

  3. ナビゲーションペインで [ロール.] を選択します。

  4. 特定の Amazon Redshift データベースユーザーに制限する IAM ロールを選択します。

  5. Trust Relationships (信頼関係)] タブを選択し、[Edit Trust Relationship (信頼関係の編集).] を選択します。ユーザーに代わって Amazon Redshift が他の AWS のサービスにアクセスすることを許可する新しい IAM ロールは、次のような信頼関係を持ちます。

    { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": "redshift.amazonaws.com" }, "Action": "sts:AssumeRole" } ] }
  6. 指定した値に sts:AssumeRole フィールドを制限する信頼関係のセクションの sts:ExternalId アクションに条件を追加します。ロールへのアクセスを許可する各データベースユーザーの ARN を含めます。

    例えば、次の信頼関係では、user1 リージョンの user2 クラスターで my-clusterus-west-2 データベースユーザーのみがこの IAM ロールを使用するアクセス許可を持つよう指定されます。

    { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": "redshift.amazonaws.com" }, "Action": "sts:AssumeRole", "Condition": { "StringEquals": { "sts:ExternalId": [ "arn:aws:redshift:us-west-2:123456789012:dbuser:my-cluster/user1", "arn:aws:redshift:us-west-2:123456789012:dbuser:my-cluster/user2" ] } } }] }
  7. Update Trust Policy.] を選択します。

AWS リージョンへの IAM ロールの制限

特定の AWS リージョンにのみアクセスできるように IAM ロールを制限できます。デフォルトでは、Amazon Redshift の IAM ロールは、1 つのリージョンに限定されません。

IAM ロールの使用をリージョンごとに制限するには、次の手順に従います。

IAM ロールの許可されたリージョンを特定する

  1. IAM コンソール (https://console.aws.amazon.com.) を開きます。

  2. ナビゲーションペインで [ロール.] を選択します。

  3. 特定のリージョンで変更するロールを選択します。

  4. Trust Relationships (信頼関係)] タブを選択し、[Edit Trust Relationship (信頼関係の編集).] を選択します。ユーザーに代わって Amazon Redshift が他の AWS のサービスにアクセスすることを許可する新しい IAM ロールは、次のような信頼関係を持ちます。

    { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": "redshift.amazonaws.com" }, "Action": "sts:AssumeRole" } ] }
  5. ロールの使用を許可する特定のリージョンのリストで、ServicePrincipal リストを変更します。Service リストの各リージョンは、次の形式である必要があります。redshift.region.amazonaws.com.

    例えば、次の編集された信頼関係では、us-east-1us-west-2 リージョンでのみ IAM ロールの使用が許可されます。

    { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": [ "redshift.us-east-1.amazonaws.com", "redshift.us-west-2.amazonaws.com" ] }, "Action": "sts:AssumeRole" } ] }
  6. Update Trust Policy] を選択します。

で IAM ロールを連鎖するAmazon Redshift

クラスターにロールをアタッチすると、クラスターはAmazon S3ユーザーに代わって Amazon Athena、、AWS Glue、および にアクセスするためにAWS Lambdaそのロールを引き受けることができます。クラスターにアタッチされたロールに必要なリソースへのアクセスがない場合、他のアカウントに属している可能性がある別のロールを連鎖することができます。クラスターは、このデータにアクセスするための連鎖ロールを一時的に引き受けます。また、ロールを連鎖してクロスアカウントアクセスを付与することもできます。連鎖における各ロールは、クラスターが連鎖の末尾のロールを引き受けるまで、連鎖の次のロールを引き受けます。最大で 10 個のロールを連鎖できます。

たとえば、企業 A が企業 B に属する Amazon S3 バケットのデータにアクセスするとします。企業 A は Amazon Redshift という名前の RoleA 用 AWS サービスロールを作成し、クラスターにアタッチします。企業 B は RoleB という名前のロールを作成します。このロールは企業 B のバケットのデータへのアクセスを承認されています。企業 B のバケットのデータにアクセスするために、企業 A は iam_role と を連鎖させる RoleA パラメータを使用して COPY コマンドを実行しますRoleB。 COPY オペレーションの期間中、 はRoleA一時的に RoleB を引き受けてAmazon S3バケットにアクセスします。

ロールを連鎖するには、ロール間で信頼関係を確立します。別のロール (例: RoleA) を引き受けるロールには、次の連鎖したロール (例: RoleB).) を引き受けることを許可するアクセス権限ポリシーがある必要があります。また、アクセス権限を渡すロール (RoleB) は、前に連鎖したロール (RoleA).) にアクセス権限を渡すことができる信頼ポリシーを保持している必要があります。詳細については、の「IAM ロールhttps://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_use.htmlの使用」を参照してくださいIAM ユーザーガイド。

連鎖の最初のロールは、クラスターにアタッチされたロールである必要があります。最初のロールと、次のロールを引き受ける後続の各ロールには、特定のステートメントを含むポリシーがあることが必要です。このステートメントには、Allow アクションに sts:AssumeRole 効果、そして Resource 要素に次のロールの Amazon リソースネーム (ARN) があります。この例では、RoleA に AWS アカウント RoleB が所有する 210987654321. を引き受けることを許可する次のアクセス権限ポリシーがあります。

{ "Version": "2012-10-17", "Statement": [ { "Sid": "Stmt1487639602000", "Effect": "Allow", "Action": [ "sts:AssumeRole" ], "Resource": "arn:aws:iam::210987654321:role/RoleB" } ] }

別のロールに渡されるロールは、そのロールを引き受けるロールまたはそのロールを所有する AWS アカウントとの信頼関係を確立する必要があります。この例では、RoleBRoleA. との信頼関係を確立する次の信頼ポリシーがあります。

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "sts:AssumeRole", "Principal": { "AWS": "arn:aws:iam::role/RoleA" } ] }

次の信頼ポリシーは、RoleA の所有者である AWS アカウント 123456789012. との信頼関係を確立します。

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "sts:AssumeRole", "Principal": { "AWS": "arn:aws:iam::123456789012:root" } } ] }
注記

ロールの連鎖権限を特定のユーザーに制限するには、条件を定義します。詳細については、「 」を参照してください。IAM ロールへのアクセスの制限.

UNLOAD、COPY、CREATE EXTERNAL FUNCTION、または CREATE EXTERNAL SCHEMA コマンドを実行する場合、 ARNs パラメータiam_roleにロールのカンマ区切りのリストを含めることでロールを連鎖させます。以下に iam_role パラメータ内の連鎖されたロールの構文を示します。

unload ('select * from venue limit 10') to 's3://acmedata/redshift/venue_pipe_' IAM_ROLE 'arn:aws:iam::<aws-account-id-1>:role/<role-name-1>[,arn:aws:iam::<aws-account-id-2>:role/<role-name-2>][,...]';
注記

ロールチェーン全体は一重引用符で囲まれ、スペースが含まれてはいけません。

次の例では、 RoleA は AWS アカウント に属するクラスターにアタッチされています123456789012。アカウント RoleBに属する には210987654321、 という名前の バケットへのアクセス許可がありますs3://companyb/redshift/。 次の例ではs3/ バケットにデータを連鎖RoleAして RoleB UNLOAD します。

unload ('select * from venue limit 10') to 's3://companyb/redshift/venue_pipe_' iam_role 'arn:aws:iam::123456789012:role/RoleA,arn:aws:iam::210987654321:role/RoleB';

次の例では、COPY コマンドを使用して、前の例でアンロードしたデータをロードします。

copy venue from 's3://companyb/redshift/venue_pipe_' iam_role 'arn:aws:iam::123456789012:role/RoleA,arn:aws:iam::210987654321:role/RoleB';

次の例では、CREATE EXTERNAL SCHEMA は連鎖されたロールを使用してロール を引き受けます。RoleB.

create external schema spectrumexample from data catalog database 'exampledb' region 'us-west-2' iam_role 'arn:aws:iam::123456789012:role/RoleA,arn:aws:iam::210987654321:role/RoleB';

次の例では、CREATE EXTERNAL FUNCTION は連鎖されたロールを使用してロール を引き受けRoleBます。

create external function lambda_example(varchar) returns varchar volatile lambda 'exampleLambdaFunction' iam_role 'arn:aws:iam::123456789012:role/RoleA,arn:aws:iam::210987654321:role/RoleB';