Generieren eines Authentifizierungstokens in Amazon Aurora DSQL - Amazon Aurora DSQL

Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.

Generieren eines Authentifizierungstokens in Amazon Aurora DSQL

Um mit einem SQL-Client eine Verbindung zu Amazon Aurora DSQL herzustellen, generieren Sie ein Authentifizierungstoken, das als Passwort verwendet wird. Dieses Token wird nur zur Authentifizierung der Verbindung verwendet. Nachdem die Verbindung hergestellt wurde, bleibt die Verbindung gültig, auch wenn das Authentifizierungstoken abläuft.

Wenn Sie mit der AWS Konsole ein Authentifizierungstoken erstellen, läuft das Token standardmäßig automatisch in einer Stunde ab. Wenn Sie das AWS CLI oder verwenden SDKs , um das Token zu erstellen, beträgt die Standardeinstellung 15 Minuten. Die maximale Dauer beträgt 604.800 Sekunden, also eine Woche. Um von Ihrem Client aus erneut eine Verbindung zu Aurora DSQL herzustellen, können Sie dasselbe Authentifizierungstoken verwenden, sofern es nicht abgelaufen ist, oder Sie können ein neues Token generieren.

Um mit der Generierung eines Tokens zu beginnen, erstellen Sie eine IAM-Richtlinie und einen Cluster in Aurora DSQL. Verwenden Sie dann die AWS Konsole AWS CLI, oder, AWS SDKs um ein Token zu generieren.

Je nachdem, welche Datenbankrolle Sie für die Verbindung verwenden, benötigen Sie mindestens die unter Verbindungsaufbau mit Ihrem Cluster mithilfe von IAM aufgeführten IAM-Berechtigungen.

Verwenden Sie die AWS Konsole, um ein Authentifizierungstoken in Aurora DSQL zu generieren

Aurora DSQL authentifiziert Benutzer mit einem Token und nicht mit einem Passwort. Sie können das Token über die Konsole erstellen.

Generieren eines Authentifizierungstokens
  1. Melden Sie sich bei der an AWS-Managementkonsole und öffnen Sie die Aurora DSQL-Konsole unterhttps://console.aws.amazon.com/dsql.

  2. Wählen Sie die Cluster-ID des Clusters, für den Sie ein Authentifizierungstoken erstellen möchten. Wenn Sie noch keinen Cluster erstellt haben, folgen Sie den Schritten unter Schritt 1: Erstellen eines Einzelregions-Clusters mit Aurora DSQL oder Schritt 4 (optional): Erstellen Sie einen Cluster mit mehreren Regionen.

  3. Wählen Sie Verbinden und dann Token abrufen aus.

  4. Wählen Sie aus, ob Sie die Verbindung als admin oder mit einer benutzerdefinierten Datenbankrolle herstellen möchten.

  5. Kopieren Sie das generierte Authentifizierungstoken und verwenden Sie es für Greifen Sie mithilfe von SQL-Clients auf Aurora DSQL zu.

Weitere Informationen zu benutzerdefinierten Datenbankrollen und IAM in Aurora DSQL finden Sie unter Authentifizierung und Autorisierung für Aurora DSQL.

Wird verwendet AWS CloudShell , um ein Authentifizierungstoken in Aurora DSQL zu generieren

Bevor Sie mit ein Authentifizierungstoken generieren können AWS CloudShell, stellen Sie sicher, dass Sie einen Aurora DSQL-Cluster erstellen.

