Redshift Spectrum を使用した Amazon S3 バケットへのアクセス
Amazon Redshift Spectrum は、プロビジョニングされたクラスターで拡張された VPC ルーティングをサポートしていません。Amazon Redshift 拡張された VPC のルーティングは、特定のトラフィックを VPC 経由でルーティングします。クラスターと Amazon S3 バケット間のすべてのトラフィックは、Amazon VPC を通過するよう強制されます。Redshift Spectrum は、Amazon Redshift が所有する AWS 管理のリソースで実行されます。これらのリソースは VPC の外部にあるため、Redshift Spectrum は拡張された VPC のルーティングを使用しません。
Redshift Spectrum と Amazon S3 との間のトラフィックは、VPC の外部で AWS プライベートネットワークを介して安全にルーティングされます。処理中のトラフィックは Amazon Signature Version 4 プロトコル (SIGv4) を使用して署名され、HTTPS を使用して暗号化されます。このトラフィックは、Amazon Redshift クラスターに添付されている IAM ロールに基づいて承認されます。Redshift Spectrum トラフィックをさらに管理するには、クラスターの IAM ロールと、Amazon S3 バケットに添付されているポリシーを変更します。また、次の詳細のとおり、クラスターが AWS Glue または Athena にアクセスできるよう VPC を設定する必要がある場合があります。
拡張された VPC ルーティングはその他のリソースに Amazon Redshift がアクセスする方法に影響を与えるため、VPC を正しく設定しないとクエリが失敗する場合があることに注意してください。詳細については、「拡張 VPC ルーティングを使用して Redshift でネットワークトラフィックを制御する」を参照してください。Amazon S3 バケットにトラフィックを送信するための VPC エンドポイント、NAT ゲートウェイ、およびその他のネットワークリソースの作成について詳しく説明しています。
注記
Amazon Redshift Serverless は、Amazon S3 の外部テーブルへのクエリの拡張された VPC ルーティングをサポートしています。設定の詳細については、「Amazon Redshift Serverless 入門ガイド」の「Amazon S3 からデータをロードする」を参照してください。
Amazon Redshift Spectrum を使用する場合のアクセス許可ポリシーの設定
Redshift Spectrum を使用する場合、以下の点を考慮してください。
Amazon S3 バケットアクセスポリシーと IAM ロール
バケットに添付されたバケットポリシーを使用、およびプロビジョニングされたクラスターにアタッチされた IAM ロールを使用することで、Amazon S3 バケットにあるデータへのアクセスを管理できます。
プロビジョニングされたクラスターの Redshift Spectrum は、指定された VPC エンドポイントへのアクセスのみを制限するバケットポリシーを使用する Amazon S3 バケットに格納されているデータにはアクセスできません。代わりに、特定の AWS アカウントやユーザーなど、特定のプリンシパルへのアクセスのみを制限するバケットポリシーを使用します。
バケットへのアクセス権限を付与された IAM ロールには、Amazon Redshift サービスプリンシパルのみがロールを引き受けることを許可する信頼関係を使用します。ロールがクラスターに添付されると、ロールは Amazon Redshift のコンテキストでのみ使用でき、クラスター外で共有することはできません。詳細については、「IAM ロールへのアクセスの制限」を参照してください。サービスコントロールポリシー (SCP) を使用して、ロールをさらに制限することもできます。「AWS Organizations ユーザーガイド」の「特定の管理者ロールを除いて、IAM ユーザーとロールが特定の変更を行わないようにする」を参照してください。
注記
Redshift Spectrum を使用する場合は、Amazon S3 の署名付き URL の使用をブロックする IAM ポリシーを設定できません。Amazon Redshift Spectrum によって生成された署名付き URL は 1 時間有効です。これにより、Amazon Redshift は Amazon S3 バケットからすべてのファイルをロードするのに十分な時間を確保できます。Redshift Spectrum によってスキャンされたファイルごとに一意の署名付き URL が生成されます。s3:signatureAge
アクションを含むバケットポリシーの場合は、値を少なくとも 3,600,000 ミリ秒に設定してください。
次のバケットポリシーの例では、AWS アカウント 123456789012
が所有する Redshift Spectrum からのトラフィックからのみの、指定されたバケットへのアクセスを許可します。
{ "Version": "2012-10-17", "Statement": [{ "Sid": "BucketPolicyForSpectrum", "Effect": "Allow", "Principal": { "AWS": ["arn:aws:iam::123456789012:role/redshift"] }, "Action": ["s3:GetObject", "s3:List*"], "Resource": ["arn:aws:s3:::amzn-s3-demo-bucket/*"], "Condition": { "StringEquals": { "aws:UserAgent": "AWS Redshift/Spectrum" } } }] }
IAM ロールを引き受けるためのアクセス許可
クラスターに添付されたロールには、次に示すように、Amazon Redshift サービスによってのみ引き受けられることを許可する信頼関係があります。
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": "redshift.amazonaws.com" }, "Action": "sts:AssumeRole" } ] }
特定のバケットへの COPY および UNLOAD アクセスを防ぐクラスターロールにポリシーを追加できます。次のポリシーは、Redshift Spectrum からのみの指定されたバケットへのトラフィックを許可します。
{ "Version": "2012-10-17", "Statement": [{ "Effect": "Allow", "Action": ["s3:Get*", "s3:List*"], "Resource": "arn:aws:s3:::amzn-s3-demo-bucket/*", "Condition": {"StringEquals": {"aws:UserAgent": "AWS Redshift/Spectrum"}} }] }
詳細については、「Amazon Redshift データベース開発者ガイド」の「Redshift Spectrum 用 IAM ポリシー」を参照してください。
Amazon S3 アクセスのログ記録と監査
Amazon Redshift 拡張された VPC のルーティングを使用する利点の 1 つは、すべての COPY および UNLOAD トラフィックが VPC フローログに記録されることです。Redshift Spectrum から Amazon S3 へのトラフィックは VPC を通過しないため、VPC フローログに記録されません。Redshift Spectrum が Amazon S3 にあるデータにアクセスする際、AWS アカウントとそれぞれのロール権限のコンテキストでこれらのオペレーションが実行されます。AWS CloudTrail と Amazon S3 でサーバーアクセスのログ記録を使用して、Amazon S3 のアクセスをログ記録し、監査を行えます。
S3 IP 範囲が許可リストに追加されていることを確認します。必要な S3 IP 範囲の詳細については、「ネットワークの隔離」を参照してください。
AWS CloudTrail ログ
Redshift Spectrum を含め、Amazon S3 にあるオブジェクトへのすべてのアクセスを追跡するには、Amazon S3 オブジェクトの CloudTrail ログ記録を有効化します。
CloudTrail を使用することで、AWS インフラストラクチャ全体のアカウントアクティビティを表示、検索、ダウンロード、アーカイブ、分析し、それに対応できます。詳細については、「CloudTrail の開始方法」を参照してください。
デフォルトでは、CloudTrail はバケットレベルのアクションのみを追跡します。オブジェクトレベルのアクション (GetObject
など) を追跡するには、ログが記録されたバケットそれぞれのデータイベントおよび管理イベントを有効化します。
Amazon S3 サーバーアクセスログ
サーバーアクセスのログには、バケットに対するリクエストの詳細が記録されます。アクセスログ情報は、セキュリティとアクセス監査に役立ちます。詳細については、Amazon Simple Storage Service ユーザーガイドのサーバーアクセスのログ記録を有効にする方法を参照してください。
詳細については、AWS セキュリティブログの記事「How to Use Bucket Policies and Apply Defense-in-Depth to Help Secure Your Amazon S3 Data
AWS Glue または Amazon Athena へのアクセス
Redshift Spectrum では、AWS Glue または Athena のデータカタログにアクセスできます。データカタログの専用 Hive メタストアを使用してアクセスすることもできます。
AWS Glue または Athena へのアクセスを有効にするには、インターネットゲートウェイまたは NAT ゲートウェイで VPC を設定します。AWS Glue または Athena のパブリックエンドポイントへのアウトバウンドトラフィックを許可するよう、VPC セキュリティグループを設定します。また、AWS Glue から AWS Glue Data Catalog にアクセスできるように、インターフェイスの VPC エンドポイントを設定できます。VPC インターフェイスエンドポイントを使用すると、AWS ネットワーク内で VPC と AWS Glue 間の通信が行われます。詳細については、「インターフェイスエンドポイントの作成」を参照してください。
VPC で次のパスを設定できます。
-
インターネットゲートウェイ – VPC の外にある AWS サービスに接続するには、Amazon VPC ユーザーガイドの説明通りに、インターネットゲートウェイを VPC サブネットにアタッチします。インターネットゲートウェイを使用するには、プロビジョニングされたクラスターは他のサービスとの通信を可能にするパブリック IP アドレスが必要です。
-
NAT ゲートウェイ – 別の AWS リージョンの Amazon S3 バケットまたは AWS ネットワーク内の別のサービスに接続するには、Amazon VPC ユーザーガイドの説明通りに、ネットワークアドレス変換 (NAT) ゲートウェイを設定します。この設定を使用して、AWS ネットワーク外のホストインスタンスにアクセスすることもできます。
詳細については、「拡張 VPC ルーティングを使用して Redshift でネットワークトラフィックを制御する」を参照してください。