他の AWS リソースにアクセスするアクセス許可
クラスターと他の AWS リソース (Amazon S3、Amazon DynamoDB、Amazon EMR、または Amazon EC2 など) との間でデータを移動する場合、クラスターには、リソースにアクセスして必要なアクションを実行するための許可が必要です。例えば、Amazon S3 からデータをロードする場合、COPY はバケットへの LIST アクセスとバケットオブジェクトへの GET アクセスが必要です。最小限のアクセス権限については、「COPY、UNLOAD、CREATE LIBRARY のための IAM のアクセス許可」を参照してください。
リソースにアクセスする認可を取得するには、クラスターが認証される必要があります。次の認証方法のいずれかを選択できます。
-
ロールベースアクセスコントロール– ロールベースのアクセスコントロールの場合、クラスターが認証と認可に使用する AWS Identity and Access Management (IAM) ロールを指定します。AWS 認証情報および機密データを保護するには、ロールベースの認証を使用することを強くお勧めします。
-
キーベースのアクセスコントロール – キーベースのアクセスコントロールの場合は、ユーザーの AWS アクセス認証情報 (アクセスキー ID とシークレットアクセスキー) をプレーンテキストとして指定します。
ロールベースアクセスコントロール
ロールベースのアクセスコントロールを使用して、クラスターはユーザーに代わって一時的に、IAM ロールを引き受けます。その後、そのロールに付与された承認内容に基づいて、クラスターは必要な AWS のリソースにアクセスできるようになります。
IAM ロールの作成は、ロールが AWS アイデンティティであり、AWS で何を実行でき、何を実行できないかを決定するアクセス許可ポリシーを持つという点で、ユーザーへのアクセス許可の付与と似ています。ただし、1 人のユーザーに一意に関連付けられるのではなく、ロールは必要に応じてすべてのエンティティが引き受けることができます。また、ロールにはいずれの認証情報 (パスワードやアクセスキー) も関連付けられません。代わりに、ロールがクラスターに関連付けられた場合は、アクセスキーが動的に作成され、クラスターに提供されます。
AWS 認証情報を保護することに加えて、AWSのリソースおよび機密ユーザーデータへのアクセスに対して、より安全で、きめの細かいコントロールを提供するロールベースのアクセスコントロールの使用をお勧めします。
ロールベースの認証には次の利点があります。
-
AWS 標準の IAM ツールを使用して、IAM ロールを定義し、そのロールを複数のクラスターと関連付けられます。ロールのためにアクセスポリシーを変更すると、変更はロールを使用するすべてのクラスターに自動的に適用されます。
-
特定の AWS リソースおよびアクションへのアクセス許可を、特定のクラスターとデータベースユーザーに付与するための、きめ細かな IAM ポリシーを定義できます。
-
クラスターは、実行時に一時的なセッション認証情報を取得し、必要に応じて操作が完了するまで認証情報を更新します。キーに基づく一時的認証情報を使用する場合、完了する前に一時的認証情報の期限が切れると、操作は失敗します。
-
アクセスキー ID とシークレットアクセスキー ID は SQL コードには格納、送信されません。
ロールベースのアクセスコントロールを使用するには、Amazon Redshift サービスロールタイプを使用して IAM ロールを作成してから、クラスターにロールをアタッチする必要があります。ロールは、少なくとも COPY、UNLOAD、CREATE LIBRARY のための IAM のアクセス許可 に示されたアクセス権限が必要です。IAM ロールを作成してクラスターにアタッチするステップについては、「Amazon Redshift 管理ガイド」の「ユーザーに代わって Amazon Redshift が他の AWS サービスにアクセスすることを認可する」を参照してください。
クラスターにロールを追加するか、Amazon Redshift マネジメントコンソール、CLI、または API を使用してクラスターに関連付けられるロールを表示できます。詳細については、「Amazon Redshift 管理ガイド」の「IAM ロールとクラスターの関連付け」を参照してください。
IAM ロールを作成する場合、IAM はロールの Amazon リソースネーム (ARN) を返します。IAM ロールを指定するには、IAM_ROLEパラメータまたは CREDENTIALS パラメータでロールの ARN を指定します。
例えば、以下のロールがクラスターにアタッチされるとします。
"IamRoleArn": "arn:aws:iam::0123456789012:role/MyRedshiftRole"
次の COPY コマンドの例では、Amazon S3 への認証とアクセスのために前の例の IAM_ROLE パラメータと ARN を使用します。
copy customer from 's3://amzn-s3-demo-bucket/mydata' iam_role 'arn:aws:iam::0123456789012:role/MyRedshiftRole';
次の COPY コマンドの例は、CREDENTIALS パラメータを使用して IAM ロールを指定しています。
copy customer from 's3://amzn-s3-demo-bucket/mydata' credentials 'aws_iam_role=arn:aws:iam::0123456789012:role/MyRedshiftRole';
さらに、スーパーユーザーは、データベースユーザーおよびグループに ASSUMEROLE 権限を付与して、COPY オペレーションのロールへのアクセスを提供できます。詳細については、GRANTを参照してください。
キーベースのアクセスコントロール
キーベースのアクセスコントロールを使用して、データが含まれている AWS リソースへのアクセスを許可された、IAM ユーザーのアクセスキー ID とシークレットアクセスキーを提供します。ACCESS_KEY_ID and SECRET_ACCESS_KEY パラメータを一緒に使用するか、CREDENTIALSパラメータを使用できます。
注記
プレーンテキストのアクセスキー ID とシークレットアクセスキーを指定する代わりに、認証のために IAM ロールを使用することを強くお勧めします。キーベースのアクセスコントロールを選択する場合は、AWSアカウント (ルート) 認証情報を使用しないでください。常に IAM ユーザーを作成し、そのユーザーのアクセスキー ID とシークレットアクセスキーを指定します。IAM ユーザーを作成する手順については、「AWS アカウントでの IAM ユーザーの作成」を参照してください。
ACCESS_KEY_ID と SECRET_ACCESS_KEY を使用して認証するには、次に示すように、承認されたユーザーのアクセスキー ID および完全なシークレットアクセスキーで、<access-key-id>
と <secret-access-key>
を置き換えます。
ACCESS_KEY_ID '
<access-key-id>
' SECRET_ACCESS_KEY '<secret-access-key>
';
CREDENTIALS パラメータを使用して認証するには、次に示すように、承認されたユーザーのアクセスキー ID および完全なシークレットアクセスキーで、<access-key-id>
と <secret-access-key>
を置き換えます。
CREDENTIALS 'aws_access_key_id=
<access-key-id>
;aws_secret_access_key=<secret-access-key>
';
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 ユーザーガイドの一時的なセキュリティ認証情報の使用を参照してください。
ACCESS_KEY_ID and SECRET_ACCESS_KEY パラメータとともに SESSION_TOKEN パラメータを使用するか、CREDENTIALSパラメータを使用できます。また、トークンと共に提供されているアクセスキー ID とシークレットアクセスキーを指定する必要があります。
ACCESS_KEY_ID、SECRET_ACCESS_KEY、および SESSION_TOKEN を使用して認証するには、次に示すように、<temporary-access-key-id>
、<temporary-secret-access-key>
、および <temporary-token>
を置き換えます。
ACCESS_KEY_ID '
<temporary-access-key-id>
' SECRET_ACCESS_KEY '<temporary-secret-access-key>
' SESSION_TOKEN '<temporary-token>
';
CREDENTIALS を使用して認証するには、次のように session_token=
を認証情報文字列に含めます。<temporary-token>
CREDENTIALS 'aws_access_key_id=
<temporary-access-key-id>
;aws_secret_access_key=<temporary-secret-access-key>
;session_token=<temporary-token>
';
次の例は、一時的セキュリティ認証情報を使用する COPY コマンドを示しています。
copy table-name from 's3://objectpath' access_key_id '
<temporary-access-key-id>
' secret_access_key '<temporary-secret-access-key>
' session_token '<temporary-token>
';
次の例では、一時的認証情報とファイル暗号化を使用して LISTING テーブルをロードします。
copy listing from 's3://amzn-s3-demo-bucket/data/listings_pipe.txt' access_key_id '
<temporary-access-key-id>
' secret_access_key '<temporary-secret-access-key>
' session_token '<temporary-token>
' master_symmetric_key '<root-key>
' encrypted;
次の例では、CREDENTIALS パラメータを一時的認証情報およびファイル暗号化とともに使用して LISTING テーブルをロードします。
copy listing from 's3://amzn-s3-demo-bucket/data/listings_pipe.txt' credentials 'aws_access_key_id=
<temporary-access-key-id>
;aws_secret_access_key=<temporary-secret-access-key>
;session_token=<temporary-token>
;master_symmetric_key=<root-key>
' encrypted;
重要
一時的セキュリティ認証情報は、COPY および UNLOAD 操作の期間全体で有効にする必要があります。一時的セキュリティ認証情報の期限が操作中に切れた場合、コマンドは失敗し、処理はロールバックされます。例えば、一時的セキュリティ認証情報の期限が 15 分後に切れるときに COPY 操作に 1 時間かかる場合、COPY 操作は完了前に失敗します。ロールベースのアクセスを使用する場合、一時的なセキュリティ認証情報は操作が完了するまで自動的に更新されます。
COPY、UNLOAD、CREATE LIBRARY のための IAM のアクセス許可
CREDENTIALS パラメータによって参照される IAM ロールまたはユーザーには、少なくとも、次のアクセス許可が必要です。
-
Amazon S3 から COPY の場合、Amazon S3 バケットを LIST するアクセス許可であり、ロードされている Amazon S3 オブジェクトと、マニフェストファイル (使用する場合) を GET するアクセス許可。
-
Amazon S3、Amazon EMR、および JSON 形式のデータのリモートホスト (SSH) から COPY を実行する場合は、Amazon S3 の JSONPaths ファイル (使用する場合) に対して LIST および GET を実行するアクセス許可。
-
DynamoDB から COPY を実行する場合は、ロードされた DynamoDB テーブルに対して SCAN および DESCRIBE を実行するアクセス許可。
-
Amazon EMR クラスターから COPY を実行する場合、
ListInstances
アクションを Amazon EMR クラスターで実行するための許可。 -
Amazon S3 への UNLOAD の場合、データファイルのアンロード先 Amazon S3 バケットに対する GET、LIST、および PUT 許可。
-
Amazon S3 からの CREATE LIBRARY の場合、Amazon S3 バケットを一覧表示し、インポートされる Amazon S3 オブジェクトを取得する許可。
注記
COPY、UNLOAD、CREATE LIBRARY コマンドの実行時に、S3ServiceException: Access
Denied
というエラーメッセージが返される場合、クラスターには Amazon S3 への適切なアクセス許可がありません。
IAM ポリシーを管理するには、クラスター、ユーザー、またはユーザーが属するグループにアタッチされている IAM ロールに IAM ポリシーをアタッチします。例えば、AmazonS3ReadOnlyAccess
マネージドポリシーは、Amazon S3 リソースへの LIST および GET 許可を付与します。IAM ポリシーの詳細については、IAM ユーザーガイドの IAM ポリシーの管理を参照してください。