

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

# 在 Amazon Aurora DSQL 產生身分驗證記號
<a name="SECTION_authentication-token"></a>

若要使用 SQL 用戶端連線至 Amazon Aurora DSQL，請產生身分驗證記號作為密碼。此記號僅用於驗證連線。連線建立後，即使身分驗證記號過期，連線仍然有效。

如果您使用 AWS 主控台 AWS CLI、 或 SDKs 建立身分驗證字符，字符預設會在 15 分鐘內自動過期。期限上限為 604,800 秒，也就是一週。若要從用戶端再次連線至 Aurora DSQL，您可以使用尚未過期的相同身分驗證記號，也可以產生新的記號。

若要開始產生記號，請在 Aurora DSQL 中[建立 IAM 政策](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_create-console.html)和[叢集](https://docs.aws.amazon.com/aurora-dsql/latest/userguide/getting-started.html#getting-started-quickstart)。然後使用 AWS 主控台 AWS CLI、 或 AWS SDKs來產生字符。

視您用來連線的資料庫角色而定，您至少必須擁有 [使用 IAM 連線至叢集](authentication-authorization.md#authentication-authorization-iam-role-connect) 列出的 IAM 許可權限。

**Topics**
+ [

## 使用 AWS 主控台在 Aurora DSQL 中產生身分驗證字符
](#authentication-token-console)
+ [

## 使用 在 Aurora DSQL 中 AWS CloudShell 產生身分驗證字符
](#authentication-token-cloudshell)
+ [

## 使用 AWS CLI 在 Aurora DSQL 中產生身分驗證字符
](#authentication-token-cli)
+ [

## 使用 SDK 在 Aurora DSQL 中產生記號
](#authentication-token-sdks)

## 使用 AWS 主控台在 Aurora DSQL 中產生身分驗證字符
<a name="authentication-token-console"></a>

Aurora DSQL 會使用記號而非密碼驗證使用者身分。您可以從主控台產生記號。

**產生身分驗證記號**

1. 登入 AWS 管理主控台 並開啟位於 的 Aurora DSQL 主控台[https://console.aws.amazon.com/dsql](https://console.aws.amazon.com/dsql)。

1. 為您要產生身分驗證記號的叢集選擇叢集 ID。如果您尚未建立叢集，請遵循 [步驟 1：建立 Aurora DSQL 單一區域叢集](getting-started.md#getting-started-create-cluster) 或 [步驟 4 （選用）：建立多區域叢集](getting-started.md#getting-started-multi-region) 中的步驟。

1. 選擇**連線**，然後選擇**取得記號**。

1. 選擇您要以 `admin` 或[自訂資料庫角色](https://docs.aws.amazon.com/aurora-dsql/latest/userguide/authentication-authorization.html#authentication-authorization-iam-role-connect)進行連線。

1. 複製產生的身分驗證記號並將其用於 [使用 SQL 用戶端存取 Aurora DSQL](accessing.md#accessing-sql-clients)。

若要進一步瞭解 Aurora DSQL 的自訂資料庫角色和 IAM，請參閱 [Aurora DSQL 的身分驗證和授權](authentication-authorization.md)。

## 使用 在 Aurora DSQL 中 AWS CloudShell 產生身分驗證字符
<a name="authentication-token-cloudshell"></a>

在使用 產生身分驗證字符之前 AWS CloudShell，請確定您[建立 Aurora DSQL 叢集](https://docs.aws.amazon.com/aurora-dsql/latest/userguide/getting-started.html#getting-started-quickstart)。

**使用 產生身分驗證字符 AWS CloudShell**

1. 登入 AWS 管理主控台 並開啟位於 的 Aurora DSQL 主控台[https://console.aws.amazon.com/dsql](https://console.aws.amazon.com/dsql)。

1. 在 AWS 主控台的左下角，選擇 AWS CloudShell。

1. 執行下列命令以產生 `admin` 角色的身分驗證記號。以您的區域取代 *us-east-1*，並以您的叢集端點取代 *your\$1cluster\$1endpoint*。
**注意**  
如果您不是以 `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 進行疑難排解](https://docs.aws.amazon.com/IAM/latest/UserGuide/troubleshoot.html)和[如何對 IAM 政策的存取遭拒或未經授權的操作錯誤進行疑難排解？](https://repost.aws/knowledge-center/troubleshoot-iam-policy-issues)。

1. 使用下列命令以 `psql` 開始連線至叢集。

   ```
   PGSSLMODE=require \
   psql --dbname postgres \
     --username admin \
     --host cluster_endpoint
   ```

1. 您應該會看到提示要求提供密碼。複製您產生的記號，並確保其中不包含任何額外的空格或字元。從 `psql` 將其貼上至下列提示。

   ```
   Password for user admin: 
   ```

1. 按 **Enter**。系統應顯示 PostgreSQL 提示字元。

   ```
   postgres=>
   ```

   如果您收到存取遭拒錯誤，請確保您的 IAM 身分具有 `dsql:DbConnectAdmin` 許可權限。如果您具有許可權限但仍繼續發生存取遭拒錯誤，請參閱[對 IAM 進行疑難排解](https://docs.aws.amazon.com/IAM/latest/UserGuide/troubleshoot.html)和[如何對 IAM 政策的存取遭拒或未經授權的操作錯誤進行疑難排解？](https://repost.aws/knowledge-center/troubleshoot-iam-policy-issues)。

若要進一步瞭解 Aurora DSQL 的自訂資料庫角色和 IAM，請參閱 [Aurora DSQL 的身分驗證和授權](authentication-authorization.md)。

## 使用 AWS CLI 在 Aurora DSQL 中產生身分驗證字符
<a name="authentication-token-cli"></a>

若您的叢集為 `ACTIVE`，可以使用 `aws dsql` 命令在 CLI 上產生身分驗證記號。請使用下列任一技巧：

**注意**  
權杖產生是使用您目前的 IAM 登入資料簽署請求的本機操作。它不會聯絡 AWS 來驗證登入資料。如果您的登入資料已過期或無效，權杖產生仍然成功，但連線嘗試失敗。在產生字符之前，請確定您的 IAM 登入資料有效。
+ 如果您要以 `admin` 角色連線，請使用 `generate-db-connect-admin-auth-token` 選項。
+ 如果您要以自訂資料庫角色連線，請使用 `generate-db-connect-auth-token` 選項。

下列範例使用下列屬性產生 `admin` 角色的身分驗證記號。
+ *your\$1cluster\$1endpoint*：叢集端點。其中遵循格式 `your_cluster_identifier.dsql.region.on.aws`，如範例 `01abc2ldefg3hijklmnopqurstu.dsql.us-east-1.on.aws` 所示。
+ *region* – AWS 區域，例如 `us-east-2`或 `us-east-1`。

下列範例設定的到期時間為記號在 3,600 秒 (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
```

------

## 使用 SDK 在 Aurora DSQL 中產生記號
<a name="authentication-token-sdks"></a>

您可以在叢集處於 `ACTIVE` 狀態時為叢集產生身分驗證記號。SDK 範例使用以下屬性產生 `admin` 角色的身分驗證記號：
+ *your\$1cluster\$1endpoint* (或 *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 ]

**提示**  
AWS 建議使用 [適用於 Python 的 Aurora DSQL 連接器關於 連接器什麼是 Aurora DSQL 身分驗證？功能快速入門指南要求安裝分別安裝 psycopg 或 psycopg2 或非同步基本使用psycopgpsycopg2asyncpg僅使用主機psycopgpsycopg2asyncpg僅使用叢集 IDpsycopgpsycopg2asyncpgpsycopgpsycopg2asyncpg連線字串psycopgpsycopg2asyncpg進階組態psycopgpsycopg2asyncpg組態選項使用適用於 Python 的 Aurora DSQL 連接器搭配連線集區psycopgpsycopg2asyncpg身分驗證管理員與一般使用者範例psycopgpsycopg2asyncpg](SECTION_program-with-dsql-connector-for-python.md)，其會自動處理字符產生。

您可以透過下列方式產生記號：
+ 如果您要與 `admin`角色連線，請使用 `generate_db_connect_admin_auth_token`。
+ 如果您要與自訂資料庫角色連線，請使用 `generate_connect_auth_token`。

```
import boto3

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\$1\$1 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) {
    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;
    return token;
}

int main() {
    Aws::SDKOptions options;
    Aws::InitAPI(options);
    // Replace with your cluster endpoint and region
    std::string token = generateToken("your_cluster_endpoint.dsql.us-east-1.on.aws", "us-east-1");
    Aws::ShutdownAPI(options);
    return 0;
}
```

------
#### [ JavaScript SDK ]

**提示**  
AWS 建議使用 [適用於 Node.js 的 Aurora DSQL 連接器](SECTION_Node-js-connectors.md)，其會自動處理字符產生。

您可以透過下列方式產生記號：
+ 如果您要與 `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 ]

**提示**  
AWS 建議使用 [使用 JDBC 連接器連線至 Aurora DSQL 叢集](SECTION_program-with-jdbc-connector.md)，其會自動處理字符產生。

您可以透過下列方式產生記號：
+ 如果您要與 `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.builder().build())
                .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 ]

**提示**  
AWS 建議使用 [使用 Ruby 連接器連接到 Aurora DSQL 叢集](SECTION_program-with-dsql-connector-for-ruby-pg.md)，其會自動處理字符產生。

您可以透過下列方式產生記號：
+ 如果您要與 `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::CredentialProviderChain.new.resolve

  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
  })
end
```

------
#### [ PHP SDK ]

您可以透過下列方式產生記號：
+ 如果您要與 `admin`角色連線，請使用 `generateDbConnectAdminAuthToken`。
+ 如果您要與自訂資料庫角色連線，請使用 `generateDbConnectAuthToken`。

```
<?php
require 'vendor/autoload.php';

use Aws\DSQL\AuthTokenGenerator;
use Aws\Credentials\CredentialProvider;

function generateToken(string $yourClusterEndpoint, string $region): string {
    $provider = CredentialProvider::defaultProvider();
    $generator = new AuthTokenGenerator($provider);

    // Use generateDbConnectAuthToken if you are not connecting as admin
    $token = $generator->generateDbConnectAdminAuthToken($yourClusterEndpoint, $region);

    echo $token . PHP_EOL;
    return $token;
}
```

------
#### [ .NET ]

**提示**  
AWS 建議使用 [使用 .NET 連接器連接到 Aurora DSQL 叢集](SECTION_program-with-dsql-connector-for-dotnet-npgsql.md)，其會自動處理字符產生。

**注意**  
適用於 .NET 的官方 SDK 並未包含內建 API 呼叫用於產生 Aurora DSQL 的身分驗證記號。您必須改用 `DSQLAuthTokenGenerator` 這項公用程式類別。下列程式碼範例示範如何產生 .NET 的身分驗證記號。

您可以透過下列方式產生記號：
+ 如果您要與 `admin`角色連線，請使用 `DbConnectAdmin`。
+ 如果您要與自訂資料庫角色連線，請使用 `DbConnect`。

下列範例使用 `DSQLAuthTokenGenerator` 公用程式類別，為具有 `admin` 角色的使用者產生身分驗證記號。以您的叢集端點取代 *insert-dsql-cluster-endpoint*。

```
using Amazon;
using Amazon.DSQL.Util;

var yourClusterEndpoint = "insert-dsql-cluster-endpoint";

// Use `DSQLAuthTokenGenerator.GenerateDbConnectAuthToken` if you are _not_ logging in as `admin` user
var token = DSQLAuthTokenGenerator.GenerateDbConnectAdminAuthToken(RegionEndpoint.USEast1, yourClusterEndpoint);

Console.WriteLine(token);
```

------
#### [ Go ]

**提示**  
AWS 建議使用 [使用 Go 連接器連線至 Aurora DSQL 叢集](SECTION_program-with-go-pgx-connector.md)，其會自動處理字符產生。

SDK AWS for Go v2 提供在[https://github.com/aws/aws-sdk-go-v2/tree/main/feature/dsql/auth](https://github.com/aws/aws-sdk-go-v2/tree/main/feature/dsql/auth)套件中產生身分驗證字符的內建方法。
+ 如果您要與 `admin`角色連線，請使用 `auth.GenerateDBConnectAdminAuthToken`。
+ 如果您要與自訂資料庫角色連線，請使用 `auth.GenerateDbConnectAuthToken`。

```
package main

import (
	"context"
	"fmt"

	"github.com/aws/aws-sdk-go-v2/config"
	"github.com/aws/aws-sdk-go-v2/feature/dsql/auth"
)

func main() {
	ctx := context.Background()

	cfg, err := config.LoadDefaultConfig(ctx, config.WithRegion("region"))
	if err != nil {
		panic(err)
	}

	// Use auth.GenerateDbConnectAuthToken for non-admin users
	token, err := auth.GenerateDBConnectAdminAuthToken(ctx, "yourClusterEndpoint", "region", cfg.Credentials)
	if err != nil {
		panic(err)
	}

	fmt.Println(token)
}
```

------