Um ein Authentifizierungstoken zu generieren, verwenden Sie AWS CloudShell
  1. Melden Sie sich bei der an AWS-Managementkonsole und öffnen Sie die Aurora DSQL-Konsole unterhttps://console.aws.amazon.com/dsql.

  2. Wählen AWS CloudShell Sie unten links in der AWS Konsole.

  3. Führen Sie den folgenden Befehl aus, um ein Authentifizierungstoken für die admin-Rolle zu generieren. us-east-1Ersetzen Sie es durch Ihre Region und your_cluster_endpoint durch den Endpunkt Ihres eigenen Clusters.

    Anmerkung

    Wenn Sie die Verbindung nicht als admin herstellen, verwenden Sie stattdessen generate-db-connect-auth-token.

    aws dsql generate-db-connect-admin-auth-token \ --expires-in 3600 \ --region us-east-1 \ --hostname your_cluster_endpoint

    Falls Sie auf Probleme stoßen, finden Sie weitere Informationen unter Problembehandlung bei IAM und Wie kann ich Fehler mit einer IAM-Richtlinie beheben, bei denen der Zugriff verweigert wurde oder bei nicht autorisierten Vorgängen?.

  4. Verwenden Sie den folgenden Befehl, um mithilfe von psql eine Verbindung zu Ihrem Cluster herzustellen.

    PGSSLMODE=require \ psql --dbname postgres \ --username admin \ --host cluster_endpoint
  5. Sie sollten nun einen Prompt zur Passworteingab sehen. Kopieren Sie das von Ihnen generierte Token und stellen Sie sicher, dass Sie keine zusätzlichen Leerzeichen oder Zeichen mitkopieren. Fügen Sie es in den folgenden psql-Prompt ein.

    Password for user admin:
  6. Drücken Sie die Eingabetaste. Sie sollten nun einen PostgreSQL-Prompt sehen.

    postgres=>

    Wenn Sie die Fehlermeldung „Zugriff verweigert“ erhalten, stellen Sie sicher, dass Ihre IAM-Identität über die entsprechende dsql:DbConnectAdmin-Berechtigung verfügt. Wenn Sie über die entsprechende Berechtigung verfügen und weiterhin die Fehlermeldung „Zugriff verweigert“ erhalten, finden Sie weitere Informationen unter Problembehandlung bei IAM und Wie kann ich Fehler mit einer IAM-Richtlinie beheben, bei der der Zugriff verweigert wurde oder bei nicht autorisierten Vorgängen?.

Weitere Informationen zu benutzerdefinierten Datenbankrollen und IAM in Aurora DSQL finden Sie unter Authentifizierung und Autorisierung für Aurora DSQL.

Verwenden Sie das AWS CLI , um ein Authentifizierungstoken in Aurora DSQL zu generieren

Wenn Ihr Cluster ACTIVE ist, können Sie mit dem aws dsql-Befehl ein Authentifizierungstoken auf der CLI generieren. Sie können eine der folgenden Techniken verwenden:

  • Wenn Sie eine Verbindung mit der admin-Rolle herstellen, verwenden Sie die generate-db-connect-admin-auth-token-Option.

  • Wenn Sie eine Verbindung mit einer benutzerdefinierten Datenbankrolle herstellen, verwenden Sie die generate-db-connect-auth-token-Option.

Im folgenden Beispiel werden die nachstehenden Attribute verwendet, um ein Authentifizierungstoken für die admin-Rolle zu generieren.

  • your_cluster_endpoint— Der Endpunkt des Clusters. Das Attribut folgt dem Format your_cluster_identifier.dsql.region.on.aws wie im Beispiel 01abc2ldefg3hijklmnopqurstu.dsql.us-east-1.on.aws gezeigt.

  • region— Der AWS-Region, wie us-east-2 oderus-east-1.

In den folgenden Beispielen wird die Ablaufzeit für das Token auf 3600 Sekunden (1 Stunde) festgelegt.

Linux and macOS
aws dsql generate-db-connect-admin-auth-token \ --region region \ --expires-in 3600 \ --hostname your_cluster_endpoint
Windows
aws dsql generate-db-connect-admin-auth-token ^ --region=region ^ --expires-in=3600 ^ --hostname=your_cluster_endpoint

Verwenden Sie das SDKs , um ein Token in Aurora DSQL zu generieren

Sie können ein Authentifizierungstoken für Ihren Cluster generieren, wenn er sich im Status ACTIVE befindet. In den SDK-Beispielen werden die folgenden Attribute verwendet, um ein Authentifizierungstoken für die admin-Rolle zu generieren:

  • your_cluster_endpoint(oderyourClusterEndpoint) — Der Endpunkt Ihres Aurora DSQL-Clusters. Das Benennungsformat ist your_cluster_identifier.dsql.region.on.aws wie im Beispiel 01abc2ldefg3hijklmnopqurstu.dsql.us-east-1.on.aws.

  • region(oderRegionEndpoint) — Der, AWS-Region in dem sich Ihr Cluster befindet, z. B. us-east-2 oderus-east-1.

Python SDK

