Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.
Création d’un jeton d’authentification dans Amazon Aurora DSQL
Pour vous connecter à Amazon Aurora DSQL avec un client SQL, générez un jeton d’authentification à utiliser comme mot de passe. Ce jeton est utilisé uniquement pour l’authentification de la connexion. Une fois la connexion établie, la connexion reste valide même si le jeton d’authentification expire.
Si vous créez un jeton d'authentification à l'aide de la AWS console, le jeton expire automatiquement dans une heure par défaut. Si vous utilisez le AWS CLI ou SDKs pour créer le jeton, la valeur par défaut est de 15 minutes. La durée maximale est de 604 800 secondes, soit une semaine. Pour vous reconnecter à Aurora DSQL depuis votre client, vous pouvez utiliser le même jeton d’authentification s’il n’a pas expiré, ou vous pouvez en générer un nouveau.
Pour commencer à générer un jeton, créez une politique IAM et un cluster dans Aurora DSQL. Utilisez ensuite la AWS console ou AWS CLI le AWS SDKs pour générer un jeton.
Vous devez disposer au minimum des autorisations IAM répertoriées dans Connexion à votre cluster à l’aide d’IAM, selon le rôle de base de données que vous utilisez pour vous connecter.
Utiliser la AWS console pour générer un jeton d'authentification dans Aurora DSQL
Aurora DSQL authentifie les utilisateurs à l’aide d’un jeton plutôt que d’un mot de passe. Vous pouvez générer le jeton à partir de la console.
Pour plus d’informations sur les rôles de base de données personnalisés et IAM dans Aurora DSQL, consultez Authentification et autorisation pour Aurora DSQL.
AWS CloudShellÀ utiliser pour générer un jeton d'authentification dans Aurora DSQL
Avant de pouvoir générer un jeton d'authentification à l'aide deAWS CloudShell, assurez-vous de créer un cluster Aurora DSQL.
Pour générer un jeton d'authentification à l'aide de AWS CloudShell
-
Connectez-vous à la console Aurora AWS Management Console DSQL et ouvrez-la à https://console.aws.amazon.com/dsql l'adresse.
-
En bas à gauche de la AWS console, choisissezAWS CloudShell.
-
Exécutez la commande suivante pour générer un jeton d’authentification pour le rôle admin. us-east-1Remplacez-le par votre région et your_cluster_endpoint par le point de terminaison de votre propre cluster.
Si vous ne vous connectez pas en tant que admin, utilisez generate-db-connect-auth-token à la place.
aws dsql generate-db-connect-admin-auth-token \
--expires-in 3600 \
--region us-east-1 \
--hostname your_cluster_endpoint
Si vous rencontrez des erreurs, consultez Résoudre les problèmes liés à IAM et Comment résoudre les erreurs d’accès refusé ou d’opération non autorisée avec une politique IAM ?.
-
Utilisez la commande suivante pour utiliser psql afin de démarrer une connexion à votre cluster.
PGSSLMODE=require \
psql --dbname postgres \
--username admin \
--host cluster_endpoint
-
Vous devriez être invité à saisir un mot de passe. Copiez le jeton que vous avez généré et assurez-vous de ne pas inclure d’espaces ni de caractères supplémentaires. Collez-le dans le formulaire d’invite psql suivant.
Password for user admin:
-
Appuyez sur Entrée. Vous devriez obtenir une invite PostgreSQL.
postgres=>
Si vous obtenez une erreur d’accès refusé, assurez-vous que votre identité IAM dispose de l’autorisation dsql:DbConnectAdmin. Si vous êtes autorisé et que vous continuez à recevoir des erreurs d’accès refusé, consultez Résoudre les problèmes liés à IAM et Comment résoudre les erreurs d’accès refusé ou d’opération non autorisée avec une politique IAM ?.
Pour plus d’informations sur les rôles de base de données personnalisés et IAM dans Aurora DSQL, consultez Authentification et autorisation pour Aurora DSQL.
Utilisez le AWS CLI pour générer un jeton d'authentification dans Aurora DSQL
Lorsque votre cluster est ACTIVE, vous pouvez générer un jeton d’authentification sur l’interface de ligne de commande (CLI) à l’aide de la commande aws dsql. Utilisez l’une des techniques suivantes :
-
Si vous vous connectez avec le rôle admin, utilisez l’option generate-db-connect-admin-auth-token.
-
Si vous vous connectez avec le rôle de base de données personnalisé, utilisez l’option generate-db-connect-auth-token.
L’exemple suivant utilise les attributs suivants pour générer un jeton d’authentification pour le rôle admin.
-
your_cluster_endpoint— Le point de terminaison du cluster. Il suit le format your_cluster_identifier.dsql.region.on.aws, comme dans l’exemple 01abc2ldefg3hijklmnopqurstu.dsql.us-east-1.on.aws.
-
region— LeRégion AWS, tel que us-east-2 ouus-east-1.
Les exemples suivants définissent le délai d’expiration du jeton dans 3 600 secondes (1 heure).
- 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
Utilisez le SDKs pour générer un jeton dans Aurora DSQL
Vous pouvez générer un jeton d’authentification pour votre cluster lorsqu’il est à l’état ACTIVE. L’exemple de kits SDK utilise les attributs suivants pour générer un jeton d’authentification pour le rôle admin :
-
your_cluster_endpoint(ouyourClusterEndpoint) : point de terminaison de votre cluster Aurora DSQL. Le format de dénomination est your_cluster_identifier.dsql.region.on.aws, comme dans l’exemple 01abc2ldefg3hijklmnopqurstu.dsql.us-east-1.on.aws.
-
region(ouRegionEndpoint) — L'Région AWSendroit dans lequel se trouve votre cluster, tel que us-east-2 ouus-east-1.
- Python SDK
-
Vous pouvez générer le jeton des manières suivantes :
-
Si vous vous connectez avec le rôle admin, utilisez generate_db_connect_admin_auth_token.
-
Si vous vous connectez avec le rôle de base de données personnalisé, utilisez 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
-
Vous pouvez générer le jeton des manières suivantes :
-
Si vous vous connectez avec le rôle admin, utilisez GenerateDBConnectAdminAuthToken.
-
Si vous vous connectez avec le rôle de base de données personnalisé, utilisez 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
-
Vous pouvez générer le jeton des manières suivantes :
-
Si vous vous connectez avec le rôle admin, utilisez getDbConnectAdminAuthToken.
-
Si vous vous connectez avec le rôle de base de données personnalisé, utilisez 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
-
Vous pouvez générer le jeton des manières suivantes :
-
Si vous vous connectez avec le rôle admin, utilisez generateDbConnectAdminAuthToken.
-
Si vous vous connectez avec le rôle de base de données personnalisé, utilisez 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
-
Vous pouvez générer le jeton des manières suivantes :
-
Si vous vous connectez avec le rôle admin, utilisez db_connect_admin_auth_token.
-
Si vous vous connectez avec le rôle de base de données personnalisé, utilisez 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
-
Vous pouvez générer le jeton des manières suivantes :
-
Si vous vous connectez avec le rôle admin, utilisez generate_db_connect_admin_auth_token.
-
Si vous vous connectez avec le rôle de base de données personnalisé, utilisez 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
-
Le kit SDK officiel pour .NET n’inclut pas d’appel d’API intégré pour générer un jeton d’authentification pour Aurora DSQL. À la place, vous devez utiliser DSQLAuthTokenGenerator, qui est une classe d’utilitaire. L’exemple de code suivant décrit comment générer le jeton d’authentification pour .NET.
Vous pouvez générer le jeton des manières suivantes :
-
Si vous vous connectez avec le rôle admin, utilisez DbConnectAdmin.
-
Si vous vous connectez avec le rôle de base de données personnalisé, utilisez DbConnect.
L’exemple suivant utilise la classe d’utilitaire DSQLAuthTokenGenerator pour générer le jeton d’authentification pour un utilisateur avec le rôle admin. Remplacez-le insert-dsql-cluster-endpoint par le point de terminaison de votre 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
-
Le kit SDK Golang ne fournit pas de méthode intégrée pour générer un jeton pré-signé. Vous devez construire manuellement la demande signée, comme illustré dans l’exemple de code suivant.
Dans l’exemple de code suivant, spécifiez l’action en fonction de l’utilisateur PostgreSQL :
-
Si vous vous connectez avec le rôle admin, utilisez l’action DbConnectAdmin.
-
Si vous vous connectez avec le rôle de base de données personnalisé, utilisez l’action DbConnect.
En plus de yourClusterEndpoint etregion, l'exemple suivant utiliseaction. Spécifiez le action en fonction de l'utilisateur 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
}