Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.
Generazione di un token di autenticazione in Amazon Aurora DSQL
Per connetterti ad Amazon Aurora DSQL con un client SQL, genera un token di autenticazione da utilizzare come password. Questo token viene utilizzato solo per autenticare la connessione. Una volta stabilita la connessione, la connessione rimane valida anche se il token di autenticazione scade.
Se crei un token di autenticazione utilizzando la AWS console, per impostazione predefinita il token scade automaticamente dopo un'ora. Se si utilizza AWS CLI o SDKs per creare il token, l'impostazione predefinita è 15 minuti. La durata massima è di 604.800 secondi, ovvero una settimana. Per connetterti nuovamente ad Aurora DSQL dal client, puoi utilizzare lo stesso token di autenticazione se non è scaduto oppure è possibile generarne uno nuovo.
Per iniziare a generare un token, crea una policy IAM e un cluster in Aurora DSQL. Quindi usa la AWS console o AWS CLI il AWS SDKs per generare un token.
È necessario disporre almeno delle autorizzazioni IAM elencate in Connessione al cluster tramite IAM, a seconda del ruolo del database utilizzato per la connessione.
Usa la AWS console per generare un token di autenticazione in Aurora DSQL
Aurora DSQL autentica gli utenti con un token anziché una password. Puoi generare il token dalla console.
Per maggiori informazioni sui ruoli del database personalizzati e su IAM in Aurora DSQL, consulta Autenticazione e autorizzazione per Aurora DSQL.
AWS CloudShell Da utilizzare per generare un token di autenticazione in Aurora DSQL
Prima di poter generare un token di autenticazione utilizzando AWS CloudShell, assicurati di creare un cluster Aurora DSQL.
Per generare un token di autenticazione utilizzando AWS CloudShell
-
Accedi a Console di gestione AWS e apri la console Aurora DSQL all'indirizzo. https://console.aws.amazon.com/dsql
-
In basso a sinistra della AWS console, scegli. AWS CloudShell
-
Esegui il comando seguente per generare un token di autenticazione per il ruolo admin. Sostituiscilo us-east-1 con la tua regione e your_cluster_endpoint con l'endpoint del tuo cluster.
Se non ti connetti come admin, utilizza invece generate-db-connect-auth-token.
aws dsql generate-db-connect-admin-auth-token \
--expires-in 3600 \
--region us-east-1 \
--hostname your_cluster_endpoint
In caso di problemi, consulta Risoluzione dei problemi di IAM e Come posso risolvere gli errori di accesso negato o di operazione non autorizzata con una policy IAM?
-
Utilizza il comando seguente per utilizzare psql per aprire una connessione al cluster.
PGSSLMODE=require \
psql --dbname postgres \
--username admin \
--host cluster_endpoint
-
Dovrebbe comparire un prompt di immissione della password. Copia il token che generato e assicurati di non includere spazi o caratteri aggiuntivi. Incollalo nel seguente prompt da psql.
Password for user admin:
-
Premere Invio. Dovrebbe comparire un prompt di PostgreSQL.
postgres=>
Se ricevi un errore di accesso negato, assicurati che la tua identità IAM disponga dell’autorizzazione dsql:DbConnectAdmin. Se disponi dell’autorizzazione e continui a ricevere errori di accesso negato, consulta Risoluzione dei problemi di IAM e Come posso risolvere gli errori di accesso negato o di operazione non autorizzata con una policy IAM?
Per maggiori informazioni sui ruoli del database personalizzati e su IAM in Aurora DSQL, consulta Autenticazione e autorizzazione per Aurora DSQL.
Usa il AWS CLI per generare un token di autenticazione in Aurora DSQL
Se il cluster è in stato ACTIVE, è possibile generare un token di autenticazione dalla CLI utilizzando il comando aws dsql. È possibile utilizzare una delle seguenti tecniche:
-
Se ti stai connettendo con il ruolo admin, utilizza l’opzione generate-db-connect-admin-auth-token.
-
Se ti stai connettendo con un ruolo del database personalizzato, utilizza l’opzione generate-db-connect-auth-token.
L’esempio seguente utilizza i seguenti attributi per generare un token di autenticazione per il ruolo admin.
-
your_cluster_endpoint— L'endpoint del cluster. Segue il formato your_cluster_identifier.dsql.region.on.aws, come nell’esempio 01abc2ldefg3hijklmnopqurstu.dsql.us-east-1.on.aws.
-
region— Il Regione AWS, ad esempio us-east-2 ous-east-1.
Gli esempi seguenti impostano il tempo di scadenza del token in 3.600 secondi (1 ora).
- 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
Usa il SDKs per generare un token in Aurora DSQL
È possibile generare un token di autenticazione per il cluster quando è in stato ACTIVE. Gli esempi basati su SDK utilizzano i seguenti attributi per generare un token di autenticazione per il ruolo admin:
-
your_cluster_endpoint(oyourClusterEndpoint) — L'endpoint del cluster Aurora DSQL. Il formato di denominazione è your_cluster_identifier.dsql.region.on.aws, come nell’esempio 01abc2ldefg3hijklmnopqurstu.dsql.us-east-1.on.aws.
-
region(oRegionEndpoint) — L'area Regione AWS in cui si trova il cluster, ad esempio o. us-east-2 us-east-1
- Python SDK
-
È possibile generare il token nei modi seguenti:
-
Se ti stai connettendo con il ruolo admin, utilizza generate_db_connect_admin_auth_token.
-
Se ti stai connettendo con un ruolo del database personalizzato, utilizza 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
-
È possibile generare il token nei modi seguenti:
-
Se ti stai connettendo con il ruolo admin, utilizza GenerateDBConnectAdminAuthToken.
-
Se ti stai connettendo con un ruolo del database personalizzato, utilizza 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
-
È possibile generare il token nei modi seguenti:
-
Se ti stai connettendo con il ruolo admin, utilizza getDbConnectAdminAuthToken.
-
Se ti stai connettendo con un ruolo del database personalizzato, utilizza 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
-
È possibile generare il token nei modi seguenti:
-
Se ti stai connettendo con il ruolo admin, utilizza generateDbConnectAdminAuthToken.
-
Se ti stai connettendo con un ruolo del database personalizzato, utilizza 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
-
È possibile generare il token nei modi seguenti:
-
Se ti stai connettendo con il ruolo admin, utilizza db_connect_admin_auth_token.
-
Se ti stai connettendo con un ruolo del database personalizzato, utilizza 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
-
È possibile generare il token nei modi seguenti:
-
Se ti stai connettendo con il ruolo admin, utilizza generate_db_connect_admin_auth_token.
-
Se ti stai connettendo con un ruolo del database personalizzato, utilizza 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
-
L’SDK ufficiale per .NET non include una chiamata API integrata per generare un token di autenticazione per Aurora DSQL. È necessario utilizzare invece DSQLAuthTokenGenerator, che è una classe di utilità. Nell’esempio di codice riportato di seguito viene illustrato come generare il token di autenticazione in .NET.
È possibile generare il token nei modi seguenti:
-
Se ti stai connettendo con il ruolo admin, utilizza DbConnectAdmin.
-
Se ti stai connettendo con un ruolo del database personalizzato, utilizza DbConnect.
L’esempio seguente utilizza la classe di utilità DSQLAuthTokenGenerator per generare il token di autenticazione per un utente con il ruolo admin. insert-dsql-cluster-endpointSostituiscilo con l'endpoint del 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
-
L’SDK Golang non fornisce un metodo integrato per generare un token prefirmato. È necessario creare manualmente la richiesta firmata, come illustrato nel seguente esempio di codice.
Nel seguente esempio di codice, specifica il valore action sulla base dell’utente PostgreSQL:
-
Se ti stai connettendo con il ruolo admin, utilizza l’azione DbConnectAdmin.
-
Se ti stai connettendo con un ruolo del database personalizzato, utilizza l’azione DbConnect.
Oltre a yourClusterEndpoint eregion, l'esempio seguente utilizzaaction. Specificare il in action base all'utente 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
}