# AWS - Redshift Enum

{{#include ../../../banners/hacktricks-training.md}}

## Amazon Redshift

Redshift is 'n volledig bestuurde diens wat kan skaal tot oor 'n petabyte in grootte, wat gebruik word as 'n **data warehouse vir groot data oplossings**. Met Redshift-klusters kan jy analises teen jou datastelle uitvoer met behulp van vinnige, SQL-gebaseerde vrae gereedskap en besigheidsintelligensie toepassings om 'n groter begrip van jou besigheid se visie te verkry.

**Redshift bied versleuteling in rus aan met 'n vier-laag hiërargie van versleuteling sleutels wat KMS of CloudHSM gebruik om die boonste laag van sleutels te bestuur**. **Wanneer versleuteling geaktiveer is vir jou kluster, kan dit nie gedeaktiveer word nie en omgekeerd**. Wanneer jy 'n nie-versleutelde kluster het, kan dit nie versleuteld word nie.

Versleuteling vir jou kluster kan slegs tydens sy skepping plaasvind, en sodra dit versleuteld is, is die data, metadata, en enige snappings ook versleuteld. Die laaggraad van versleuteling sleutels is soos volg, **laag een is die meester sleutel, laag twee is die kluster versleuteling sleutel, die CEK, laag drie, die databasis versleuteling sleutel, die DEK, en uiteindelik laag vier, die data versleuteling sleutels self**.

### KMS

Tydens die skepping van jou kluster, kan jy of die **standaard KMS sleutel** vir Redshift kies of jou **eie CMK** kies, wat jou meer buigsaamheid gee oor die beheer van die sleutel, spesifiek vanuit 'n auditeerbare perspektief.

Die standaard KMS sleutel vir Redshift word outomaties deur Redshift geskep die eerste keer dat die sleutelopsie gekies en gebruik word, en dit word volledig bestuur deur AWS.

Hierdie KMS sleutel word dan versleuteld met die CMK meester sleutel, laag een. Hierdie versleutelde KMS data sleutel word dan gebruik as die kluster versleuteling sleutel, die CEK, laag twee. Hierdie CEK word dan deur KMS na Redshift gestuur waar dit apart van die kluster gestoor word. Redshift stuur dan hierdie versleutelde CEK na die kluster oor 'n veilige kanaal waar dit in geheue gestoor word.

Redshift vra dan KMS om die CEK, laag twee, te ontsleutel. Hierdie ontsleutelde CEK word dan ook in geheue gestoor. Redshift skep dan 'n ewekansige databasis versleuteling sleutel, die DEK, laag drie, en laai dit in die geheue van die kluster. Die ontsleutelde CEK in geheue versleutelt dan die DEK, wat ook in geheue gestoor word.

Hierdie versleutelde DEK word dan oor 'n veilige kanaal gestuur en apart in Redshift van die kluster gestoor. Beide die CEK en die DEK is nou in die geheue van die kluster gestoor, beide in 'n versleutelde en ontsleutelde vorm. Die ontsleutelde DEK word dan gebruik om data sleutels, laag vier, te versleutelen wat ewekansig deur Redshift vir elke datablock in die databasis gegenereer word.

Jy kan AWS Trusted Advisor gebruik om die konfigurasie van jou Amazon S3-buckets te monitor en te verseker dat bucket logging geaktiveer is, wat nuttig kan wees vir die uitvoering van sekuriteitsoudites en die opsporing van gebruikspatrone in S3.

### CloudHSM

<details>

<summary>Using Redshift with CloudHSM</summary>

Wanneer jy met CloudHSM werk om jou versleuteling uit te voer, moet jy eers 'n vertroude verbinding tussen jou HSM-klient en Redshift opstel terwyl jy kliënt- en bedienersertifikate gebruik.

Hierdie verbinding is nodig om veilige kommunikasie te bied, wat toelaat dat versleuteling sleutels tussen jou HSM-klient en jou Redshift-klusters gestuur kan word. Met 'n ewekansig gegenereerde private en publieke sleutel paar, skep Redshift 'n publieke kliëntsertifikaat, wat versleuteld en deur Redshift gestoor word. Dit moet afgelaai en geregistreer word by jou HSM-klient, en aan die regte HSM-partisie toegeken word.

Jy moet dan Redshift konfigureer met die volgende besonderhede van jou HSM-klient: die HSM IP-adres, die HSM-partisie naam, die HSM-partisie wagwoord, en die publieke HSM bedienersertifikaat, wat deur CloudHSM met 'n interne meester sleutel versleuteld is. Sodra hierdie inligting verskaf is, sal Redshift bevestig en verifieer dat dit kan aansluit en toegang tot die ontwikkelingspartisie kan verkry.

As jou interne sekuriteitsbeleide of bestuurbeheer bepaal dat jy sleutelrotasie moet toepas, dan is dit moontlik met Redshift wat jou in staat stel om versleuteling sleutels vir versleutelde klusters te roteer, egter, jy moet bewus wees dat tydens die sleutelrotasie proses, dit 'n kluster vir 'n baie kort tydperk van tyd onbeskikbaar sal maak, en dit is dus die beste om sleutels slegs te roteer soos en wanneer jy dit nodig het, of as jy voel dat hulle moontlik gecompromitteer is.

Tydens die rotasie, sal Redshift die CEK vir jou kluster en vir enige rugsteun van daardie kluster roteer. Dit sal 'n DEK vir die kluster roteer, maar dit is nie moontlik om 'n DEK vir die snappings wat in S3 gestoor is en met die DEK versleuteld is, te roteer nie. Dit sal die kluster in 'n toestand van 'sleutels roteer' plaas totdat die proses voltooi is wanneer die status weer 'beskikbaar' sal wees.

</details>

### Enumeration
```bash
# 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

{{#ref}}
../aws-privilege-escalation/aws-redshift-privesc/README.md
{{#endref}}

## Volharding

Die volgende aksies stel in staat om toegang tot ander AWS-rekeninge tot die kluster te verleen:

- [authorize-endpoint-access](https://docs.aws.amazon.com/cli/latest/reference/redshift/authorize-endpoint-access.html)
- [authorize-snapshot-access](https://docs.aws.amazon.com/cli/latest/reference/redshift/authorize-snapshot-access.html)

{{#include ../../../banners/hacktricks-training.md}}
