AWS - Redshift Enum

Support HackTricks

Amazon Redshift

Redshiftは、ペタバイト以上の規模にスケールアップできる完全管理型サービスであり、ビッグデータソリューションのためのデータウェアハウスとして使用されます。Redshiftクラスターを使用すると、高速なSQLベースのクエリツールやビジネスインテリジェンスアプリケーションを使用してデータセットに対する分析を実行し、ビジネスのビジョンに対するより深い理解を得ることができます。

Redshiftは、KMSまたはCloudHSMを使用してキーの最上位層を管理する4層の暗号化キー階層を使用して、保存時の暗号化を提供しますクラスターの暗号化が有効になっている場合、それを無効にすることはできませんし、その逆も同様です。暗号化されていないクラスターを暗号化することはできません。

クラスターの暗号化は作成時にのみ行うことができ、一度暗号化されると、データ、メタデータ、およびスナップショットも暗号化されます。暗号化キーの階層レベルは次の通りです。第1層はマスターキー、第2層はクラスター暗号化キー(CEK)、第3層はデータベース暗号化キー(DEK)、そして最後に第4層はデータ暗号化キーそのものです

KMS

クラスターの作成時に、RedshiftのデフォルトKMSキーを選択するか、独自のCMKを選択することができ、これによりキーの制御に対する柔軟性が高まり、特に監査可能な観点からの制御が可能になります。

RedshiftのデフォルトKMSキーは、キーオプションが初めて選択および使用されたときにRedshiftによって自動的に作成され、AWSによって完全に管理されます。

このKMSキーは、CMKマスターキー(第1層)で暗号化されます。この暗号化されたKMSデータキーは、クラスター暗号化キー(CEK、第2層)として使用されます。このCEKはKMSによってRedshiftに送信され、クラスターとは別に保存されます。Redshiftはこの暗号化されたCEKを安全なチャネルを介してクラスターに送信し、メモリに保存します。

Redshiftは次にKMSにCEK(第2層)の復号を要求します。この復号されたCEKもメモリに保存されます。Redshiftは次にランダムなデータベース暗号化キー(DEK、第3層)を作成し、それをクラスターのメモリにロードします。メモリ内の復号されたCEKはDEKを暗号化し、それもメモリに保存されます。

この暗号化されたDEKは安全なチャネルを介して送信され、クラスターとは別にRedshiftに保存されます。CEKとDEKはクラスターのメモリに暗号化および復号された形で保存されます。復号されたDEKは、Redshiftによってデータベース内の各データブロックに対してランダムに生成されるデータキー(第4層)を暗号化するために使用されます。

Amazon S3バケットの構成を監視し、バケットロギングが有効になっていることを確認するために、AWS Trusted Advisorを使用できます。これは、セキュリティ監査やS3の使用パターンの追跡に役立ちます。

CloudHSM

Using Redshift with CloudHSM

CloudHSMを使用して暗号化を実行する場合、まずHSMクライアントとRedshiftの間に信頼できる接続を確立する必要があります。この接続は、クライアントおよびサーバー証明書を使用して行います。

この接続は、安全な通信を提供し、暗号化キーをHSMクライアントとRedshiftクラスター間で送信できるようにするために必要です。ランダムに生成された秘密鍵と公開鍵のペアを使用して、Redshiftは公開クライアント証明書を作成し、それを暗号化してRedshiftに保存します。これをダウンロードしてHSMクライアントに登録し、正しいHSMパーティションに割り当てる必要があります。

次に、HSMクライアントの以下の詳細をRedshiftに設定する必要があります:HSMのIPアドレス、HSMパーティション名、HSMパーティションパスワード、およびCloudHSMが内部マスターキーを使用して暗号化した公開HSMサーバー証明書。この情報が提供されると、Redshiftは接続および開発パーティションへのアクセスを確認および検証します。

内部セキュリティポリシーやガバナンスコントロールがキーのローテーションを適用することを求める場合、Redshiftを使用して暗号化されたクラスターの暗号化キーをローテーションすることが可能です。ただし、キーのローテーションプロセス中にクラスターが非常に短い期間利用できなくなるため、必要な場合やキーが侵害されたと感じた場合にのみキーをローテーションするのが最善です。

ローテーション中、RedshiftはクラスターおよびそのクラスターのバックアップのCEKをローテーションします。クラスターのDEKをローテーションしますが、DEKを使用して暗号化されたS3に保存されているスナップショットのDEKをローテーションすることはできません。プロセスが完了するまでクラスターは「キーのローテーション中」の状態になり、完了するとステータスは「利用可能」に戻ります。

Enumeration

# Get clusters
aws redshift describe-clusters
## Get if publicly accessible
aws redshift describe-clusters | jq -r ".Clusters[].PubliclyAccessible"
## Get DB username to login
aws redshift describe-clusters | jq -r ".Clusters[].MasterUsername"
## Get endpoint
aws redshift describe-clusters | jq -r ".Clusters[].Endpoint"
## Public addresses of the nodes
aws redshift describe-clusters | jq -r ".Clusters[].ClusterNodes[].PublicIPAddress"
## Get IAM roles of the clusters
aws redshift describe-clusters | jq -r ".Clusters[].IamRoles"

# Endpoint access & authorization
aws redshift describe-endpoint-access
aws redshift describe-endpoint-authorization

# Get credentials
aws redshift get-cluster-credentials --db-user <username> --cluster-identifier <cluster-id>
## By default, the temporary credentials expire in 900 seconds. You can optionally specify a duration between 900 seconds (15 minutes) and 3600 seconds (60 minutes).
aws redshift get-cluster-credentials-with-iam --cluster-identifier <cluster-id>
## Gives creds to access redshift with the IAM redshift permissions given to the current AWS account
## More in https://docs.aws.amazon.com/redshift/latest/mgmt/redshift-iam-access-control-identity-based.html

# Authentication profiles
aws redshift describe-authentication-profiles

# Snapshots
aws redshift describe-cluster-snapshots

# Scheduled actions
aws redshift describe-scheduled-actions

# Connect
# The redshift instance must be publicly available (not by default), the sg need to allow inbounds connections to the port and you need creds
psql -h redshift-cluster-1.sdflju3jdfkfg.us-east-1.redshift.amazonaws.com -U admin -d dev -p 5439

Privesc

AWS - Redshift Privesc

Persistence

以下のアクションは、他のAWSアカウントにクラスターへのアクセスを許可します:

HackTricksをサポートする

Last updated