メニュー
Amazon Redshift
データベース開発者ガイド (API Version 2012-12-01)

他の AWS リソースにアクセスするアクセス権限

クラスターと Amazon S3、Amazon DynamoDB、Amazon EMR、Amazon EC2 などの他の AWS リソースの間でデータを移動するためには、クラスターには、リソースにアクセスし、必要なアクションを実行するための許可が必要です。 たとえば、Amazon S3 からデータをロードする場合、COPY はバケットへの LIST アクセスとバケットオブジェクトへの GET アクセスが必要です。 最小限のアクセス権限については、「COPY、UNLOAD、CREATE LIBRARY のための IAM のアクセス許可」を参照してください。

リソースにアクセスする許可を取得するには、クラスターが認証される必要があります。次の認証方法のいずれかを選択できます。

  • ロールベースアクセスコントロール – ロールベースのアクセスコントロールの場合、クラスターが認証と認可に使用する AWS Identity and Access Management (IAM) ロールを指定します。AWS 認証情報および機密データを保護するには、ロールベースの認証を使用することを強くお勧めします。

  • キーベースのアクセスコントロール – キーに基づくアクセスコントロールの場合は、プレーンテキストとして IAM ユーザーの AWS アクセス認証情報 (アクセスキー ID およびシークレットアクセスキー) を提供します。

ロールベースアクセスコントロール

ロールベースのアクセスコントロールを使用して、クラスターはユーザーに代わって一時的に、IAM ロールを引き受けます。次に、ロールに付与された許可に基づいて、クラスターは必要な AWS のリソースにアクセスできます。

IAM ロールは、AWS でできることとできないことを決定するのが、アクセス権限ポリシーを伴う AWS ID であるという点で IAM ユーザーと似ています。 ただし、1 人のユーザーに一意に関連付けられるのではなく、ロールは必要に応じてすべてのエンティティが引き受けることができます。また、ロールにはいずれの認証情報 (パスワードやアクセスキー) も関連付けられません。 代わりに、ロールがクラスターに関連付けられた場合は、アクセスキーが動的に作成され、クラスターに提供されます。

AWS 認証情報を保護することに加えて、AWS のリソースおよび機密ユーザーデータへのアクセスに対してより安全で、きめの細かいコントロールを提供するロールベースのアクセスコントロールを使用することをお勧めします。

ロールベースの認証には次の利点があります。

  • AWS 標準の IAM ツールを使用して、IAM ロールを定義し、ロールを複数のクラスターと関連付けられます。 ロールのためにアクセスポリシーを変更すると、変更はロールを使用するすべてのクラスターに自動的に適用されます。

  • 特定の AWS リソースおよびアクションにアクセスするために特定のクラスターとデータベースユーザーにアクセス許可を付与するきめ細かな IAM ポリシーを定義できます。

  • クラスターは、実行時に一時的なセッション認証情報を取得し、必要に応じて操作が完了するまで認証情報を更新します。 キーに基づく一時的認証情報を使用する場合、完了する前に一時的認証情報の期限が切れると、操作は失敗します。

  • アクセスキー ID とシークレットアクセスキー ID は SQL コードには格納、送信されません。

ロールベースのアクセスコントロールを使用するには、Amazon Redshift サービスロールタイプを使用して IAM ロールを作成してから、クラスターにロールをアタッチする必要があります。ロールは、少なくとも COPY、UNLOAD、CREATE LIBRARY のための IAM のアクセス許可 に示されたアクセス権限が必要です。IAM ロールを作成し、それをクラスターにアタッチする手順については、Amazon Redshift Cluster Management Guide の「ユーザーに代わって Amazon Redshift が他の AWS のサービスにアクセスすることを許可する」を参照してください。

クラスターにロールを追加するか、Amazon Redshift マネジメントコンソール、CLI、または API を使用してクラスターに関連付けられるロールを表示できます。詳細については、Amazon Redshift Cluster Management Guide の「IAM ロールをクラスターに関連付ける」を参照してください。

IAM ロールを作成する場合、IAM はロールの Amazon リソースネーム (ARN) を返します。IAM ロールを指定するには、IAM_ROLE パラメータまたは CREDENTIALS パラメータでロールの ARN を指定します。

