Zephyrnet-Logo

Föderierter Zugriff auf Amazon Redshift-Cluster in AWS-Regionen in China mit Active Directory Federation Services

Datum:

Viele Kunden verwalten Benutzeridentitäten bereits über Identitätsanbieter (IdPs) für Single-Sign-On-Zugriff. Mit einem IdP wie Active Directory Federation Services (AD FS) können Sie den Verbundzugriff einrichten Amazon RedShift Cluster als Mechanismus zur Steuerung von Berechtigungen für die Datenbankobjekte durch Unternehmensgruppen. Dies bietet ein nahtloses Benutzererlebnis und zentralisiert die Verwaltung von Authentifizierung und Berechtigungen für Endbenutzer. Weitere Informationen finden Sie in der Blogbeitragsreihe „Föderierter Zugriff auf Ihren Amazon Redshift-Cluster mit Active Directory Federation Services (AD FS)“ (Teil 1, Teil 2).

Aufgrund der Unterschiede in der Implementierung von Amazon Web Services in China, müssen Kunden die Konfigurationen entsprechend anpassen. Beispielsweise befinden sich die AWS-Regionen China (Peking und Ningxia) in einer separaten AWS-Partition, daher enthalten alle Amazon-Ressourcennamen (ARNs) das Suffix -cn. AWS China-Regionen werden auch auf einer anderen Domäne gehostet: www.amazonaws.cn.

Dieser Beitrag stellt ein schrittweises Verfahren zum Einrichten des Verbundzugriffs auf Amazon Redshift in AWS-Regionen in China vor. Es zeigt die wichtigsten Unterschiede auf, auf die Sie achten sollten, und bietet eine Anleitung zur Fehlerbehebung für häufige Fehler.

Lösungsüberblick

Das folgende Diagramm veranschaulicht den Prozess von Security Assertion Markup Language 2.0 (SAML)-basierter Verbundzugriff auf Amazon Redshift in AWS-Regionen in China. Der Arbeitsablauf umfasst die folgenden Hauptschritte:

  1. Der SQL-Client stellt AD FS einen Benutzernamen und ein Kennwort bereit.
  2. AD FS authentifiziert die Anmeldeinformationen und gibt eine SAML-Antwort zurück Falls erfolgreich.
  3. Der SQL-Client führt einen API-Aufruf durch AWS-Sicherheitstoken-Service (AWS STS) zu eine bevorzugte Rolle mit SAML einnehmen.
  4. AWS STS authentifiziert die SAML-Antwort basierend auf dem gegenseitigen Vertrauen und gibt bei Erfolg temporäre Anmeldeinformationen zurück.
  5. Der SQL-Client kommuniziert mit Amazon Redshift, um zurückzukehren ein Datenbankbenutzer mit temporären Anmeldeinformationen, verwendet es dann, um Datenbankgruppen beizutreten und sich mit der angegebenen Datenbank zu verbinden.

Die Architektur

Wir organisieren die exemplarische Vorgehensweise in den folgenden allgemeinen Schritten:

  1. Konfigurieren Sie eine AD FS-Vertrauensstellung der vertrauenden Seite für AWS-Regionen in China und definieren Sie grundlegende Anspruchsregeln.
  2. Bereitstellung an AWS Identity and Access Management and (IAM) Identitätsanbieter und Rollen.
  3. Vervollständigen Sie die Beanspruchungsregeln der verbleibenden Vertrauensstellung der vertrauenden Seite basierend auf den IAM-Ressourcen.
  4. Verbinden Sie sich mit Amazon Redshift mit föderiertem Zugriff über einen JDBC-basierten SQL-Client.

Voraussetzungen:

Dieser Beitrag setzt voraus, dass Sie die folgenden Voraussetzungen erfüllen:

  • Windows Server 2016
  • Die Möglichkeit, Benutzer und Gruppen in AD zu erstellen
  • Die Möglichkeit, eine Vertrauensstellung der vertrauenden Seite zu konfigurieren und Anspruchsregeln in AD FS zu definieren
  • Ein AWS-Konto
  • Ausreichende Berechtigungen zum Bereitstellen von IAM-Identitätsanbietern, Rollen, Amazon Virtual Private Cloud (Amazon VPC)-bezogene Ressourcen und ein Amazon Redshift-Cluster über AWS Cloud-Entwicklungskit (AWS-CDK)

