Amazon Aurora DSQL での認証トークンの生成 - Amazon Aurora DSQL

Amazon Aurora DSQL での認証トークンの生成

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

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

トークンの生成を開始するには、IAM ポリシー作成し、Aurora DSQL でクラスターを作成します。次に、AWS コンソール、AWS CLI、または AWS SDK を使用してトークンを生成します。

少なくとも、接続に使用するデータベースロールに応じて、IAM を使用したクラスターへの接続 にリストされている IAM アクセス許可が必要です。

AWS コンソールを使用して Aurora DSQL で認証トークンを生成する

Aurora DSQL は、パスワードではなくトークンを使用してユーザーを認証します。コンソールからトークンを生成できます。

認証トークンを生成するには
  1. AWS Management Consoleにサインインし、https://console.aws.amazon.com/dsql で Aurora DSQL コンソールを開きます。

  2. 認証トークンを生成するクラスターのクラスター ID を選択します。クラスターをまだ作成していない場合は、「ステップ 1: Aurora DSQL 単一リージョンクラスターを作成する」または「ステップ 4: マルチリージョンクラスターを作成する」の手順に従います。

  3. [接続] を選択し、[トークンを取得] を選択します。

  4. admin として接続するか、カスタムデータベースロールを使用して接続するかを選択します。

  5. 生成された認証トークンをコピーし、「SQL クライアントを使用した Aurora DSQL へのアクセス」で使用します。

Aurora DSQL のカスタムデータベースロールと IAM の詳細については、「Aurora DSQL の認証および認可」を参照してください。

AWS CloudShell を使用して Aurora DSQL で認証トークンを生成する

AWS CloudShell を使用して認証トークンを生成する前に、以下を行うことを確認してください。

AWS CloudShell を使用して認証トークンを生成するには
  1. AWS Management Consoleにサインインし、https://console.aws.amazon.com/dsql で Aurora DSQL コンソールを開きます。

  2. AWS コンソールの左下で、AWS CloudShell を選択します。

  3. AWS CLI をインストールするには、「AWS CLI の最新バージョンのインストールまたは更新」の手順に従います。

    sudo ./aws/install --update
  4. 次のコマンドを実行して、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 ポリシーで、アクセス拒否または操作が許可されていないことを示すエラーをトラブルシューティングする方法を教えてください」を参照してください。

  5. 次のコマンドを使用し、psql を使用してクラスターへの接続を開始します。

    PGSSLMODE=require \ psql --dbname postgres \ --username admin \ --host cluster_endpoint
  6. パスワードを指定するプロンプトが表示されます。生成したトークンをコピーし、追加のスペースや文字が含まれていないことを確認します。psql から次のプロンプトに貼り付けます。

    Password for user admin:
  7. [Enter] キーを押します。PostgreSQL プロンプトが表示されます。

    postgres=>

    アクセス拒否エラーが発生した場合は、IAM ID に 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 – クラスターのエンドポイント。これは、例 01abc2ldefg3hijklmnopqurstu.dsql.us-east-1.on.aws のように、your_cluster_identifier.dsql.region.on.aws 形式に従います。

  • regionus-east-2us-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 でトークンを生成する

クラスターが ACTIVE ステータスの場合、クラスターの認証トークンを生成できます。SDK の例では、次の属性を使用して、admin ロールの認証トークンを生成します。

  • your_cluster_endpoint (または yourClusterEndpoint) – Aurora DSQL クラスターのエンドポイント。命名形式は、例 01abc2ldefg3hijklmnopqurstu.dsql.us-east-1.on.aws のように your_cluster_identifier.dsql.region.on.aws です。

  • region (または RegionEndpoint) – us-east-2us-east-1 など、クラスターが配置されている AWS リージョン。

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
注記

公式の SDK for .NET には、Aurora DSQL の認証トークンを生成するための組み込み API コールは含まれていません。代わりに、ユーティリティクラスの 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 では、署名付きトークンを生成するための組み込みメソッドは提供されません。次のコード例に示すように、署名付きリクエストを手動で作成する必要があります。

次のコード例では、PostgreSQL ユーザーに基づいて action を指定します。

  • 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 }