たとえば、以下のロールがクラスターにアタッチされるとします。

Copy
"IamRoleArn": "arn:aws:iam::0123456789012:role/MyRedshiftRole"

次の COPY コマンドの例では、Amazon S3 への認証とアクセスのために前の例の IAM_ROLE パラメータと ARN を使用します。

Copy
copy customer from 's3://mybucket/mydata' iam_role 'arn:aws:iam::0123456789012:role/MyRedshiftRole';

次の COPY コマンドの例は、CREDENTIALS パラメータを使用して IAM ロールを指定しています。

Copy
copy customer from 's3://mybucket/mydata' credentials 'aws_iam_role=arn:aws:iam::0123456789012:role/MyRedshiftRole';

キーベースのアクセスコントロール

キーベースのアクセスコントロールを使用して、データが含まれている AWS リソースにアクセスする権限を付与された IAM ユーザーのアクセスキー ID とシークレットアクセスキーを提供します。ACCESS_KEY_ID and SECRET_ACCESS_KEY パラメータを一緒に使用するか、CREDENTIALS パラメータを使用できます。

ACCESS_KEY_ID と SECRET_ACCESS_KEY を使用して認証するには、次に示すように、承認されたユーザーのアクセスキー ID および完全なシークレットアクセスキーで、<access-key-id><secret-access-key> を置き換えます。

Copy
ACCESS_KEY_ID '<access-key-id>' SECRET_ACCESS_KEY '<secret-access-key>';

CREDENTIALS パラメータを使用して認証するには、次に示すように、承認されたユーザーのアクセスキー ID および完全なシークレットアクセスキーで、<access-key-id><secret-access-key> を置き換えます。

Copy
CREDENTIALS 'aws_access_key_id=<access-key-id>;aws_secret_access_key=<secret-access-key>';

注記

プレーンテキストのアクセスキー IDと シークレットアクセスキーを指定する代わりに、認証のために IAM ロールを使用することを強くお勧めします。キーベースのアクセスコントロールを選択する場合は、AWS アカウント (ルート) 認証情報を使用しないでください。常に IAM ユーザーを作成し、そのユーザーのアクセスキー ID とシークレットアクセスキーを指定します。IAM ユーザーを作成する手順については、AWS アカウント内での IAM ユーザーの作成を参照してください。

IAM ユーザーは、少なくとも「COPY、UNLOAD、CREATE LIBRARY のための IAM のアクセス許可」に示されたアクセス権限が必要です。

一時的セキュリティ認証情報

キーに基づくアクセスコントロールを使用する場合、一時的なセキュリティ認証情報を使用して、データへのユーザーのアクセスを制限できます。 ロールベースの認証は、自動的に一時的な認証情報を使用します。

注記

一時的な認証情報を作成してアクセスキー ID とシークレットアクセスキーをプレーンテキストで提供するのではなく、「role-based access control」を使用することを強くお勧めします。ロールベースのアクセスコントロールは、自動的に一時的な認証情報を使用します。

一時的セキュリティ認証情報はセキュリティを強化します。使用期限が短く、期限が切れた後は再利用できないためです。トークンを使用して生成されるアクセスキー ID とシークレットアクセスキーはトークンなしに使用できません。これらの一時的セキュリティ認証情報を持つユーザーは認証情報の有効期限内のみリソースにアクセスできます。

ユーザーにリソースへの一時的アクセスを許可するには AWS Security Token Service (AWS STS) API 操作を呼び出します。AWS STS API 操作は、セキュリティトークン、アクセスキー ID、およびシークレットアクセスキーから構成される一時的セキュリティ認証情報を返します。一時的セキュリティ認証情報は、リソースへの一時的アクセスを必要とするユーザーに発行します。これらのユーザーは既存の IAM ユーザーであるか、非 AWS ユーザーです。一時的セキュリティ認証情報の作成の詳細については、IAM ユーザーガイド の「一時的なセキュリティ認証情報の使用」を参照してください。

SESSION_TOKEN パラメータとともに ACCESS_KEY_ID and SECRET_ACCESS_KEY パラメータを使用するか、CREDENTIALS パラメータを使用できます。また、トークンと共に提供されているアクセスキー ID とシークレットアクセスキーを指定する必要があります。