Konfigurieren Sie eine AD FS-Vertrauensstellung der vertrauenden Seite, und definieren Sie Anspruchsregeln

Eine Vertrauensstellung der vertrauenden Seite ermöglicht es AWS und AD FS, miteinander zu kommunizieren. Es ist möglich, zwei Vertrauensstellungen der vertrauenden Seite für beide AWS-Regionen in China und AWS-Regionen gleichzeitig in demselben AD FS zu konfigurieren. Für AWS-Regionen in China müssen wir eine andere verwenden SAML-Metadatendokument at https://signin.amazonaws.cn/static/saml-metadata.xml. Die Kennung der vertrauenden Seite für AWS-Regionen in China ist urn:amazon:webservices:cn-north-1, während das für globale AWS-Regionen der Fall ist urn:amazon:webservices. Notieren Sie sich diese Kennung, um sie später in diesem Beitrag zu verwenden.

Metadaten-XML der vertrauenden Seite

Fügen Sie AD-Gruppen und -Benutzer hinzu

Beim SAML-basierten Verbund übernehmen Endbenutzer eine IAM-Rolle und verwenden sie, um mehreren Datenbankgruppen (DB) beizutreten. Die Berechtigungen für solche Rollen und DB-Gruppen können effektiv von AD-Gruppen verwaltet werden. Wir verwenden verschiedene Präfixe in AD-Gruppennamen, um sie zu unterscheiden, was bei der Zuordnung zu Rollen und Anspruchsregeln für DB-Gruppen hilft. Es ist wichtig, die beiden Arten von AD-Gruppen richtig zu unterscheiden, da sie verschiedenen AWS-Ressourcen zugeordnet sind.

Wir setzen unsere exemplarische Vorgehensweise mit einem Beispiel fort. Angenommen, in der Wirtschaft gibt es zwei Rollen: Data Scientist und Data Engineer, und zwei DB-Gruppen: Onkologie und Pharmazie. Data Scientists können beiden Gruppen beitreten, und Data Engineers können nur der Apothekengruppe beitreten. Auf der AD-Seite definieren wir eine AD-Gruppe für jede Rolle und Gruppe. Auf der AWS-Seite definieren wir eine IAM-Rolle für jede Rolle und eine Amazon Redshift-DB-Gruppe für jede DB-Gruppe. Angenommen, Clement ist Data Scientist und Jimmy Data Engineer, und beide werden bereits von AD verwaltet. Das folgende Diagramm veranschaulicht diese Beziehung.

AD-Gruppen- und Benutzerzuordnung zu IAM-Rolle und DB-Gruppe

Du darfst Erstellen Sie die AD-Gruppen und -Benutzer entweder mit den AWS-Befehlszeilenschnittstelle (AWS CLI) oder die AWS-Managementkonsole. Wir stellen Beispielbefehle in der README-Datei in das GitHub Repo.

Unterschritte befolgen a zu o von Schritt 2 ein Einrichten der JDBC- oder ODBC-Single-Sign-On-Authentifizierung mit AD FS um die vertrauende Seite mit dem richtigen SAML-Metadatendokument für AWS-Regionen in China einzurichten und die ersten drei Anspruchsregeln zu definieren (NameId, RoleSessionName und Get AD Groups). Wir fahren fort, nachdem der IAM-Identitätsanbieter und die Rollen bereitgestellt wurden.

Stellen Sie einen IAM-Identitätsanbieter und Rollen bereit

Sie richten das Vertrauen für AD mit AWS ein, indem Sie einen IAM-Identitätsanbieter bereitstellen. Der IAM-Identitätsanbieter und angenommene Rollen sollten sich in einem AWS-Konto befinden, ansonsten erhalten Sie beim föderierten Zugriff die folgende Fehlermeldung: „Prinzipal existiert außerhalb des Kontos der angenommenen Rolle.“ Führen Sie die folgenden Schritte aus, um die Ressourcen bereitzustellen:

  1. Laden Sie die Metadatendatei unter herunter https://yourcompany.com/FederationMetadata/2007-06/FederationMetadata.xml von Ihrem AD FS-Server.
  2. Speichern Sie es lokal unter /tmp/FederationMetadata.xml.
  3. Zur kasse den AWS CDK-Code auf GitHub.
  4. Verwenden Sie AWS CDK, um den benannten Stack bereitzustellen redshift-cn:
