Amazon RDS のプロキシの作成 - Amazon Relational Database Service

Amazon RDS のプロキシの作成

プロキシは、RDS for MariaDB、RDS for Microsoft SQL サーバー、RDS for MySQL、RDS for PostgreSQL DB の各インスタンスに関連付けることができます。

プロキシを作成するには
  1. AWS Management Console にサインインし、Amazon RDS コンソール (https://console.aws.amazon.com/rds/) を開きます。

  2. ナビゲーションペインで、[プロキシ] を選択します。

  3. [Create proxy (プロキシの作成)] を選択します。

  4. プロキシについて次の設定を行います。

    設定 説明
    エンジンファミリー データベースとの間で送受信されるネットワークトラフィックを解釈するときに、プロキシが認識するデータベースネットワークプロトコル。
    注記

    RDS for PostgreSQL を使用するには、postgres データベースを必ずインスタンス内に保持してください。「削除された postgres データベースのトラブルシューティング」を参照してください。

    プロキシ識別子 AWS アカウント ID と現在の AWS リージョン内で一意の名前。
    アイドルクライアントの接続タイムアウト

    プロキシは、設定された期間アイドル状態のままである場合、クライアント接続を閉じます。デフォルトでは 1,800 秒 (30 分) です。接続がアイドル状態であるとは、前のリクエストの完了後、新しいリクエストが指定時間内にアプリケーションから送信されない場合のことです。プロキシは、基となるデータベース接続を開いたままにして接続プールに返すため、その接続を新しいクライアント接続に利用できます。

    古い接続を事前に削除するには、アイドルクライアントの接続タイムアウトを短くします。ワークロード急増時の接続コストを最小限に抑えるには、タイムアウトを長くします。

    データベース このプロキシを介してアクセスする RDS DB インスタンス。このリストには、互換性のあるデータベースエンジン、エンジンバージョン、および他の設定を持つ DB インスタンスとクラスターのみが含まれます。リストが空の場合は、RDS Proxy と互換性のある新しい DB インスタンスまたはクラスターを作成します。これを行うには、「Amazon RDS DB インスタンスの作成」の手順に従います。次に、プロキシの作成をもう一度試します。
    接続プールの最大接続数 RDS Proxy が使用できる max_connections 制限の割合を定義する 1~100 の値。この DB インスタンスまたはクラスターで 1 つのプロキシのみを使用する場合は、この値を 100 に設定します。RDS Proxy がこの設定を使用する方法の詳細については、「MaxConnectionsPercent」を参照してください。
    セッション固定フィルタ

    検出された特定のセッション状態が RDS Proxy によって固定されるのを防ぎます。これにより、接続を多重化するためのデフォルトの安全対策がバイパスされます。現在、PostgreSQL はこの設定をサポートしておらず、使用可能なオプションは EXCLUDE_VARIABLE_SETS のみです。これを有効にすると、ある接続のセッション変数が他の接続に影響を与える可能性があるため、クエリが現在のトランザクションの外部で設定されたセッション変数に依存する場合は、エラーや正確性の問題が発生します。このオプションは、アプリケーションがデータベース接続を安全に共有できることをあらかじめ確認した上で使用してください。

    以下のパターンは安全だと考えられます。

    • 有効なセッション変数値に変更がない SET ステートメント。つまり、セッション変数に変更はありません。

    • セッション変数の値を変更し、同じトランザクションでステートメントを実行します。

    詳細については、「RDS Proxy の固定の回避」を参照してください。

    接続借用タイムアウト プロキシが使用可能なデータベース接続をすべて使用することが予想される場合は、プロキシがタイムアウトエラーを返すまでの待機時間を設定します。指定できる値は最大 5 分です。この設定は、プロキシが接続の最大数に達していて、すべての接続が使用されている場合にのみ適用されます。
    初期化クエリ

    (オプション) 初期化クエリを追加するか、現在のクエリを変更します。新しい各データベース接続を開くときに実行するプロキシ用の 1 つ以上の SQL ステートメントを指定できます。設定は通常、各接続の設定が同一であることを確認するために、SET ステートメントとともに使用されます。追加するクエリが有効であることを確認します。1 つの SET ステートメントに複数の変数を含めるには、カンマ区切りを使用します。例:

    SET variable1=value1, variable2=value2

    複数のステートメントの場合は、セミコロンをセパレータとして使用します。

    重要

    初期化クエリは、ターゲットグループ設定の一部としてアクセスできるため、認証や暗号化方法によって保護されません。プロキシターゲットグループ設定を表示または管理するアクセス権を持つユーザーは、初期化クエリを表示できます。このオプションには、パスワードや有効期間の長い暗号化キーなどの機密データを追加しないでください。

    AWS Identity and Access Management (IAM) ロール

    Secrets Manager シークレットにアクセスする権限を持つ IAM ロール。シークレットは、プロキシが使用できるデータベースユーザーアカウントの認証情報を表します。または、AWS Management Consoleを使用して新しい IAM ロールを作成することもできます。

    Secrets Manager のシークレット プロキシが RDS DB インスタンスにアクセスできるようにするデータベースユーザー認証情報を含む Secrets Manager シークレットを少なくとも 1 つ選択します。
    クライアント認証タイプ プロキシがクライアントからの接続に使用する認証のタイプ。選択した内容は、このプロキシに関連付けるすべての Secrets Manager シークレットに適用されます。シークレットごとに異なるクライアント認証タイプを指定する必要がある場合は、代わりに AWS CLI または API を使用してプロキシを作成します。
    IAM 認証 プロキシへの接続に対して IAM 認証を要求するか、許可するか、拒否するか。許可オプションは、RDS for SQL Server のプロキシに限り有効です。選択した内容は、このプロキシに関連付けるすべての Secrets Manager シークレットに適用されます。シークレットごとに異なる IAM 認証を指定する必要がある場合は、代わりに AWS CLI または API を使用してプロキシを作成します。
    Transport Layer Security が必要

    すべてのクライアント接続に TLS/SSL を適用します。クライアント接続が暗号化されてるかどうかに関係なく、プロキシは基となるデータベースへの接続に同じ暗号化設定を使用します。

    サブネット

    このフィールドには、VPC に関連付けられたすべてのサブネットがあらかじめ入力されています。プロキシに不要なサブネットは削除できますが、少なくとも 2 つのサブネットを残しておく必要があります。

    VPC セキュリティグループ

    既存の VPC セキュリティグループを選択するか、AWS Management Consoleから新しい VPC セキュリティグループを作成します。アプリケーションがプロキシにアクセスできるようにするインバウンドルールと、データベースターゲットからのトラフィックを許可するアウトバウンドルールを設定します。

    注記

    セキュリティグループは、プロキシからデータベースへの接続を許可する必要があります。セキュリティグループは、アプリケーションからプロキシへのイングレスとプロキシからデータベースへのエグレスの両方で機能します。たとえば、データベースとプロキシの両方に同じセキュリティグループを使用する場合は、そのセキュリティグループ内のリソースが相互に通信できることを確認してください。

    共有 VPC を使用する際には、VPC のデフォルトのセキュリティグループや、別のアカウントに関連付けられたセキュリティグループを使用することは避けてください。代わりに、自分のアカウントに属しているセキュリティグループを選択します。存在しない場合は、作成してください。詳細については、「共有 VPC の操作」を参照してください。

    RDS は、高可用性を確保するために複数のアベイラビリティーゾーンにプロキシをデプロイします。クロス AZ 通信を有効にするには、プロキシサブネットのネットワークアクセスコントロールリスト (ACL) で、エンジンポートでのエグレスとすべてのポートでのイングレスを許可する必要があります。ネットワーク ACL の詳細については、「ネットワーク ACL を使用してサブネットへのトラフィックを制御する」を参照してください。プロキシとターゲットのネットワーク ACL が同じである場合は、ソースを VPC CIDR に設定した、TCP プロトコルイングレスルールを追加する必要があります。また、[送信先] を VPC CIDR に設定して、エンジンポート固有の TCP プロトコル Egress ルールも追加する必要があります。

    拡張ログ記録をアクティブ化

    プロキシの互換性やパフォーマンスの問題のトラブルシューティングを行うには、この設定を有効にします。有効にすると、RDS Proxy は、SQL の動作やプロキシ接続のパフォーマンスとスケーラビリティをデバッグするのに役立つ詳細なパフォーマンス情報をログに記録します。

    この設定はデバッグの目的でのみ有効にし、ログ内の機密情報を保護するための適切なセキュリティ対策が講じられていることを確認してください。オーバーヘッドを最小限に抑えるため、この設定は有効にしてから 24 時間後に自動的に無効になります。これは、特定の問題のトラブルシューティングを行うために一時的に使用してください。

  5. [Create proxy (プロキシの作成)] を選択します。

AWS CLI を使用してプロキシを作成するには、以下の必須パラメータを指定して create-db-proxy コマンドを呼び出します。

  • --db-proxy-name

  • --engine-family

  • --role-arn

  • --auth

  • --vpc-subnet-ids

--engine-family 値では、大文字と小文字が区別されます。

Linux、macOS、Unix の場合:

aws rds create-db-proxy \ --db-proxy-name proxy_name \ --engine-family { MYSQL | POSTGRESQL | SQLSERVER } \ --auth ProxyAuthenticationConfig_JSON_string \ --role-arn iam_role \ --vpc-subnet-ids space_separated_list \ [--vpc-security-group-ids space_separated_list] \ [--require-tls | --no-require-tls] \ [--idle-client-timeout value] \ [--debug-logging | --no-debug-logging] \ [--tags comma_separated_list]

Windows の場合:

aws rds create-db-proxy ^ --db-proxy-name proxy_name ^ --engine-family { MYSQL | POSTGRESQL | SQLSERVER } ^ --auth ProxyAuthenticationConfig_JSON_string ^ --role-arn iam_role ^ --vpc-subnet-ids space_separated_list ^ [--vpc-security-group-ids space_separated_list] ^ [--require-tls | --no-require-tls] ^ [--idle-client-timeout value] ^ [--debug-logging | --no-debug-logging] ^ [--tags comma_separated_list]

以下は、--auth オプションの JSON 値の例です。この例では、各シークレットに異なるクライアント認証タイプを適用します。

[ { "Description": "proxy description 1", "AuthScheme": "SECRETS", "SecretArn": "arn:aws:secretsmanager:us-west-2:123456789123:secret/1234abcd-12ab-34cd-56ef-1234567890ab", "IAMAuth": "DISABLED", "ClientPasswordAuthType": "POSTGRES_SCRAM_SHA_256" }, { "Description": "proxy description 2", "AuthScheme": "SECRETS", "SecretArn": "arn:aws:secretsmanager:us-west-2:111122223333:secret/1234abcd-12ab-34cd-56ef-1234567890cd", "IAMAuth": "DISABLED", "ClientPasswordAuthType": "POSTGRES_MD5" }, { "Description": "proxy description 3", "AuthScheme": "SECRETS", "SecretArn": "arn:aws:secretsmanager:us-west-2:111122221111:secret/1234abcd-12ab-34cd-56ef-1234567890ef", "IAMAuth": "REQUIRED" } ]
ヒント

--vpc-subnet-ids パラメータに使用するサブネット ID がまだわからない場合は、「RDS Proxy のネットワーク前提条件の設定」を使用して、ID を検索する方法の例を参照してください。

注記

セキュリティグループは、プロキシの接続先のデータベースへのアクセスを許可する必要があります。同じセキュリティグループが、アプリケーションからプロキシへのイングレスと、プロキシからデータベースへのエグレスに使用されます。例えば、データベースとプロキシに同じセキュリティグループを使用するとします。この場合は必ず、そのセキュリティグループ内のリソースが同じセキュリティグループ内の他のリソースと通信できるように指定してください。

共有 VPC を使用する場合、VPC のデフォルトのセキュリティグループや、別のアカウントに属しているセキュリティグループを使用することはできません。自分のアカウントに属しているセキュリティグループを選択します。存在しない場合は、作成します。この制限事項の詳細については、共有 VPC の操作を参照してください。

プロキシに適切な関連付けを作成するには、register-db-proxy-targets コマンドも使用します。ターゲットグループ名 default を指定します。RDS Proxy は、各プロキシを作成するときに、この名前のターゲットグループを自動的に作成します。

aws rds register-db-proxy-targets --db-proxy-name value [--target-group-name target_group_name] [--db-instance-identifiers space_separated_list] # rds db instances, or [--db-cluster-identifiers cluster_id] # rds db cluster (all instances)

RDS Proxy を作成するには、Amazon RDS API オペレーション CreateDBProxy を呼び出します。AuthConfig データ構造でパラメータを渡します。

RDS Proxy は、各プロキシを作成するときに、default という名前のターゲットグループを自動的に作成します。RegisterDBProxyTargets 関数を呼び出して、このターゲットグループに RDS DB インスタンスを関連付けます。