ACCESS_KEY_ID、SECRET_ACCESS_KEY、および SESSION_TOKEN を使用して認証するには、次のように <temporary-access-key-id><temporary-secret-access-key>、および <temporary-token> を置き換えます。

Copy
ACCESS_KEY_ID '<temporary-access-key-id>' SECRET_ACCESS_KEY '<temporary-secret-access-key>' SESSION_TOKEN '<temporary-token>';

CREDENTIALS を使用して認証するには、次のように token=<temporary-token> を認証情報文字列に含めます。

Copy
CREDENTIALS 'aws_access_key_id=<temporary-access-key-id>;aws_secret_access_key=<temporary-secret-access-key>;token=<temporary-token>';

次の例は、一時的セキュリティ認証情報を使用する COPY コマンドを示しています。

Copy
copy table-name from 's3://objectpath' access_key_id '<temporary-access-key-id>' secret_access_key '<temporary-secret-access-key> token '<temporary-token>';

次の例では、一時的認証情報とファイル暗号化を使用して LISTING テーブルをロードします。

Copy
copy listing from 's3://mybucket/data/listings_pipe.txt' access_key_id '<temporary-access-key-id>' secret_access_key '<temporary-secret-access-key> token '<temporary-token>' master_symmetric_key '<master-key>' encrypted;

次の例では、CREDENTIALS パラメータを一時的認証情報およびファイル暗号化とともに使用して LISTING テーブルをロードします。

Copy
copy listing from 's3://mybucket/data/listings_pipe.txt' credentials 'aws_access_key_id=<temporary-access-key-id>;<aws_secret_access_key=<temporary-secret-access-key>;token=<temporary-token>;master_symmetric_key=<master-key>' encrypted;

重要

一時的セキュリティ認証情報は、COPY および UNLOAD 操作の期間全体で有効にする必要があります。 一時的セキュリティ認証情報の期限が操作中に切れた場合、コマンドは失敗し、処理はロールバックされます。たとえば、一時的セキュリティ認証情報の期限が 15 分後に切れるときに COPY 操作に 1 時間かかる場合、COPY 操作は完了前に失敗します。ロールベースのアクセスを使用する場合、一時的なセキュリティ認証情報は操作が完了するまで自動的に更新されます。

COPY、UNLOAD、CREATE LIBRARY のための IAM のアクセス許可

CREDENTIALS パラメータによって参照される IAM ロールまたは IAM ユーザーは、少なくとも、次のアクセス権限が必要です。

  • Amazon S3 からの COPY のため、ロードされる Amazon S3 バケットからの LIST 、および Amazon S3 オブジェクトおよびマニフェストファイルの GET を実行する権限 (使用されている場合)。

  • JSON 形式のデータを使用して Amazon S3、Amazon EMR、およびリモートホスト (SSH) から COPY を実行する場合は、Amazon S3 の JSONPaths ファイルに対して LIST および GET を実行する権限 (いずれかを使用する場合)。

  • DynamoDB から COPY を実行する場合は、ロードされた DynamoDB テーブルに対して SCAN および DESCRIBE を実行する権限。

  • Amazon EMR クラスターから COPY を実行する場合は、Amazon EMR クラスターに対して ListInstances アクションを実行する権限。

  • Amazon S3 への UNLOAD のための、データファイルがアンロード対象となる Amazon S3 バケットに対する GET、LIST および PUT アクセス権限。

  • Amazon S3 からの CREATE LIBRARY のために、Amazon S3 バケットの LIST、およびインポートされた Amazon S3 オブジェクトの GET を実行する権限。

注記

COPY、UNLOAD、CREATE LIBRARY コマンドの実行時に、エラーメッセージ S3ServiceException: Access Denied を受け取る場合、クラスターには、Amazon S3 への適切なアクセス権限がありません。

IAM ポリシーを、クラスター、IAM ユーザー、または IAM ユーザーが属するグループにアタッチされた IAM ロールにアタッチすることにより、IAM アクセス権限を管理できます。たとえば、AmazonS3ReadOnlyAccess管理ポリシーは、Amazon S3 リソースへの LIST および GET アクセス権限を付与します。 IAM ポリシーの詳細については、IAM ユーザーガイド の「管理ポリシーの使用」を参照してください。