export AWS_ACCOUNT=YOUR_AWS_ACCOUNT
export AWS_DEFAULT_REGION=cn-north-1
export AWS_PROFILE=YOUR_PROFILE cdk deploy redshift-cn --require-approval never

Das AWS-CDK Version sollte 2.0 oder neuer sein. Zu Testzwecken können Sie die verwenden AdministratorAccess verwaltete Richtlinie für die Bereitstellung. Verwenden Sie für die Produktionsnutzung ein Profil mit den geringsten Rechten.

Die folgende Tabelle fasst die Ressourcen zusammen, die das AWS CDK-Paket bereitstellt.

Service Ressource Zu Zählen Notizen
Amazon VPC VPC 1 .
Teilnetz 2 .
Internet-Gateway 1 .
Routentabelle 1 .
Sicherheitsgruppe 1 .
IAM SAML-Identitätsanbieter 1 .
Rollen 3 1 Servicerolle für Cluster
2 föderierte Rollen
Amazon RedShift Cluster 1 1 Knoten, dc2.large
AWS Secrets Manager Die Geheime 1 .

In diesem Beispiel Öffentlich zugänglich -Einstellung des Amazon Redshift-Clusters auf eingestellt ist Aktiviert der Einfachheit halber. In einer Produktionsumgebung sollten Sie diese Einstellung jedoch deaktivieren und den Cluster in einer privaten Subnetzgruppe platzieren. Beziehen auf Wie kann ich von meinem lokalen Computer aus auf einen privaten Amazon Redshift-Cluster zugreifen? um mehr zu erfahren.

Konfigurieren Sie eine Sicherheitsgruppe

Fügen Sie eine Eingangsregel für Ihre IP-Adresse hinzu, um eine Verbindung zum Amazon Redshift-Cluster zuzulassen.

  1. Suchen Sie die benannte Sicherheitsgruppe RC Default Security Group.
  2. Rufen Sie die öffentliche IP-Adresse Ihres Computers ab.
  3. Fügen Sie eine eingehende Regel für diese IP-Adresse und den Standardport für Amazon Redshift 5439 hinzu.

Vervollständigen Sie die verbleibenden Anspruchsregeln

Nachdem Sie den IAM-Identitätsanbieter und die Rollen bereitgestellt haben, fügen Sie eine Beanspruchungsregel hinzu, um SAML-Rollen zu definieren. Wir fügen eine Kundenanspruchsregel mit dem Namen hinzu Roles. Es findet AD-Gruppen mit dem Präfix role_ und ersetzt sie durch eine kombinierte ARN-Zeichenfolge. Achten Sie auf die ARNs der Ressourcen, in denen sich die Partition befindet aws-cn. Ersetzen AWS_ACCOUNT mit Ihrer AWS-Konto-ID. Die folgende Tabelle zeigt, wie die ausgewählten AD-Gruppen in IAM-Rollen-ARNs umgewandelt werden.

Ausgewählte AD-Gruppe Transformierter IAM-Rollen-ARN
role_data_scientist arn:aws-cn:iam::AWS_ACCOUNT:role/rc_data_scientist
role_data_engineer arn:aws-cn:iam::AWS_ACCOUNT:role/rc_data_engineer

Anspruchsregel der vertrauenden Seite

Um die Beanspruchungsregel hinzuzufügen, öffnen Sie die AD FS-Verwaltungskonsole in Ihrem Windows Server und führen Sie die folgenden Schritte aus:

  1. Auswählen Vertrauenden Partei Trusts, und wählen Sie dann die vertrauende Seite für AWS China aus.
  2. Auswählen Anspruchsausstellungsrichtlinie bearbeiten, Dann wählen Rolle hinzufügen.
  3. Auf dem Anspruchsregelvorlage Menü, wählen Sie Senden Sie Ansprüche mithilfe einer benutzerdefinierten Regel.
  4. Aussichten für Name der Anspruchsregel, eingeben Roles.
  5. Im Benutzerdefinierte Regel Geben Sie im Abschnitt Folgendes ein:
