Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.
Menghasilkan token otentikasi di Amazon Aurora DSQL
Untuk terhubung ke Amazon Aurora DSQL dengan klien SQL, buat token otentikasi untuk digunakan sebagai kata sandi. Token ini hanya digunakan untuk mengautentikasi koneksi. Setelah koneksi dibuat, koneksi tetap valid bahkan jika token otentikasi kedaluwarsa.
Jika Anda membuat token otentikasi menggunakan AWS konsol, token secara otomatis kedaluwarsa dalam satu jam secara default. Jika Anda menggunakan AWS CLI atau SDKs untuk membuat token, defaultnya adalah 15 menit. Durasi maksimum adalah 604.800 detik, yaitu satu minggu. Untuk terhubung ke Aurora DSQL dari klien Anda lagi, Anda dapat menggunakan token otentikasi yang sama jika belum kedaluwarsa, atau Anda dapat membuat yang baru.
Untuk memulai membuat token, buat kebijakan IAM dan cluster di Aurora DSQL. Kemudian gunakan AWS konsol, AWS CLI, atau AWS SDKs untuk menghasilkan token.
Minimal, Anda harus memiliki izin IAM yang tercantumMenghubungkan ke klaster Anda menggunakan IAM, tergantung pada peran database yang Anda gunakan untuk terhubung.
Gunakan AWS konsol untuk menghasilkan token otentikasi di Aurora DSQL
Aurora DSQL mengautentikasi pengguna dengan token daripada kata sandi. Anda dapat menghasilkan token dari konsol.
Untuk mempelajari lebih lanjut tentang peran basis data kustom dan IAM di Aurora DSQL, lihat. Otentikasi dan otorisasi untuk Aurora DSQL
Gunakan AWS CloudShell untuk menghasilkan token otentikasi di Aurora DSQL
Sebelum Anda dapat membuat token otentikasi menggunakan AWS CloudShell, pastikan bahwa Anda membuat cluster Aurora DSQL.
Untuk menghasilkan token otentikasi menggunakan AWS CloudShell
-
Masuk ke AWS Management Console dan buka konsol Aurora DSQL di. https://console.aws.amazon.com/dsql
-
Di kiri bawah AWS konsol, pilih AWS CloudShell.
-
Jalankan perintah berikut untuk menghasilkan token otentikasi untuk admin
peran tersebut. Ganti us-east-1
dengan Wilayah Anda dan your_cluster_endpoint
dengan titik akhir cluster Anda sendiri.
Jika Anda tidak terhubung sebagaiadmin
, gunakan sebagai generate-db-connect-auth-token
gantinya.
aws dsql generate-db-connect-admin-auth-token \
--expires-in 3600 \
--region us-east-1
\
--hostname your_cluster_endpoint
Jika Anda mengalami masalah, lihat Memecahkan Masalah IAM dan Bagaimana cara memecahkan masalah akses ditolak atau kesalahan operasi yang tidak sah dengan kebijakan IAM? .
-
Gunakan perintah berikut untuk digunakan psql
untuk memulai koneksi ke cluster Anda.
PGSSLMODE=require \
psql --dbname postgres \
--username admin \
--host cluster_endpoint
-
Anda akan melihat prompt untuk memberikan kata sandi. Salin token yang Anda buat, dan pastikan Anda tidak menyertakan spasi atau karakter tambahan. Tempelkan ke prompt berikut daripsql
.
Password for user admin:
-
Tekan Enter. Anda akan melihat prompt PostgreSQL.
postgres=>
Jika Anda mendapatkan kesalahan akses ditolak, pastikan identitas IAM Anda memiliki dsql:DbConnectAdmin
izin. Jika Anda memiliki izin dan terus mendapatkan kesalahan penolakan akses, lihat Memecahkan masalah IAM dan Bagaimana saya bisa memecahkan masalah kesalahan operasi yang ditolak atau tidak sah dengan kebijakan IAM? .
Untuk mempelajari lebih lanjut tentang peran basis data kustom dan IAM di Aurora DSQL, lihat. Otentikasi dan otorisasi untuk Aurora DSQL
Gunakan AWS CLI untuk menghasilkan token otentikasi di Aurora DSQL
Ketika cluster AndaACTIVE
, Anda dapat menghasilkan token otentikasi pada CLI dengan menggunakan aws dsql
perintah. Gunakan salah satu dari teknik berikut:
-
Jika Anda terhubung dengan admin
peran, gunakan generate-db-connect-admin-auth-token
opsi.
-
Jika Anda terhubung dengan peran basis data kustom, gunakan generate-db-connect-auth-token
opsi.
Contoh berikut menggunakan atribut berikut untuk menghasilkan token otentikasi untuk admin
peran tersebut.
-
your_cluster_endpoint
— Titik akhir cluster. Ini mengikuti formatyour_cluster_identifier
.dsql.region
.on.aws
, seperti pada contoh01abc2ldefg3hijklmnopqurstu.dsql.us-east-1.on.aws
.
-
region
— The Wilayah AWS, seperti us-east-2
atauus-east-1
.
Contoh berikut mengatur waktu kedaluwarsa token untuk kedaluwarsa dalam 3600 detik (1 jam).
- 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
Gunakan SDKs untuk menghasilkan token di Aurora DSQL
Anda dapat membuat token otentikasi untuk klaster Anda saat berada dalam ACTIVE
status. Contoh SDK menggunakan atribut berikut untuk menghasilkan token autentikasi untuk peran tersebutadmin
:
-
your_cluster_endpoint
(atauyourClusterEndpoint
) — Titik akhir cluster Aurora DSQL Anda. Format penamaan adalahyour_cluster_identifier
.dsql.region
.on.aws
, seperti pada contoh01abc2ldefg3hijklmnopqurstu.dsql.us-east-1.on.aws
.
-
region
(atauRegionEndpoint
) — Wilayah AWS Di mana cluster Anda berada, seperti us-east-2
atauus-east-1
.
- Python SDK
-
Anda dapat membuat token dengan cara berikut:
-
Jika Anda terhubung dengan admin
peran, gunakangenerate_db_connect_admin_auth_token
.
-
Jika Anda terhubung dengan peran basis data kustom, gunakangenerate_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
-
Anda dapat membuat token dengan cara berikut:
-
Jika Anda terhubung dengan admin
peran, gunakanGenerateDBConnectAdminAuthToken
.
-
Jika Anda terhubung dengan peran basis data kustom, gunakanGenerateDBConnectAuthToken
.
#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
-
Anda dapat membuat token dengan cara berikut:
-
Jika Anda terhubung dengan admin
peran, gunakangetDbConnectAdminAuthToken
.
-
Jika Anda terhubung dengan peran basis data kustom, gunakangetDbConnectAuthToken
.
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
-
Anda dapat membuat token dengan cara berikut:
-
Jika Anda terhubung dengan admin
peran, gunakangenerateDbConnectAdminAuthToken
.
-
Jika Anda terhubung dengan peran basis data kustom, gunakangenerateDbConnectAuthToken
.
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
-
Anda dapat membuat token dengan cara berikut:
-
Jika Anda terhubung dengan admin
peran, gunakandb_connect_admin_auth_token
.
-
Jika Anda terhubung dengan peran basis data kustom, gunakandb_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
-
Anda dapat membuat token dengan cara berikut:
-
Jika Anda terhubung dengan admin
peran, gunakangenerate_db_connect_admin_auth_token
.
-
Jika Anda terhubung dengan peran basis data kustom, gunakangenerate_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
-
SDK resmi untuk .NET tidak menyertakan panggilan API bawaan untuk menghasilkan token otentikasi untuk Aurora DSQL. Sebaliknya, Anda harus menggunakanDSQLAuthTokenGenerator
, yang merupakan kelas utilitas. Contoh kode berikut menunjukkan cara menghasilkan token otentikasi untuk.NET.
Anda dapat membuat token dengan cara berikut:
-
Jika Anda terhubung dengan admin
peran, gunakanDbConnectAdmin
.
-
Jika Anda terhubung dengan peran basis data kustom, gunakanDbConnect
.
Contoh berikut menggunakan kelas DSQLAuthTokenGenerator
utilitas untuk menghasilkan token otentikasi untuk pengguna dengan admin
peran. Ganti insert-dsql-cluster-endpoint
dengan titik akhir cluster Anda.
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
-
Golang SDK tidak menyediakan metode bawaan untuk menghasilkan token yang telah ditandatangani sebelumnya. Anda harus secara manual membangun permintaan yang ditandatangani, seperti yang ditunjukkan dalam contoh kode berikut.
Dalam contoh kode berikut, tentukan action
berdasarkan pengguna PostgreSQL:
-
Jika Anda terhubung dengan admin
peran, gunakan DbConnectAdmin
tindakan.
-
Jika Anda terhubung dengan peran basis data kustom, gunakan DbConnect
tindakan tersebut.
Selain yourClusterEndpoint
danregion
, contoh berikut menggunakanaction
. Tentukan action
berdasarkan pengguna 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
}