Generación de un token de autenticación en Amazon Aurora DSQL - Amazon Aurora DSQL

Generación de un token de autenticación en Amazon Aurora DSQL

Para conectarse a Amazon Aurora DSQL con un cliente de SQL, genere un token de autenticación para utilizarlo como contraseña. Este token se usa solo para autenticar la conexión. Una vez establecida la conexión, esta sigue siendo válida incluso si el token de autenticación caduca.

Si crea un token de autenticación mediante la consola de AWS, el token caduca automáticamente en una hora de forma predeterminada. Si utiliza la AWS CLI o los SDK para crear el token, el tiempo predeterminado es de 15 minutos. La duración máxima es de 604 800 segundos, lo que equivale a una semana. Para volver a conectarse a Aurora DSQL desde el cliente, puede utilizar el mismo token de autenticación si no ha caducado o puede generar uno nuevo.

Para empezar a generar un token, cree una política de IAM y un clúster en Aurora DSQL. A continuación, use la consola de AWS, la AWS CLI o el SDK de AWS para generar un token.

Como mínimo, debe tener los permisos de IAM indicados en Conexión al clúster mediante IAM, según el rol de base de datos que utilice para conectarse.

Uso de la consola de AWS para generar un token de autenticación en Aurora DSQL

Aurora DSQL autentica a los usuarios con un token en lugar de una contraseña. Puede generar el token desde la consola.

Para generar un token de autenticación
  1. Inicie sesión en la AWS Management Console y abra la consola de Aurora DSQL en https://console.aws.amazon.com/dsql.

  2. Elija el ID del clúster para el que desea generar un token de autenticación. Si aún no ha creado un clúster, siga los pasos descritos en Paso 1: creación de un clúster de Aurora DSQL de una sola región o Paso 4: creación de un clúster de varias regiones.

  3. Elija Conectar y, a continuación, seleccione Obtener token.

  4. Elija si desea conectarse como admin o con un rol de base de datos personalizado.

  5. Copie el token de autenticación generado y úselo para Acceso a Aurora DSQL con clientes de SQL.

Para obtener más información sobre los roles de base de datos personalizados e IAM en Aurora DSQL, consulte Autenticación y autorización para Aurora DSQL.

Uso de AWS CloudShell para generar un token de autenticación en Aurora DSQL

Antes de poder generar un token de autenticación mediante AWS CloudShell, asegúrese de hacer lo siguiente:

Generación de un token de autenticación mediante AWS CloudShell
  1. Inicie sesión en la AWS Management Console y abra la consola de Aurora DSQL en https://console.aws.amazon.com/dsql.

  2. En la parte inferior izquierda de la consola de AWS, elija AWS CloudShell.

  3. Siga Instalación o actualización de la última versión de la AWS CLI para instalar la AWS CLI.

    sudo ./aws/install --update
  4. Ejecute el siguiente comando para generar un token de autenticación para el rol admin. Reemplace us-east-1 por la región y your_cluster_endpoint por el punto de conexión de su propio clúster.

    nota

    Si no se conecta como admin, utilice generate-db-connect-auth-token en su lugar.

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

    Si tiene problemas, consulte Solución de problemas de IAM y ¿Cómo puedo solucionar los errores de acceso denegado u operación no autorizada con una política de IAM?

  5. Utilice el siguiente comando para usar psql e iniciar una conexión con el clúster.

    PGSSLMODE=require \ psql --dbname postgres \ --username admin \ --host cluster_endpoint
  6. Debe ver una petición para proporcionar una contraseña. Copie el token que ha generado y asegúrese de no incluir espacios ni caracteres adicionales. Péguelo en la siguiente petición de psql.

    Password for user admin:
  7. Pulse Intro. Debe ver una petición de PostgreSQL.

    postgres=>

    Si obtiene un error de acceso denegado, asegúrese de que la identidad de IAM tiene el permiso dsql:DbConnectAdmin. Si tiene el permiso y sigue teniendo errores de acceso denegado, consulte Solución de problemas de IAM y ¿Cómo puedo solucionar los errores de acceso denegado u operación no autorizada con una política de IAM?

Para obtener más información sobre los roles de base de datos personalizados e IAM en Aurora DSQL, consulte Autenticación y autorización para Aurora DSQL.