Sie können das Token wie folgt erstellen:

  • Wenn Sie eine Verbindung mit der admin-Rolle herstellen, verwenden Sie generate_db_connect_admin_auth_token.

  • Wenn Sie eine Verbindung mit einer benutzerdefinierten Datenbankrolle herstellen, verwenden Sie generate_connect_auth_token.

def generate_token(your_cluster_endpoint, region): client = boto3.client("dsql", region_name=region) # use `generate_db_connect_auth_token` instead if you are not connecting as admin. token = client.generate_db_connect_admin_auth_token(your_cluster_endpoint, region) print(token) return token
C++ SDK

Sie können das Token wie folgt erstellen:

  • Wenn Sie eine Verbindung mit der admin-Rolle herstellen, verwenden Sie GenerateDBConnectAdminAuthToken.

  • Wenn Sie eine Verbindung mit einer benutzerdefinierten Datenbankrolle herstellen, verwenden Sie GenerateDBConnectAuthToken.

#include <aws/core/Aws.h> #include <aws/dsql/DSQLClient.h> #include <iostream> using namespace Aws; using namespace Aws::DSQL; std::string generateToken(String yourClusterEndpoint, String region) { Aws::SDKOptions options; Aws::InitAPI(options); DSQLClientConfiguration clientConfig; clientConfig.region = region; DSQLClient client{clientConfig}; std::string token = ""; // If you are not using the admin role to connect, use GenerateDBConnectAuthToken instead const auto presignedString = client.GenerateDBConnectAdminAuthToken(yourClusterEndpoint, region); if (presignedString.IsSuccess()) { token = presignedString.GetResult(); } else { std::cerr << "Token generation failed." << std::endl; } std::cout << token << std::endl; Aws::ShutdownAPI(options); return token; }
JavaScript SDK

Sie können das Token wie folgt erstellen:

  • Wenn Sie eine Verbindung mit der admin-Rolle herstellen, verwenden Sie getDbConnectAdminAuthToken.

  • Wenn Sie eine Verbindung mit einer benutzerdefinierten Datenbankrolle herstellen, verwenden Sie getDbConnectAuthToken.

