IAMRoleを使ったアクセスの有効時間が変更可能になった
元ネタは以下
日本語解説はクラスメソッドさんのところより
むしろ、自分はここで衝撃の事実 【IAMRoleを通してのアクセス許可は1時間だった】 ということを知りました!
RedshiftでCOPYやUNLOADコマンドを打つ時にS3への認証情報が必要になりますが、二通りの設定方法があります。
キーベースのアクセスコントロール
アクセスキーとアクセスシークレットというIAMで発行した2つの文字列の組み合わせで認証情報を指定します。 たとえば以下のように指定します。
CREDENTIALS 'aws_access_key_id=<access-key-id>;aws_secret_access_key=<secret-access-key>';
ロールベースのアクセスコントロール
IAMRoleを指定して、認証します。以下のようにRedshiftに付与したIAMRole(S3へのアクセス権限を持っているとする)の名前を指定します。
COPY文の中では
copy customer from 's3://mybucket/mydata'
iam_role 'arn:aws:iam::0123456789012:role/MyRedshiftRole';
や
copy customer from 's3://mybucket/mydata' credentials 'aws_iam_role=arn:aws:iam::0123456789012:role/MyRedshiftRole';
のように書きます。
こちら
一時的セキュリティ認証情報は、COPY および UNLOAD 操作の期間全体で有効にする必要があります。 一時的セキュリティ認証情報の期限が操作中に切れた場合、コマンドは失敗し、処理はロールバックされます。たとえば、一時的セキュリティ認証情報の期限が 15 分後に切れるときに COPY 操作に 1 時間かかる場合、COPY 操作は完了前に失敗します。ロールベースのアクセスを使用する場合、一時的なセキュリティ認証情報は操作が完了するまで自動的に更新されます。
のように書いてある。。が、Spectrum上のテーブルへの問い合わせが1時間を超えると、AccessDeniedエラーで止まることがある。
よって、今回、IAMRoleの有効時間を伸ばして変更して、試してみようと思う。(結果は別エントリーにて報告予定)