Amazon Redshift のインフラストラクチャセキュリティ - Amazon Redshift

Amazon Redshift のインフラストラクチャセキュリティ

マネージドサービスである Amazon Redshift は AWS グローバルネットワークセキュリティで保護されています。AWSセキュリティサービスと AWS がインフラストラクチャを保護する方法については、「AWSクラウドセキュリティ」を参照してください。インフラストラクチャセキュリティのベストプラクティスを使用して AWS 環境を設計するには、セキュリティの柱 - AWS Well-Architected Frameworkインフラストラクチャ保護を参照してください。

AWS が公開した API コールを使用して、ネットワーク経由で Amazon Redshift にアクセスします。クライアントは以下をサポートする必要があります:

  • Transport Layer Security (TLS)。TLS 1.2 は必須で TLS 1.3 がお勧めです。

  • DHE (楕円ディフィー・ヘルマン鍵共有) や ECDHE (楕円曲線ディフィー・ヘルマン鍵共有) などの完全前方秘匿性 (PFS) による暗号スイート。これらのモードは、Java 7 以降など、ほとんどの最新システムでサポートされています。

また、リクエストには、アクセスキー ID と、IAM プリンシパルに関連付けられているシークレットアクセスキーを使用して署名する必要があります。または、AWS Security Token Service (AWS STS) を使用して、一時的なセキュリティ認証情報を生成し、リクエストに署名することもできます。

ネットワークの隔離

Amazon VPC サービスに基づく 仮想プライベートクラウド (VPC) は、AWS クラウド内の論理的に隔離された領域にあるプライベートネットワークです。以下の手順を実行して、VPC 内に Amazon Redshift クラスターまたは Redshift Serverless ワークグループをデプロイできます。

  • AWS リージョンに VPC を作成します。詳細については、Amazon VPC ユーザーガイドAmazon VPC とはを参照してください。

  • 2 つ以上のプライベート VPC サブネットを作成します。詳細については、「Amazon VPC ユーザーガイド」の「VPC とサブネット」を参照してください。

  • Amazon Redshift クラスターまたは Redshift Serverless ワークグループをデプロイします。詳細については、「Redshift リソースのサブネット」または「ワークグループと名前空間」を参照してください。

Amazon Redshift クラスターは、プロビジョニング時にデフォルトでロックされます。Amazon Redshift クライアントからのインバウンドネットワークトラフィックを許可するには、VPC セキュリティグループを Amazon Redshift クラスターに関連付けます。詳細については、「Redshift リソースのサブネット」を参照してください。

特定の IP アドレス範囲へのトラフィックまたは特定の IP アドレス範囲からのトラフィックのみを許可するには、VPC を使用してセキュリティグループを更新します。一例として、企業ネットワークからのトラフィックまたは企業ネットワークへのトラフィックのみを許可する場合があります。

Amazon Redshift クラスターがタグ付けされているサブネットに関連付けられたネットワークアクセスコントロールリストを設定する際には、それぞれの AWS リージョンの S3 CIDR 範囲が、イングレスルールとエグレスルールの両方で許可リストに追加されていることを確認します。これにより、Redshift Spectrum、COPY、UNLOAD などの S3 ベースの操作を中断なく実行できます。

以下のコマンド例では、us-east-1 リージョンの Amazon S3 で使用されるすべての IPv4 アドレスに対して JSON レスポンスを解析します。

curl https://ip-ranges.amazonaws.com/ip-ranges.json | jq -r '.prefixes[] | select(.region=="us-east-1") | select(.service=="S3") | .ip_prefix' 54.231.0.0/17 52.92.16.0/20 52.216.0.0/15

特定のリージョンの S3 IP 範囲を取得する方法については、「AWS IP アドレスの範囲」を参照してください。

Amazon Redshift は、専用テナンシー VPC へのクラスターのデプロイをサポートしています。詳細については、「Amazon EC2 ユーザーガイド」の「ハードウェア専有インスタンス」を参照してください。