c:[Type == "http://temp/variable", Value =~ "(?i)^role_"]
=> issue(Type = "https://aws.amazon.com/SAML/Attributes/Role",
Value = RegExReplace(c.Value, "role_", "arn:aws-cn:iam::AWS_ACCOUNT:saml-provider/rc-provider,arn:aws-cn:iam::AWS_ACCOUNT:role/rc_"));

Die optionalen Parameter of DbUser, AutoCreate und DbGroups können entweder über JDBC-Verbindungsparameter oder SAML-Attributwerte bereitgestellt werden. Der Vorteil der Benutzerföderation besteht darin, Benutzer zentral an einem Ort zu verwalten. deshalb, die DbUser Der Wert sollte automatisch vom SAML-Attribut bereitgestellt werden. Die AutoCreate Parameter sollte immer sein true, Andernfalls müssen Sie zuvor DB-Benutzer erstellen. Endlich, das DbGroups Der Parameter könnte von SAML-Attributen bereitgestellt werden, vorausgesetzt, dass eine solche Beziehung in AD definiert ist.

Zusammenfassend empfehlen wir, mindestens bereitzustellen DbUser und AutoCreate in SAML-Attributen, sodass der Endbenutzer Zeit sparen kann, indem er kürzere Verbindungszeichenfolgen erstellt. In unserem Beispiel stellen wir alle drei Parameter über SAML-Attribute bereit.

  1. Fügen Sie eine Kundenanspruchsregel mit dem Namen hinzu DbUser. Wir verwenden eine E-Mail-Adresse als Wert für DbUser:
c:[Type == "http://schemas.microsoft.com/ws/2008/06/identity/claims/windowsaccountname", Issuer == "AD AUTHORITY"]
=> issue(store = "Active Directory",
types = ("https://redshift.amazon.com/SAML/Attributes/DbUser"),
query = ";mail;{0}", param = c.Value);

Sie können auch einen Security Accounts Manager (SAM)-Kontonamen wählen, der normalerweise der Benutzername der E-Mail-Adresse ist. Die Verwendung einer E-Mail-Adresse spielt eine wichtige Rolle bei der IAM-Rollenrichtlinieneinstellung. Wir kommen später auf dieses Problem zurück.

  1. Fügen Sie die benutzerdefinierte Anspruchsregel namens hinzu AutoCreate:
=> issue(type = "https://redshift.amazon.com/SAML/Attributes/AutoCreate", value = "true");

  1. Fügen Sie eine Kundenanspruchsregel mit dem Namen hinzu DbGroups. Es findet alle AD-Gruppen mit dem Präfix group_ und listet sie als Werte für DbGroups auf:
c:[Type == "http://temp/variable", Value =~ "(?i)^group_"]
=> issue(Type = "https://redshift.amazon.com/SAML/Attributes/DbGroups", Value = c.Value);

Sie können die vorangegangene Einstellung auf Korrektheit testen, indem Sie Abrufen der SAML-Antwort über Ihren Browser.

  1. Besuchen Sie https://yourcompany.com/adfs/ls/IdpInitiatedSignOn.aspx Melden Sie sich auf Ihrem Windows-Server mit Benutzer an clement, und überprüfen Sie, ob die folgenden SAML-Attribute vorhanden sind. Für Benutzer jimmy, die Rolle ist rc_data_engineer und die DB-Gruppe enthält nur group_pharmacy.
<AttributeStatement> <Attribute Name="https://aws.amazon.com/SAML/Attributes/RoleSessionName"> <AttributeValue>clement@yourcompany.com</AttributeValue> </Attribute> <Attribute Name="https://aws.amazon.com/SAML/Attributes/Role"> <AttributeValue>arn:aws-cn:iam::AWS_ACCOUNT:saml-provider/rc-provider,arn:aws-cn:iam::AWS_ACCOUNT:role/rc_data_scientist</AttributeValue> </Attribute> <Attribute Name="https://redshift.amazon.com/SAML/Attributes/DbUser"> <AttributeValue>clement@yourcompany.com</AttributeValue> </Attribute> <Attribute Name="https://redshift.amazon.com/SAML/Attributes/AutoCreate"> <AttributeValue>true</AttributeValue> </Attribute> <Attribute Name="https://redshift.amazon.com/SAML/Attributes/DbGroups"> <AttributeValue>group_pharmacy</AttributeValue> <AttributeValue>group_oncology</AttributeValue> </Attribute>
</AttributeStatement>