Uso de la AWS CLI para generar un token de autenticación en Aurora DSQL

Cuando el clúster esté ACTIVE, puede generar un token de autenticación en la CLI mediante el comando aws dsql. Utilice cualquiera de las siguientes técnicas:

  • Si se conecta con el rol admin, utilice la opción generate-db-connect-admin-auth-token.

  • Si se conecta con un rol de base de datos personalizado, utilice la opción generate-db-connect-auth-token.

En el siguiente ejemplo se utilizan los siguientes atributos para generar un token de autenticación para el rol admin.

  • your_cluster_endpoint: el punto de conexión del clúster. Sigue el formato your_cluster_identifier.dsql.region.on.aws, como en el ejemplo 01abc2ldefg3hijklmnopqurstu.dsql.us-east-1.on.aws.

  • region: la Región de AWS, como us-east-2 o us-east-1.

Los siguientes ejemplos establecen el tiempo de caducidad del token en 3600 segundos (1 hora).

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

Uso de los SDK para generar un token en Aurora DSQL

Puede generar un token de autenticación para el clúster cuando se encuentre en el estado ACTIVE. En los ejemplos de SDK se utilizan los siguientes atributos para generar un token de autenticación para el rol admin:

  • your_cluster_endpoint (o yourClusterEndpoint): el punto de conexión del clúster de Aurora DSQL. El formato de nomenclatura es your_cluster_identifier.dsql.region.on.aws, como en el ejemplo 01abc2ldefg3hijklmnopqurstu.dsql.us-east-1.on.aws.

  • region (o RegionEndpoint): la Región de AWS en la que se encuentra el clúster, como us-east-2 o us-east-1.

Python SDK

Puede generar el token de las siguientes formas:

  • Si se conecta con el rol admin, utilice generate_db_connect_admin_auth_token.

  • Si se conecta con un rol de base de datos personalizado, utilice 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

Puede generar el token de las siguientes formas:

  • Si se conecta con el rol admin, utilice GenerateDBConnectAdminAuthToken.

  • Si se conecta con un rol de base de datos personalizado, utilice 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

Puede generar el token de las siguientes formas:

  • Si se conecta con el rol admin, utilice getDbConnectAdminAuthToken.

  • Si se conecta con un rol de base de datos personalizado, utilice 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

Puede generar el token de las siguientes formas:

  • Si se conecta con el rol admin, utilice generateDbConnectAdminAuthToken.

  • Si se conecta con un rol de base de datos personalizado, utilice 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

Puede generar el token de las siguientes formas:

  • Si se conecta con el rol admin, utilice db_connect_admin_auth_token.

  • Si se conecta con un rol de base de datos personalizado, utilice 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

Puede generar el token de las siguientes formas:

  • Si se conecta con el rol admin, utilice generate_db_connect_admin_auth_token.

  • Si se conecta con un rol de base de datos personalizado, utilice 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
nota

El SDK oficial para .NET no incluye una llamada a la API integrada para generar un token de autenticación para Aurora DSQL. En su lugar, debe utilizar DSQLAuthTokenGenerator, que es una clase de utilidad. En el siguiente ejemplo de código se muestra cómo generar el token de autenticación para .NET.

Puede generar el token de las siguientes formas:

  • Si se conecta con el rol admin, utilice DbConnectAdmin.

  • Si se conecta con un rol de base de datos personalizado, utilice DbConnect.

En el siguiente ejemplo se utiliza la clase de utilidad DSQLAuthTokenGenerator para generar el token de autenticación para un usuario con el rol admin. Reemplace insert-dsql-cluster-endpoint por el punto de conexión del clúster.

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
nota

El SDK de Golang no proporciona un método integrado para generar un token prefirmado. Debe construir de forma manual la solicitud firmada, como se muestra en el siguiente ejemplo de código.

En el siguiente ejemplo de código, especifique la action en función del usuario de PostgreSQL:

  • Si se conecta con el rol admin, utilice la acción DbConnectAdmin.

  • Si se conecta con un rol de base de datos personalizado, utilice la acción DbConnect.

Además de yourClusterEndpoint y region, en el siguiente ejemplo se utiliza action. Especifique en action la acción en función del usuario de PostgreSQL.

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 }