Amazon Redshift セキュリティグループ

Amazon Redshift クラスターをプロビジョニングすると、デフォルトではロックされているため、誰もアクセスすることはできません。他のユーザーに Amazon Redshift クラスターへのインバウンドアクセスを許可するには、クラスターをセキュリティグループに関連付けます。EC2-VPC プラットフォームを使用する場合は、既存の Amazon VPC セキュリティグループを使用するか、新しいグループを定義してクラスターに関連付けることができます。EC2-VPC プラットフォームでのクラスターの管理の詳細については、「VPC での Redshift リソース」を参照してください。

インターネット経由で接続するのではなく、仮想プライベートクラウド (VPC) のインターフェイス VPC エンドポイント (AWS PrivateLink) を通じて Amazon Redshift および Amazon Redshift Serverless API のサービスに直接接続できます。Amazon Redshift API アクションの詳細については、Amazon Redshift API リファレンスからアクションを参照してください。Redshift Serverless API アクションの詳細については、「Amazon Redshift Serverless API リファレンス」の「アクション」を参照してください。AWS PrivateLink の詳細については、Amazon VPC ユーザーガイドの「インターフェイス VPC エンドポイント (AWS PrivateLink)」を参照してください。クラスターまたはワークスペースへの JDBC/ODBC 接続は、Amazon Redshift API サービスの一部ではないことに注意してください。

インターフェイス VPC エンドポイントを使用すると、VPC と Amazon Redshift または Redshift Serverlessの間の通信は完全に AWS ネットワーク内で実施されるため、セキュリティが強化されます。各 VPC エンドポイントは、VPC サブネット内の 1 つ以上の Elastic Network Interface とプライベート IP アドレスで表されます。Elastic Network Interface の詳細については、Amazon EC2 ユーザーガイドの「Elastic Network Interface」を参照してください。

インターフェイス VPC エンドポイントは、VPC を Amazon Redshift に直接接続します。インターネットゲートウェイ、ネットワークアドレス変換 (NAT) デバイス、仮想プライベートネットワーク (VPN) 接続、または AWS Direct Connect 接続は使用されません。VPC のインスタンスは、パブリック IP アドレスがなくても Amazon Redshift API と通信できます。

VPC を介して Amazon Redshift または Redshift Serverless を使用するには、2 つの方法があります。1 つは、VPC 内のインスタンスから接続することです。もう 1 つの方法として、AWS VPN オプションまたは AWS Direct Connect を使用して、プライベートネットワークを VPC に接続する方法があります。AWS VPN オプションの詳細については、Amazon VPC ユーザーガイドの「VPN 接続」を参照してください。AWS Direct Connect の詳細については、AWS Direct Connect ユーザーガイドの「コネクションの作成」を参照してください。

インターフェイス VPC エンドポイントを作成し、AWS Management Console か AWS Command Line Interface (AWS CLI) コマンドのいずれかを使用して、Amazon Redshift に接続できます。詳細については、「インターフェイスエンドポイントの作成」を参照してください。

インターフェイス VPC エンドポイントを作成した後、エンドポイントのプライベート DNS ホスト名を有効にできます。その場合、デフォルトのエンドポイントは次のとおりです。

  • Amazon Redshift でプロビジョニングされた場合: https://redshift.Region.amazonaws.com

  • Amazon Redshift Serverless: https://redshift-serverless.Region.amazonaws.com

プライベート DNS ホスト名を有効にしない場合は、Amazon VPC が以下の形式で使用できる DNS エンドポイント名を提供します。

  • Amazon Redshift でプロビジョニングされた場合: VPC_endpoint_ID.redshift.Region.vpce.amazonaws.com

  • Amazon Redshift Serverless: VPC_endpoint_ID.redshift-serverless.Region.vpce.amazonaws.com

詳細については、「Amazon VPC ユーザーガイド」の「インターフェイス VPC エンドポイント (AWS PrivateLink)」を参照してください。

