本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
在 Amazon Aurora DSQL 中產生身分驗證字符
若要使用 SQL 用戶端連線至 Amazon Aurora DSQL,請產生身分驗證字符以用作密碼。此字符僅用於驗證連線。建立連線後,即使身分驗證字符過期,連線仍然有效。
如果您使用 AWS 主控台建立身分驗證字符,字符預設會在一小時內自動過期。如果您使用 AWS CLI 或 SDKs來建立權杖,則預設值為 15 分鐘。持續時間上限為 604,800 秒,即一週。若要從用戶端再次連線至 Aurora DSQL,您可以在尚未過期時使用相同的身分驗證字符,也可以產生新的字符。
若要開始產生權杖,請在 Aurora DSQL 中建立 IAM 政策和叢集。然後使用 AWS 主控台 AWS CLI、 或 AWS SDKs來產生字符。
視您用來連線的資料庫角色而定使用 IAM 連線至您的叢集,您至少必須擁有 中列出的 IAM 許可。
使用 AWS 主控台在 Aurora DSQL 中產生身分驗證字符
Aurora DSQL 使用字符而非密碼來驗證使用者。您可以從 主控台產生字符。
若要進一步了解 Aurora DSQL 中的自訂資料庫角色和 IAM,請參閱 Aurora DSQL 的身分驗證和授權。
使用 在 Aurora DSQL 中 AWS CloudShell 產生身分驗證字符
在使用 產生身分驗證字符之前 AWS CloudShell,請確定您建立 Aurora DSQL 叢集。
使用 產生身分驗證字符 AWS CloudShell
-
登入 AWS Management Console ,並在 開啟 Aurora DSQL 主控台https://console.aws.amazon.com/dsql。
-
在 AWS 主控台的左下角,選擇 AWS CloudShell。
-
執行下列命令來產生admin
角色的身分驗證字符。將 us-east-1
取代為您的區域,並將 your_cluster_endpoint
取代為您叢集的端點。
如果您不是以 身分連線admin
,請generate-db-connect-auth-token
改用 。
aws dsql generate-db-connect-admin-auth-token \
--expires-in 3600 \
--region us-east-1
\
--hostname your_cluster_endpoint
如果您遇到問題,請參閱疑難排解 IAM 和如何使用 IAM 政策對存取遭拒或未經授權的操作錯誤進行疑難排解?。
-
使用以下命令來使用 psql
啟動與叢集的連線。
PGSSLMODE=require \
psql --dbname postgres \
--username admin \
--host cluster_endpoint
-
您應該會看到提示以提供密碼。複製您產生的字符,並確保不包含任何額外的空格或字元。從 將它貼到下列提示中psql
。
Password for user admin:
-
按 Enter。您應該會看到 PostgreSQL 提示。
postgres=>
如果您收到存取遭拒錯誤,請確定您的 IAM 身分具有 dsql:DbConnectAdmin
許可。如果您具有 許可並繼續取得存取拒絕錯誤,請參閱疑難排解 IAM 和如何使用 IAM 政策對存取遭拒或未經授權的操作錯誤進行故障診斷?。
若要進一步了解 Aurora DSQL 中的自訂資料庫角色和 IAM,請參閱 Aurora DSQL 的身分驗證和授權。
使用 AWS CLI 在 Aurora DSQL 中產生身分驗證字符
當您的叢集為 時ACTIVE
,您可以使用 aws dsql
命令在 CLI 上產生身分驗證字符。使用下列任一技術:
下列範例使用下列屬性來產生admin
角色的身分驗證字符。
下列範例設定權杖在 3600 秒 (1 小時) 後過期的過期時間。
- 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
使用 SDKs 在 Aurora DSQL 中產生權杖
您可以在叢集處於 ACTIVE
狀態時產生身分驗證字符。SDK 範例使用以下屬性來產生admin
角色的身分驗證字符:
-
your_cluster_endpoint
(或 yourClusterEndpoint
) – Aurora DSQL 叢集的端點。命名格式為 your_cluster_identifier
.dsql.region
.on.aws
,如範例 所示01abc2ldefg3hijklmnopqurstu.dsql.us-east-1.on.aws
。
-
region
(或 RegionEndpoint
) – AWS 區域 叢集所在的 ,例如 us-east-2
或 us-east-1
。
- Python SDK
-
您可以透過下列方式產生字符:
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
-
您可以透過下列方式產生字符:
#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
-
您可以透過下列方式產生字符:
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
-
您可以透過下列方式產生字符:
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
-
您可以透過下列方式產生字符:
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
-
您可以透過下列方式產生字符:
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
-
適用於 .NET 的官方 SDK 不包含內建 API 呼叫,可產生 Aurora DSQL 的身分驗證字符。反之,您必須使用 DSQLAuthTokenGenerator
,這是公用程式類別。下列程式碼範例示範如何產生 .NET 的身分驗證字符。
您可以透過下列方式產生字符:
下列範例使用 DSQLAuthTokenGenerator
公用程式類別,為具有 admin
角色的使用者產生身分驗證字符。將 insert-dsql-cluster-endpoint
取代為您的叢集端點。
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 不提供產生預先簽署字符的內建方法。您必須手動建構已簽署的請求,如下列程式碼範例所示。
在下列程式碼範例中,action
根據 PostgreSQL 使用者指定 :
除了yourClusterEndpoint
和區域
之外,下列範例使用 動作
。根據 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
}