import { DsqlSigner } from "@aws-sdk/dsql-signer"; async function generateToken(yourClusterEndpoint, region) { const signer = new DsqlSigner({ hostname: yourClusterEndpoint, region, }); try { // Use `getDbConnectAuthToken` if you are _not_ logging in as the `admin` user const token = await signer.getDbConnectAdminAuthToken(); console.log(token); return token; } catch (error) { console.error("Failed to generate token: ", error); throw error; } }
Java SDK

Sie können das Token wie folgt erstellen:

  • Wenn Sie eine Verbindung mit der admin-Rolle herstellen, verwenden Sie generateDbConnectAdminAuthToken.

  • Wenn Sie eine Verbindung mit einer benutzerdefinierten Datenbankrolle herstellen, verwenden Sie generateDbConnectAuthToken.

import software.amazon.awssdk.auth.credentials.DefaultCredentialsProvider; import software.amazon.awssdk.services.dsql.DsqlUtilities; import software.amazon.awssdk.regions.Region; public class GenerateAuthToken { public static String generateToken(String yourClusterEndpoint, Region region) { DsqlUtilities utilities = DsqlUtilities.builder() .region(region) .credentialsProvider(DefaultCredentialsProvider.create()) .build(); // Use `generateDbConnectAuthToken` if you are _not_ logging in as `admin` user String token = utilities.generateDbConnectAdminAuthToken(builder -> { builder.hostname(yourClusterEndpoint) .region(region); }); System.out.println(token); return token; } }
Rust SDK

Sie können das Token wie folgt erstellen:

  • Wenn Sie eine Verbindung mit der admin-Rolle herstellen, verwenden Sie db_connect_admin_auth_token.

  • Wenn Sie eine Verbindung mit einer benutzerdefinierten Datenbankrolle herstellen, verwenden Sie db_connect_auth_token.

use aws_config::{BehaviorVersion, Region}; use aws_sdk_dsql::auth_token::{AuthTokenGenerator, Config}; async fn generate_token(your_cluster_endpoint: String, region: String) -> String { let sdk_config = aws_config::load_defaults(BehaviorVersion::latest()).await; let signer = AuthTokenGenerator::new( Config::builder() .hostname(&your_cluster_endpoint) .region(Region::new(region)) .build() .unwrap(), ); // Use `db_connect_auth_token` if you are _not_ logging in as `admin` user let token = signer.db_connect_admin_auth_token(&sdk_config).await.unwrap(); println!("{}", token); token.to_string() }
Ruby SDK

Sie können das Token wie folgt erstellen:

  • Wenn Sie eine Verbindung mit der admin-Rolle herstellen, verwenden Sie generate_db_connect_admin_auth_token.

  • Wenn Sie eine Verbindung mit einer benutzerdefinierten Datenbankrolle herstellen, verwenden Sie generate_db_connect_auth_token.

require 'aws-sdk-dsql' def generate_token(your_cluster_endpoint, region) credentials = Aws::SharedCredentials.new() begin token_generator = Aws::DSQL::AuthTokenGenerator.new({ :credentials => credentials }) # if you're not using admin role, use generate_db_connect_auth_token instead token = token_generator.generate_db_connect_admin_auth_token({ :endpoint => your_cluster_endpoint, :region => region }) rescue => error puts error.full_message end end
.NET
Anmerkung

Das offizielle SDK für .NET enthält keinen integrierten API-Aufruf zur Generierung eines Authentifizierungstokens für Aurora DSQL. Stattdessen müssen Sie die Utility-Klasse DSQLAuthTokenGenerator verwenden. Im folgenden Codebeispiel sehen Sie, wie das Authentifizierungstoken für .NET generiert wird.

Sie können das Token wie folgt erstellen:

  • Wenn Sie eine Verbindung mit der admin-Rolle herstellen, verwenden Sie DbConnectAdmin.

  • Wenn Sie eine Verbindung mit einer benutzerdefinierten Datenbankrolle herstellen, verwenden Sie DbConnect.

Im folgenden Beispiel wird die Utility-Klasse DSQLAuthTokenGenerator verwendet, um das Authentifizierungstoken für einen Benutzer mit der Rolle admin zu generieren. Ersetzen Sie es insert-dsql-cluster-endpoint durch Ihren Cluster-Endpunkt.

using Amazon; using Amazon.DSQL.Util; using Amazon.Runtime; var yourClusterEndpoint = "insert-dsql-cluster-endpoint"; AWSCredentials credentials = FallbackCredentialsFactory.GetCredentials(); var token = DSQLAuthTokenGenerator.GenerateDbConnectAdminAuthToken(credentials, RegionEndpoint.USEast1, yourClusterEndpoint); Console.WriteLine(token);
Golang
Anmerkung

Das Golang SDK bietet keine integrierte Methode zum Generieren eines vorsignierten Tokens. Sie müssen die signierte Anforderung wie im folgenden Codebeispiel gezeigt manuell erstellen.

Geben Sie im folgenden Codebeispiel action basierend auf dem PostgreSQL-Benutzer an:

  • Wenn Sie eine Verbindung mit der admin-Rolle herstellen, verwenden Sie die DbConnectAdmin-Aktion.

  • Wenn Sie eine Verbindung mit einer benutzerdefinierten Datenbankrolle herstellen, verwenden Sie die DbConnect-Aktion.

Zusätzlich zu yourClusterEndpoint und region verwendet das folgende Beispielaction. Geben Sie den auf dem PostgreSQL action basierenden Benutzer an.

func GenerateDbConnectAdminAuthToken(yourClusterEndpoint string, region string, action string) (string, error) { // Fetch credentials sess, err := session.NewSession() if err != nil { return "", err } creds, err := sess.Config.Credentials.Get() if err != nil { return "", err } staticCredentials := credentials.NewStaticCredentials( creds.AccessKeyID, creds.SecretAccessKey, creds.SessionToken, ) // The scheme is arbitrary and is only needed because validation of the URL requires one. endpoint := "https://" + yourClusterEndpoint req, err := http.NewRequest("GET", endpoint, nil) if err != nil { return "", err } values := req.URL.Query() values.Set("Action", action) req.URL.RawQuery = values.Encode() signer := v4.Signer{ Credentials: staticCredentials, } _, err = signer.Presign(req, nil, "dsql", region, 15*time.Minute, time.Now()) if err != nil { return "", err } url := req.URL.String()[len("https://"):] return url, nil }