Die vorangehenden SAML-Attributnamen wurden für AWS-Regionen in China als gültig bestätigt. Die URLs enden mit amazon.com. Es ist falsch, sie zu ändern amazonaws.cn or amazon.cn.

Stellen Sie mit einem SQL-Client eine Verbindung zu Amazon Redshift her

Wir verwenden JDBC-basiert SQL-Workbench/J (SQL-Client), um eine Verbindung zum Amazon Redshift-Cluster herzustellen. Amazon Redshift verwendet eine DB-Gruppe, um DB-Benutzer zu sammeln. Die Datenbankrechte werden gemeinsam auf Gruppenebene verwaltet. In diesem Beitrag tauchen wir nicht tief in die Berechtigungsverwaltung ein. Sie müssen jedoch die beiden vorhergehenden DB-Gruppen erstellen.

  1. Stellen Sie eine Verbindung mit dem bereitgestellten Cluster her und erstellen Sie die Gruppen. Sie können sich über die AWS Management Console verbinden Abfrageeditor mit temporären Zugangsdaten oder über einen SQL-Client mit Datenbankbenutzer admin und Passwort. Das Passwort ist gespeichert in AWS Secrets Manager. Möglicherweise benötigen Sie für die oben genannten Vorgänge die entsprechenden Berechtigungen.
create group group_oncology;
create group group_pharmacy;

  1. Folgen Sie den Anweisungen in Stellen Sie mithilfe von SQL Workbench/J eine Verbindung zu Ihrem Cluster her um den SQL-Client und den Amazon Redshift JDBC-Treiber herunterzuladen und zu installieren.

Wir empfehlen die JDBC-Treiberversion 2.1 mit AWS SDK-Treiber-abhängigen Bibliotheken.

  1. Testen Sie, ob der Cluster über seinen Endpunkt verbunden werden kann. Der primäre Benutzername ist admin. Sie rufen den geheimen Wert des Cluster-Passworts über Secrets Manager ab. Angeben DSILogLevel und LogPath zu Fahrerprotokolle sammeln und helfen bei der Diagnose. Die Verbindungszeichenfolge sieht wie der folgende Code aus. Ersetzen CLUSTER_ENDPOINT mit dem richtigen Wert und löschen Sie alle Leitungsunterbrecher. Wir haben die Zeile zur besseren Lesbarkeit geteilt.
jdbc:redshift://CLUSTER_ENDPOINT.cn-north-1.redshift.amazonaws.com.cn:5439/main
;ssl_insecure=true
;DSILogLevel=3
;LogPath=/tmp

Für AWS-Regionen in China eine zusätzliche JDBC-Treiberoption loginToRp muss festgelegt werden, wenn Sie eine separate Vertrauensstellung der vertrauenden Seite für die AWS-Regionen in China einrichten. Wenn ein AD-Benutzer mehr als einer AWS-Rolle zugeordnet ist, verwenden Sie in der Verbindungszeichenfolge preferred_role um die genaue Rolle anzugeben, die für den Verbundzugriff übernommen werden soll.

  1. Kopieren Sie den Rollen-ARN direkt und achten Sie auf die aws-cn Partition.

Wenn der Benutzer nur einer Rolle zugeordnet ist, kann diese Option weggelassen werden.

  1. Ersetzen CLUSTER_ID mit der richtigen Cluster-ID. Geben Sie als Benutzernamen ein yourcompanyclement; Geben Sie für das Passwort die Anmeldeinformationen von AD ein:
jdbc:redshift:iam://CLUSTER_ID:cn-north-1/main
;ssl_insecure=true
;DSILogLevel=3
;LogPath=/tmp
;loginToRp=urn:amazon:webservices:cn-north-1
;plugin_name=com.amazon.redshift.plugin.AdfsCredentialsProvider
;idp_host=adfsserver.yourcompany.com
;preferred_role=arn:aws-cn:iam::AWS_ACCOUNT:role/rc_data_scientist

  1. Wenn Sie verbunden sind, führen Sie die SQL-Anweisung wie im folgenden Screenshot gezeigt aus.

