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, was einer Woche entspricht. Um von Ihrem Client aus erneut eine Verbindung zu Aurora DSQL herzustellen, können Sie dasselbe Authentifizierungstoken verwenden, falls es nicht abgelaufen ist, oder Sie können ein neues 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, oder die AWS CLI, um ein AWS SDKs Token zu generieren.

Je nachdem, welche Datenbankrolle Sie für die Verbindung verwendenMithilfe von IAM eine Verbindung zu Ihrem Cluster herstellen, benötigen Sie mindestens die unter 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 von der Konsole aus generieren.

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

  2. Wählen Sie die Cluster-ID des Clusters aus, für den Sie ein Authentifizierungstoken generieren möchten. Wenn Sie noch keinen Cluster erstellt haben, folgen Sie den Schritten unter Schritt 1: Erstellen Sie einen Aurora DSQL-Cluster mit einer Region oderSchritt 4: Erstellen Sie einen Cluster mit mehreren Regionen.

  3. Wählen Sie Connect und dann Get Token aus.

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

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

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 ein Authentifizierungstoken mit generieren können AWS CloudShell, stellen Sie sicher, dass Sie Folgendes tun:

Um ein Authentifizierungstoken zu generieren, verwenden Sie AWS CloudShell
  1. Melden Sie sich bei der an AWS Management Console 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. Folgen Sie der Anleitung Installation oder Aktualisierung auf die neueste Version von AWS CLI, um das zu installieren. AWS CLI

    sudo ./aws/install --update
  4. 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 keine Verbindung herstellen alsadmin, verwenden Sie generate-db-connect-auth-token stattdessen.

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

    Wenn 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? .

  5. Verwenden Sie den folgenden Befehl, psql um eine Verbindung zu Ihrem Cluster herzustellen.

    PGSSLMODE=require \ psql --dbname postgres \ --username admin \ --host cluster_endpoint
  6. Sie sollten aufgefordert werden, ein Passwort einzugeben. Kopieren Sie das Token, das Sie generiert haben, und stellen Sie sicher, dass Sie keine zusätzlichen Leerzeichen oder Zeichen verwenden. Fügen Sie es in die folgende Eingabeaufforderung von einpsql.

    Password for user admin:
  7. Drücken Sie die Eingabetaste. Sie sollten eine PostgreSQL-Eingabeaufforderung sehen.

    postgres=>

    Wenn Sie die Fehlermeldung „Zugriff verweigert“ erhalten, stellen Sie sicher, dass Ihre IAM-Identität über die entsprechende Berechtigung verfügt. dsql:DbConnectAdmin 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 vorhanden istACTIVE, können Sie mit dem aws dsql Befehl ein Authentifizierungstoken auf der CLI generieren. Verwenden Sie eine der folgenden Techniken:

  • 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 folgenden Attribute verwendet, um ein Authentifizierungstoken für die admin Rolle zu generieren.

  • your_cluster_endpoint— Der Endpunkt des Clusters. Es folgt dem Formatyour_cluster_identifier.dsql.region.on.aws, wie im Beispiel01abc2ldefg3hijklmnopqurstu.dsql.us-east-1.on.aws.

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

In den folgenden Beispielen wird festgelegt, dass die Ablaufzeit für das Token in 3600 Sekunden (1 Stunde) abläuft.

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 ACTIVE Status befindet. Die SDK-Beispiele verwenden die folgenden Attribute, 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 Beispiel01abc2ldefg3hijklmnopqurstu.dsql.us-east-1.on.aws.

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

Python SDK

Sie können das Token auf folgende Weise generieren:

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

  • Wenn Sie eine Verbindung mit einer benutzerdefinierten Datenbankrolle herstellen, verwenden Siegenerate_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 auf folgende Weise generieren:

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

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

#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 auf folgende Weise generieren:

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

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

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 auf folgende Weise generieren:

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

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

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 auf folgende Weise generieren:

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

  • Wenn Sie eine Verbindung mit einer benutzerdefinierten Datenbankrolle herstellen, verwenden Siedb_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 auf folgende Weise generieren:

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

  • Wenn Sie eine Verbindung mit einer benutzerdefinierten Datenbankrolle herstellen, verwenden Siegenerate_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 for .NET enthält keinen integrierten API-Aufruf zur Generierung eines Authentifizierungstokens für Aurora DSQL. Stattdessen müssen Sie, eine Utility-KlasseDSQLAuthTokenGenerator, verwenden. Das folgende Codebeispiel zeigt, wie das Authentifizierungstoken für.NET generiert wird.

Sie können das Token auf folgende Weise generieren:

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

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

Im folgenden Beispiel wird die DSQLAuthTokenGenerator Utility-Klasse verwendet, um das Authentifizierungstoken für einen Benutzer mit der admin Rolle 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 Anfrage manuell erstellen, wie im folgenden Codebeispiel gezeigt.

Geben Sie im folgenden Codebeispiel den auf dem PostgreSQL action basierenden 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 }