Gerar um token de autenticação no Amazon Aurora DSQL - Amazon Aurora DSQL

Gerar um token de autenticação no Amazon Aurora DSQL

Para se conectar ao Amazon Aurora DSQL com um cliente SQL, gere um token de autenticação para usar como senha. Esse token é usado somente para autenticar a conexão. Depois que a conexão é estabelecida, a conexão permanece válida mesmo que o token de autenticação expire.

Se você criar um token de autenticação usando o console da AWS, ele expirará automaticamente em uma hora por padrão. Se você usar a AWS CLI ou SDKs para criar o token, o padrão será 15 minutos. O máximo é 604.800 segundos, o que equivale a uma semana. Para se conectar novamente ao Aurora DSQL por meio do seu cliente, você pode usar o mesmo token de autenticação, caso ele não tenha expirado, ou pode gerar um novo.

Para começar a gerar um token, crie uma política do IAM e um cluster no Aurora DSQL. Em seguida, use o console da AWS, a AWS CLI ou os SDKs da AWS para gerar um token.

No mínimo, você deve ter as permissões do IAM listadas em Conectar-se a um cluster usando o IAM, dependendo do perfil de banco de dados que você usa para se conectar.

Usar o console da AWS para gerar um token de autenticação no Aurora DSQL

O Aurora DSQL autentica os usuários com um token, em vez de uma senha. Você pode gerar o token no console.

Gerar token de autenticação
  1. Faça login no AWS Management Console e abra o console do Aurora DSQL em https://console.aws.amazon.com/dsql.

  2. Escolha o ID do cluster para o qual deseja gerar um token de autenticação. Se você ainda não criou um cluster, siga as etapas em Etapa 1: criar um cluster do Aurora DSQL de região única ou Etapa 4: criar um cluster multirregional.

  3. Escolha Connect e, em seguida, selecione Get Token.

  4. Escolha se você deseja se conectar como admin ou com um perfil de banco de dados personalizado.

  5. Copie o token de autenticação gerado e use-o para Acessar o Aurora DSQL usando clientes SQL.

Para saber mais sobre perfis de banco de dados personalizados e o IAM no Aurora DSQL, consulte Autenticação e autorização para o Aurora DSQL.

Usar a AWS CloudShell para gerar um token de autenticação no Aurora DSQL

Antes de gerar um token de autenticação usando o AWS CloudShell, você precisa Criar um cluster do Aurora DSQL.

Como gerar token de autenticação usando o AWS CloudShell
  1. Faça login no AWS Management Console e abra o console do Aurora DSQL em https://console.aws.amazon.com/dsql.

  2. Na parte inferior esquerda do Console da AWS, escolha AWS CloudShell.

  3. Execute o comando a seguir para gerar um token de autenticação para o perfil admin. Substitua us-east-1 pela sua região e cluster_endpoint pelo endpoint do seu cluster.

    nota

    Se você não estiver se conectando como admin, use generate-db-connect-auth-token em vez disso.

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

    Se você tiver problemas, consulte Solucionar problemas do IAM e Como solucionar erros de acesso negado ou operação não autorizada em uma política do IAM?.

  4. Use o comando a seguir para utilizar o psql para iniciar uma conexão com o cluster.

    PGSSLMODE=require \ psql --dbname postgres \ --username admin \ --host cluster_endpoint
  5. Você verá uma solicitação para fornecer uma senha. Copie o token que você gerou e não inclua espaços ou caracteres adicionais. Cole-o no prompt a seguir do psql.

    Password for user admin:
  6. Pressione Enter. Você verá um prompt do PostgreSQL.

    postgres=>

    Se você receber um erro de acesso negado, confirme se sua identidade do IAM tenha a permissão dsql:DbConnectAdmin. Se você tiver a permissão e continuar recebendo erros de negação de acesso, consulte Solucionar problemas do IAM e Como solucionar erros de acesso negado ou operação não autorizada em uma política do IAM?.

Para saber mais sobre perfis de banco de dados personalizados e o IAM no Aurora DSQL, consulte Autenticação e autorização para o Aurora DSQL.

Usar a AWS CLI para gerar um token de autenticação no Aurora DSQL