Der Benutzer mit dem Präfix IAMA gibt an, dass der Benutzer mit Verbundzugriff verbunden und automatisch erstellt wurde.

SQL Workbench zum Abfragen von Benutzern

  1. Als optionalen Schritt können Sie in der Verbindungszeichenfolge die DbUser, AutoCreate und DbGroups Parameter.

Parameter aus der Verbindungszeichenfolge stehen vor denen aus SAML-Attributen. Wir empfehlen Ihnen mindestens einzustellen DbUser und AutoCreate über SAML-Attribute. Wenn es schwierig ist, DB-Gruppen in AD-Benutzern zu verwalten, oder Sie Flexibilität wünschen, geben Sie an DbGroups in der Verbindungszeichenfolge. Siehe folgenden Code:

jdbc:redshift:iam://CLUSTER_ID:cn-north-1/main
;ssl_insecure=true
;DSILogLevel=3
;LogPath=/tmp
;loginToRp=urn:amazon:webservices:cn-north-1
;plugin_name=com.amazon.redshift.plugin.AdfsCredentialsProvider
;idp_host=adfsserver.yourcompany.com
;preferred_role=arn:aws-cn:iam::AWS_ACCOUNT:role/rc_data_scientist
;DbUser=clement@yourcompany.com
;AutoCreate=true
;DbGroups=group_oncology

Verwenden Sie einen E-Mail- oder SAM-Kontonamen als DB-Benutzer

Die Rollenrichtlinie folgt der Beispielrichtlinie für die Verwendung von GetClusterCredentials. Es erlaubt weiter redshift:DescribeClusters auf dem Cluster, da die Rolle den Cluster-Endpunkt und -Port basierend auf seiner Kennung und Region abfragt. Um sicherzustellen, dass der DB-Benutzer derselbe wie der AD-Benutzer ist, verwenden wir in diesem Beitrag die folgende Bedingung, um zu prüfen, wo ROLE_ID lernen muss die eindeutige Kennung der Rolle:

{"StringEqualsIgnoreCase": {"aws:userid": "ROLD_ID:${redshift:DbUser}"}}

Die Beispielrichtlinie verwendet die folgende Bedingung:

{"StringEqualsIgnoreCase": {"aws:userid": "ROLD_ID:${redshift:DbUser}@yourcompany.com"}}

Der Unterschied ist offensichtlich. Die aws:userid enthält das RoleSessionName, das ist die E-Mail-Adresse. Der SAM-Kontoname ist die Zeichenfolge vor @ in der E-Mail-Adresse. Da der Parameter der Verbindungszeichenfolge vor dem SAML-Attributparameter steht, fassen wir die möglichen Fälle wie folgt zusammen:

  • Wenn SAML-Attribute enthalten DbUser:
    • Wenn der Bedingungswert ein Domänensuffix enthält:
      • Wenn die DbUser SAML-Attributwert ist eine E-Mail-Adresse, DbUser muss in der Verbindungszeichenfolge ohne das Domänensuffix enthalten sein.
      • Wenn die DbUser SAML-Attributwert ist ein SAM-Kontoname, DbUser kann in der Verbindungszeichenfolge weggelassen werden. Andernfalls darf der Wert kein Domänensuffix enthalten.
    • Wenn der Bedingungswert kein Domänensuffix enthält:
      • Wenn die DbUser SAML-Attributwert ist eine E-Mail-Adresse, DbUser kann in der Verbindungszeichenfolge weggelassen werden. Andernfalls muss der Wert ein Domänensuffix enthalten.
      • Wenn die DbUser SAML-Attributwert ist ein SAM-Kontoname, DbUser muss in der Verbindungszeichenfolge mit einem Domänensuffix enthalten sein.
  • Wenn SAML-Attribute nicht enthalten DbUser:
    • Wenn der Bedingungswert ein Domänensuffix enthält, DbUser muss in der Verbindungszeichenfolge ohne Domänensuffix enthalten sein.
    • Wenn der Bedingungswert kein Domänensuffix enthält, DbUser kann in der Verbindungszeichenfolge weggelassen werden, weil RoleSessionName Wert, als der die E-Mail-Adresse fungiert DbUser. Andernfalls muss der Wert ein Domänensuffix enthalten.