Amazon Redshift および Redshift Serverless は、VPC 内のすべての Amazon Redshift API オペレーションRedshift Serverless API オペレーションの呼び出しをサポートしています。

VPC エンドポイントポリシーを VPC エンドポイントにアタッチして、AWS Identity and Access Management (IAM) プリンシパルのアクセスを制御できます。また、セキュリティグループを VPC エンドポイントに関連付けて、ネットワークトラフィックの送信元と送信先に基づいてインバウンドとアウトバウンドのアクセスを制御することもできます。IP アドレスの例はです。詳細については、「Amazon VPC ユーザーガイド」の「VPC エンドポイントによるサービスのアクセス制御」を参照してください。

Amazon Redshift VPC エンドポイントのポリシーを作成できます。このポリシーでは以下を指定します。

  • アクションを実行できるプリンシパルまたは実行できないプリンシパル

  • 実行可能なアクション

  • アクションを実行できるリソース

詳細については、「Amazon VPC ユーザーガイド」の「VPC エンドポイントによるサービスのアクセスコントロール」を参照してください。

以下に、VPC エンドポイントポリシーの例を示します。

以下に、Amazon Redshift Provisioned の VPC エンドポイントポリシーの例を示します。

次の VPC エンドポイントポリシーは、AWS アカウント 123456789012 からリソースへのエンドポイントを使用したすべてのアクセスを拒否します。

{ "Statement": [ { "Action": "*", "Effect": "Allow", "Resource": "*", "Principal": "*" }, { "Action": "*", "Effect": "Deny", "Resource": "*", "Principal": { "AWS": [ "123456789012" ] } } ] }

次の VPC エンドポイントポリシーは、AWS アカウント 123456789012 の IAM ロール redshiftrole にのみフルアクセスを許可します。他のすべての IAM プリンシパルは、エンドポイントを使用したアクセスを拒否されます。

{ "Statement": [ { "Action": "*", "Effect": "Allow", "Resource": "*", "Principal": { "AWS": [ "arn:aws:iam::123456789012:role/redshiftrole" ] } }] }

これはサンプルのみです。ほとんどのユースケースでは、特定のアクションにアクセス許可を付与してアクセス許可の範囲を狭めることをお勧めします。

次の VPC エンドポイントポリシーは、AWS アカウント 123456789012 の IAM ユーザー redshiftadmin にのみフルアクセスを許可します。他のすべてのプリンシパルは、エンドポイントを使用したアクセスを拒否されます。

{ "Statement": [ { "Action": "*", "Effect": "Allow", "Resource": "*", "Principal": { "AWS": [ "arn:aws:iam::123456789012:user/redshiftadmin" ] } }] }

これはサンプルのみです。ほとんどのユースケースでは、ユーザーにロールを割り当てる前にロールにアクセス許可をアタッチすることをお勧めします。また、特定のアクションを使用してアクセス許可の範囲を狭めることをお勧めします。

次の VPC エンドポイントポリシーは、AWS アカウント 123456789012 にのみ、指定された Amazon Redshift アクションの実行を許可します。

指定されたアクションは、Amazon Redshift の読み込み専用アクセスに相当します。指定されたアカウントでは、VPC 上の他のすべてのアクションが拒否されます。他のすべてのアカウントは、すべてのアクセスを拒否されます。Amazon Redshift アクションのリストを表示するには、「IAM ユーザーガイド」の「Amazon Redshift のアクション、リソース、および条件キー」を参照してください。

