

# Amazon Aurora DSQL での認証トークンの生成
<a name="SECTION_authentication-token"></a>

SQL クライアントを使用して Amazon Aurora DSQL に接続するには、パスワードとして使用する認証トークンを生成します。このトークンは、接続の認証にのみ使用されます。接続が確立されると、認証トークンの有効期限が切れても接続は有効です。

AWS コンソール、AWS CLI、または SDK を使用して認証トークンを作成すると、トークンはデフォルトで 15 分で自動的に期限切れになります。最大継続時間は 604,800 秒 (1 週間) です。クライアントから Aurora DSQL に再度接続するには、有効期限が切れていない場合は同じ認証トークンを使用するか、新しいトークンを生成できます。

トークンの生成を開始するには、[IAM ポリシー作成](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_create-console.html)し、[Aurora DSQL でクラスターを作成](https://docs.aws.amazon.com/aurora-dsql/latest/userguide/getting-started.html#getting-started-quickstart)します。次に、AWS コンソール、AWS CLI、または AWS SDK を使用してトークンを生成します。

少なくとも、接続に使用するデータベースロールに応じて、[IAM を使用したクラスターへの接続](authentication-authorization.md#authentication-authorization-iam-role-connect) にリストされている IAM アクセス許可が必要です。

**Topics**
+ [AWS コンソールを使用して Aurora DSQL で認証トークンを生成する](#authentication-token-console)
+ [AWS CloudShell を使用して Aurora DSQL で認証トークンを生成する](#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 マネジメントコンソールにサインインし、[https://console.aws.amazon.com/dsql](https://console.aws.amazon.com/dsql) で Aurora 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)」を参照してください。

## AWS CloudShell を使用して Aurora DSQL で認証トークンを生成する
<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 マネジメントコンソールにサインインし、[https://console.aws.amazon.com/dsql](https://console.aws.amazon.com/dsql) で Aurora 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 ID に `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* – クラスターのエンドポイント。これは、例 `01abc2ldefg3hijklmnopqurstu.dsql.us-east-1.on.aws` のように、`your_cluster_identifier.dsql.region.on.aws` 形式に従います。
+ *region* – `us-east-2` や `us-east-1` などの AWS リージョン。

次の例では、トークンの有効期限を 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 クラスターのエンドポイント。命名形式は、例 `01abc2ldefg3hijklmnopqurstu.dsql.us-east-1.on.aws` のように `your_cluster_identifier.dsql.region.on.aws` です。
+ *region* (または *RegionEndpoint*) – `us-east-2` や `us-east-1` など、クラスターが配置されている AWS リージョン。

------
#### [ Python SDK ]

**ヒント**  
AWS では、トークンの生成を自動的に処理する [Python 用 Aurora DSQL コネクタコネクタについてAurora DSQL 認証とは機能クイックスタートガイド要件インストールpsycopg、psycopg2 または asyncpg を個別にインストールする基本的な使用法psycopgpsycopg2asyncpgjust host の使用psycopgpsycopg2asyncpgクラスター ID のみを使用psycopgpsycopg2asyncpgpsycopgpsycopg2asyncpg接続文字列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) を使用することをお勧めします。

**注記**  
公式の SDK for .NET には、Aurora DSQL の認証トークンを生成するための組み込み API コールは含まれていません。代わりに、ユーティリティクラスの `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) を使用することをお勧めします。

AWS SDK 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)
}
```

------