Workflow zur Beurteilung von IAM-Richtlinienbedingungen

Problemlösung

Der föderierte Zugriff auf Amazon Redshift ist ein nicht trivialer Prozess. Es besteht jedoch aus kleineren Schritten, die wir teilen und erobern können, wenn Probleme auftreten. Siehe Zugriffsdiagramm in der Lösungsübersicht. Wir können den Prozess in drei Sätze aufteilen:

  1. Ist der SAML-basierte Verbund erfolgreich? Überprüfen Sie dies, indem Sie die Seite für einmaliges Anmelden von AD FS besuchen, und stellen Sie sicher, dass Sie sich mit der Verbundrolle bei der Konsole anmelden können. Konfigurieren Sie die vertrauende Seite mit dem AWS China-spezifischen Metadatendokument? Rufen Sie die SAML-Antwort ab und prüfen Sie, ob das Ziel eine ist https://signin.amazonaws.cn/saml. Sind der ARN des SAML-Anbieters und die ARNs der IAM-Rolle korrekt? Überprüfen Sie, ob die Vertrauensbeziehung der Rolle den richtigen Wert für enthält SAML:aud. Weitere mögliche Prüfpunkte finden Sie unter Fehlerbehebung beim SAML 2.0-Verbund mit AWS.
  2. Sind die Rollenrichtlinien korrekt? Wenn der SAML-basierte Verbund erfolgreich ist, überprüfen Sie, ob die Rollenrichtlinien korrekt sind. Vergleichen Sie Ihre mit denen in diesem Beitrag. Hast du benutzt aws woher aws-cn sollte benutzt werden? Wenn die Richtlinienbedingung ein Domänensuffix enthält, ist es das richtige Domänensuffix? Sie können das verwendete Domänensuffix abrufen, wenn Sie die Fehlermeldung erhalten, dass die angenommene Rolle nicht berechtigt ist, eine Aktion auszuführen.
  3. Verbindet sich der SQL-Client erfolgreich? Ist die Cluster-ID korrekt? Stellen Sie sicher, dass Ihre Verbindungszeichenfolge die enthält loginToRp Option und verweist auf die AWS China Relying Party. Wenn mehrere IAM-Rollen zugeordnet sind, vergewissern Sie sich preferred_role ist einer von ihnen mit dem richtigen Rollen-ARN. Sie können die Liste der Rollen in der SAML-Antwort abrufen. Versuchen Sie einzustellen ssl_insecure zum Debuggen vorübergehend auf true. Überprüfen Sie den vorherigen Unterabschnitt und stellen Sie sicher, dass die DbUser ordnungsgemäß verwendet oder entsprechend eingestellt wird DbUser SAML-Attribut und Bedingungswert für aws:user. Schalten Sie die Treiberprotokolle ein und erhalten Sie dort Debug-Hinweise. Manchmal müssen Sie den SQL-Client möglicherweise neu starten, um den Cache zu löschen und es erneut zu versuchen.

Sicherheitsbedenken

In einer Produktionsumgebung empfehlen wir die Anwendung der folgenden Sicherheitseinstellungen, die in diesem Beitrag nicht verwendet werden.

Führen Sie für den Amazon Redshift-Cluster Folgendes aus:

  • Deaktivieren Sie die öffentlich zugängliche Option und platzieren Sie den Cluster in einer privaten oder isolierten Subnetzgruppe
  • Verschlüsseln Sie den Cluster beispielsweise mit einem vom Kunden verwalteten AWS-Schlüsselverwaltungsdienst (AWS KMS) Schlüssel
  • Aktivieren Sie erweitertes VPC-Routing, sodass das Netzwerk Ihre VPC nicht verlässt
  • Konfigurieren Sie den Cluster für erfordert Secure Sockets Layer (SSL) und verwenden Sie die unidirektionale SSL-Authentifizierung

Für die IAM-Verbundrollen:

  • Geben Sie die genauen DB-Gruppen für die Aktion an redshift:JoinGroup. Wenn Sie einen Platzhalter verwenden möchten, stellen Sie sicher, dass er keine unerwünschten DB-Gruppen zulässt.
  • Shau StringEquals für aws:user gegen die Rollen-ID zusammen mit dem Amazon Redshift-DB-Benutzer. Dieser Zustand kann überprüft werden GetClusterCredentials, CreateClusterUser und JoinGroup Aktionen. Ausführliche Codes finden Sie im Beispielcode.