Quando seu cluster estiver ACTIVE, você poderá gerar um token de autenticação na CLI usando o comando aws dsql. Use uma das seguintes técnicas:

  • Se você estiver se conectando com o perfil admin, use a opção generate-db-connect-admin-auth-token.

  • Se você estiver se conectando com um perfil de banco de dados personalizado, use a opção generate-db-connect-auth-token.

O exemplo a seguir usa os atributos abaixo para gerar um token de autenticação para o perfil admin.

  • your_cluster_endpoint: o endpoint do cluster. Ele segue o formato your_cluster_identifier.dsql.region.on.aws, como no exemplo 01abc2ldefg3hijklmnopqurstu.dsql.us-east-1.on.aws.

  • region: a Região da AWS, como us-east-2 ou us-east-1.

Os exemplos a seguir definem que o token deve expirar em 3.600 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

Usar os SDKs para gerar um token no Aurora DSQL

Você pode gerar um token de autenticação para o cluster quando ele estiver no status ACTIVE. Os exemplos de SDK usam os seguintes atributos para gerar um token de autenticação para o perfil admin:

  • your_cluster_endpoint (ou yourClusterEndpoint): o endpoint do cluster do Aurora DSQL. O formato de nomenclatura é your_cluster_identifier.dsql.region.on.aws, como no exemplo 01abc2ldefg3hijklmnopqurstu.dsql.us-east-1.on.aws.

  • region (ou RegionEndpoint): a Região da AWS em que o cluster está localizado, como us-east-2 ou us-east-1.

Python SDK

Você pode gerar o token das seguintes maneiras:

  • Se você estiver se conectando com um perfil admin, use generate_db_connect_admin_auth_token.

  • Se você estiver se conectando com um perfil de banco de dados personalizada, use 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

Você pode gerar o token das seguintes maneiras:

  • Se você estiver se conectando com um perfil admin, use GenerateDBConnectAdminAuthToken.

  • Se você estiver se conectando com um perfil de banco de dados personalizada, use 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

Você pode gerar o token das seguintes maneiras:

  • Se você estiver se conectando com um perfil admin, use getDbConnectAdminAuthToken.

  • Se você estiver se conectando com um perfil de banco de dados personalizada, use 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

Você pode gerar o token das seguintes maneiras:

  • Se você estiver se conectando com um perfil admin, use generateDbConnectAdminAuthToken.

  • Se você estiver se conectando com um perfil de banco de dados personalizada, use 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

Você pode gerar o token das seguintes maneiras:

  • Se você estiver se conectando com um perfil admin, use db_connect_admin_auth_token.

  • Se você estiver se conectando com um perfil de banco de dados personalizada, use 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

Você pode gerar o token das seguintes maneiras:

  • Se você estiver se conectando com um perfil admin, use generate_db_connect_admin_auth_token.

  • Se você estiver se conectando com um perfil de banco de dados personalizada, use 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

O SDK oficial para .NET não inclui uma chamada de API integrada para gerar um token de autenticação para o Aurora DSQL. Em vez disso, você deve usar DSQLAuthTokenGenerator, que é uma classe de utilitário. O exemplo de código a seguir mostra como gerar o token de autenticação para .NET.

Você pode gerar o token das seguintes maneiras:

  • Se você estiver se conectando com um perfil admin, use DbConnectAdmin.

  • Se você estiver se conectando com um perfil de banco de dados personalizada, use DbConnect.

O exemplo a seguir usa a classe utilitária DSQLAuthTokenGenerator para gerar o token de autenticação para um usuário com o perfil admin. Substitua insert-dsql-cluster-endpoint pelo endpoint do cluster.

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

O SDK do Golang não fornece um método integrado para gerar um token pré-assinado. Você deve construir a solicitação assinada manualmente, conforme mostrado no exemplo de código a seguir.

No exemplo de código a seguir, especifique o action com base no usuário do PostgreSQL:

  • Se você estiver se conectando com um perfil admin, use a ação DbConnectAdmin.

  • Se você estiver se conectando com um perfil de banco de dados personalizado, use a ação DbConnect.

Além de yourClusterEndpoint e region, o exemplo a seguir usa action. Especifique a ação com base no usuário do 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 }