{ "Statement": [ { "Action": [ "redshift:DescribeAccountAttributes", "redshift:DescribeClusterParameterGroups", "redshift:DescribeClusterParameters", "redshift:DescribeClusterSecurityGroups", "redshift:DescribeClusterSnapshots", "redshift:DescribeClusterSubnetGroups", "redshift:DescribeClusterVersions", "redshift:DescribeDefaultClusterParameters", "redshift:DescribeEventCategories", "redshift:DescribeEventSubscriptions", "redshift:DescribeHsmClientCertificates", "redshift:DescribeHsmConfigurations", "redshift:DescribeLoggingStatus", "redshift:DescribeOrderableClusterOptions", "redshift:DescribeQuery", "redshift:DescribeReservedNodeOfferings", "redshift:DescribeReservedNodes", "redshift:DescribeResize", "redshift:DescribeSavedQueries", "redshift:DescribeScheduledActions", "redshift:DescribeSnapshotCopyGrants", "redshift:DescribeSnapshotSchedules", "redshift:DescribeStorage", "redshift:DescribeTable", "redshift:DescribeTableRestoreStatus", "redshift:DescribeTags", "redshift:FetchResults", "redshift:GetReservedNodeExchangeOfferings" ], "Effect": "Allow", "Resource": "*", "Principal": { "AWS": [ "123456789012" ] } } ] }

次の VPC エンドポイントポリシーは、すべてのアカウントとプリンシパルのフルアクセスを許可します。同時に、クラスター ID my-redshift-cluster の Amazon Redshift クラスターで実行されたアクションへの AWS アカウント 123456789012 のアクセスを拒否します。クラスターのリソースレベルのアクセス許可をサポートしないその他の Amazon Redshift アクションは、引き続き許可されます。Amazon Redshift アクションおよび対応するリソースタイプのリストについては、「IAM ユーザーガイド」の「Amazon Redshift のアクション、リソース、および条件キー」を参照してください。

{ "Statement": [ { "Action": "*", "Effect": "Allow", "Resource": "*", "Principal": "*" }, { "Action": "*", "Effect": "Deny", "Resource": "arn:aws:redshift:us-east-1:123456789012:cluster:my-redshift-cluster", "Principal": { "AWS": [ "123456789012" ] } } ] }

以下に、Redshift Serverless の VPC エンドポイントポリシーの例を示します。

次の VPC エンドポイントポリシーは、AWS アカウント 123456789012 にのみ、指定された Redshift Serverless アクションの実行を許可します。

指定されたアクションは、Redshift Serverless の読み込み専用アクセスに相当します。指定されたアカウントでは、VPC 上の他のすべてのアクションが拒否されます。他のすべてのアカウントは、すべてのアクセスを拒否されます。Redshift Serverless アクションのリストを表示するには、「IAM ユーザーガイド」の「Redshift Serverless のアクション、リソース、および条件キー」を参照してください。

{ "Statement": [ { "Action": [ "redshift-serverless:DescribeOneTimeCredit", "redshift-serverless:GetCustomDomainAssociation", "redshift-serverless:GetEndpointAccess", "redshift-serverless:GetNamespace", "redshift-serverless:GetRecoveryPoint", "redshift-serverless:GetResourcePolicy", "redshift-serverless:GetScheduledAction", "redshift-serverless:GetSnapshot", "redshift-serverless:GetTableRestoreStatus", "redshift-serverless:GetUsageLimit", "redshift-serverless:GetWorkgroup" ], "Effect": "Allow", "Resource": "*", "Principal": { "AWS": [ "123456789012" ] } } ] }

次の VPC エンドポイントポリシーは、すべてのアカウントとプリンシパルのフルアクセスを許可します。同時に、ワークグループ ID my-redshift-workgroup の Amazon Redshift ワークグループで実行されたアクションへの AWS アカウント 123456789012 のアクセスを拒否します。ワークグループのリソースレベルのアクセス許可をサポートしないその他の Amazon Redshift アクションは、引き続き許可されます。Redshift Serverless アクションおよび対応するリソースタイプのリストについては、「IAM ユーザーガイド」の「Redshift Serverless のアクション、リソース、および条件キー」を参照してください。

{ "Statement": [ { "Action": "*", "Effect": "Allow", "Resource": "*", "Principal": "*" }, { "Action": "*", "Effect": "Deny", "Resource": "arn:aws:redshift-serverless:us-east-1:123456789012:workgroup:my-redshift-workgroup", "Principal": { "AWS": [ "123456789012" ] } } ] }