In Amazon Redshift wird die DB-Gruppe verwendet, um Berechtigungen für eine Sammlung von DB-Benutzern zu verwalten. Ein DB-Benutzer tritt einigen DB-Gruppen während einer Anmeldesitzung bei und erhält die den Gruppen zugeordneten Privilegien. Wie bereits erwähnt, können Sie entweder den SAML-Attributwert oder die Verbindungseigenschaft verwenden, um die DB-Gruppen anzugeben. Der Amazon Redshift-Treiber zieht den Wert aus der Verbindungszeichenfolge dem aus dem SAML-Attribut vor. Folglich kann der Endbenutzer die DB-Gruppen in der Verbindungszeichenfolge überschreiben. Um die Privilegien einzuschränken, die einem DB-Benutzer gewährt werden können, muss die IAM-Rollenrichtlinie daher einschränken, welchen DB-Gruppen der DB-Benutzer sicher beitreten darf, andernfalls besteht möglicherweise ein Sicherheitsrisiko. Das folgende Richtlinien-Snippet zeigt ein solches Risiko. Folgen Sie immer der Prinzip der geringsten Privilegien beim Definieren von Berechtigungsrichtlinien.

{ "Effect": "Allow", "Action": "redshift:JoinGroup", "Resource": "*"
}

Aufräumen

Führen Sie den folgenden Befehl aus, um die Ressourcen zu zerstören und keine Gebühren mehr zu erheben:

cdk destroy redshift-cn --force

Entfernen Sie die in AD FS erstellten Benutzer und Gruppen. Entfernen Sie abschließend die Vertrauensstellung der vertrauenden Seite für AWS-Regionen in China in Ihrem AD FS, wenn Sie sie nicht mehr benötigen.

Zusammenfassung

In diesem Beitrag haben wir Sie durch die Verbindung mit Amazon Redshift in China mit föderiertem Zugriff auf Basis von AD FS geführt. AWS-Regionen in China befinden sich in einer anderen Partition als andere AWS-Regionen, daher müssen Sie bei der Konfiguration besonders darauf achten. Zusammenfassend müssen Sie die AWS-Ressourcen-ARNs mit dem überprüfen aws-cn Partition, SAML-basierter Verbund mit dem AWS China-spezifischen Metadatendokument und ein Amazon Redshift JDBC-Treiber mit zusätzlichen Verbindungsoptionen. In diesem Beitrag werden auch verschiedene Verwendungsszenarien für die besprochen redshift:Dbuser -Parameter und bietet allgemeine Vorschläge zur Fehlerbehebung.

Weitere Informationen finden Sie im Abschnitt Handbuch zur Amazon Redshift-Clusterverwaltung. Den für diesen Beitrag verwendeten Code finden Sie im Folgenden GitHub-Repository.


Über die Autoren


Clemens YuanWenjun Yuan
ist Cloud Infra Architect bei AWS Professional Services mit Sitz in Chengdu, China. Er arbeitet mit verschiedenen Kunden zusammen, von Startups bis hin zu internationalen Unternehmen, und hilft ihnen, Lösungen mit modernsten Cloud-Technologien zu entwickeln und zu implementieren und bei ihren Cloud-Explorationen mehr zu erreichen. In seiner Freizeit liest er gerne Gedichte und reist um die Welt.

Khoa NguyễnKhoa Nguyen ist Big-Data-Architekt bei AWS Professional Services. Er arbeitet mit großen Unternehmenskunden und AWS-Partnern zusammen, um die Geschäftsergebnisse der Kunden zu beschleunigen, indem er Fachwissen in Big Data und AWS-Services bereitstellt.

Yewei Li ist ein Datenarchitekt bei AWS Professional Services mit Sitz in Shanghai, China. Er arbeitet mit verschiedenen Unternehmenskunden zusammen, um Data Warehousing- und Data Lake-Lösungen auf AWS zu entwerfen und zu erstellen. In seiner Freizeit liest er gerne und treibt Sport.

spot_img

Neueste Intelligenz

spot_img

Chat mit uns

Hallo! Wie kann ich dir helfen?