在 Amazon Aurora DSQL 中產生身分驗證字符 - Amazon Aurora DSQL

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

在 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 使用字符而非密碼來驗證使用者。您可以從 主控台產生字符。

產生身分驗證字符
  1. 登入 AWS Management Console ,並在 開啟 Aurora DSQL 主控台https://console.aws.amazon.com/dsql

  2. 選擇您要為其產生身分驗證字符之叢集的叢集 ID。如果您尚未建立叢集,請遵循 步驟 1:建立 Aurora DSQL 單一區域叢集或 中的步驟步驟 4:建立多區域叢集

  3. 選擇連線,然後選取取得字符

  4. 選擇您要以 admin或以自訂資料庫角色連線。

  5. 複製產生的身分驗證字符並將其用於 使用 SQL 用戶端存取 Aurora DSQL

若要進一步了解 Aurora DSQL 中的自訂資料庫角色和 IAM,請參閱 Aurora DSQL 的身分驗證和授權

使用 在 Aurora DSQL 中 AWS CloudShell 產生身分驗證字符

在使用 產生身分驗證字符之前 AWS CloudShell,請確定您建立 Aurora DSQL 叢集

使用 產生身分驗證字符 AWS CloudShell
  1. 登入 AWS Management Console ,並在 開啟 Aurora DSQL 主控台https://console.aws.amazon.com/dsql

  2. 在 AWS 主控台的左下角,選擇 AWS CloudShell。

  3. 執行下列命令來產生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 政策對存取遭拒或未經授權的操作錯誤進行疑難排解?

  4. 使用以下命令來使用 psql 啟動與叢集的連線。

    PGSSLMODE=require \ psql --dbname postgres \ --username admin \ --host cluster_endpoint
  5. 您應該會看到提示以提供密碼。複製您產生的字符,並確保不包含任何額外的空格或字元。從 將它貼到下列提示中psql

    Password for user admin:
  6. Enter。您應該會看到 PostgreSQL 提示。

    postgres=>

    如果您收到存取遭拒錯誤,請確定您的 IAM 身分具有 dsql:DbConnectAdmin許可。如果您具有 許可並繼續取得存取拒絕錯誤,請參閱疑難排解 IAM如何使用 IAM 政策對存取遭拒或未經授權的操作錯誤進行故障診斷?

若要進一步了解 Aurora DSQL 中的自訂資料庫角色和 IAM,請參閱 Aurora DSQL 的身分驗證和授權

使用 AWS CLI 在 Aurora DSQL 中產生身分驗證字符

當您的叢集為 時ACTIVE,您可以使用 aws dsql命令在 CLI 上產生身分驗證字符。使用下列任一技術:

  • 如果您要與 admin角色連線,請使用 generate-db-connect-admin-auth-token選項。

  • 如果您要與自訂資料庫角色連線,請使用 generate-db-connect-auth-token選項。

下列範例使用下列屬性來產生admin角色的身分驗證字符。

  • your_cluster_endpoint – 叢集的端點。它遵循格式 your_cluster_identifier.dsql.region.on.aws,如範例 所示01abc2ldefg3hijklmnopqurstu.dsql.us-east-1.on.aws

  • region – AWS 區域,例如 us-east-2us-east-1

下列範例設定權杖在 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-2us-east-1

Python SDK

您可以透過下列方式產生字符:

  • 如果您要與 admin角色連線,請使用 generate_db_connect_admin_auth_token

  • 如果您要與自訂資料庫角色連線,請使用 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

您可以透過下列方式產生字符:

  • 如果您要與 admin角色連線,請使用 GenerateDBConnectAdminAuthToken

  • 如果您要與自訂資料庫角色連線,請使用 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

您可以透過下列方式產生字符:

  • 如果您要與 admin角色連線,請使用 getDbConnectAdminAuthToken

  • 如果您要與自訂資料庫角色連線,請使用 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

您可以透過下列方式產生字符:

  • 如果您要與 admin角色連線,請使用 generateDbConnectAdminAuthToken

  • 如果您要與自訂資料庫角色連線,請使用 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

您可以透過下列方式產生字符:

  • 如果您要與 admin角色連線,請使用 db_connect_admin_auth_token

  • 如果您要與自訂資料庫角色連線,請使用 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

您可以透過下列方式產生字符:

  • 如果您要與 admin角色連線,請使用 generate_db_connect_admin_auth_token

  • 如果您要與自訂資料庫角色連線,請使用 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
注意

適用於 .NET 的官方 SDK 不包含內建 API 呼叫,可產生 Aurora DSQL 的身分驗證字符。反之,您必須使用 DSQLAuthTokenGenerator,這是公用程式類別。下列程式碼範例示範如何產生 .NET 的身分驗證字符。

您可以透過下列方式產生字符:

  • 如果您要與 admin角色連線,請使用 DbConnectAdmin

  • 如果您要與自訂資料庫角色連線,請使用 DbConnect

下列範例使用 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 使用者指定 :

  • 如果您要與 admin角色連線,請使用 DbConnectAdmin動作。

  • 如果您要與自訂資料庫角色連線,請使用 DbConnect動作。

除了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 }