Amazon Aurora のプロキシの作成
Amazon RDS Proxy を使用すると、接続をプールし、データベースフェイルオーバーをより効率的に管理することで、データベースアプリケーションのスケーラビリティ、可用性、セキュリティを向上させることができます。このトピックでは、プロキシを作成する手順を説明します。開始する前に、データベースが IAM アクセス許可や VPC 設定などの必要な前提条件を満たしていることを確認してください。
プロキシは、Aurora MySQL または Aurora PostgreSQL DB クラスターに関連付けることができます。
プロキシを作成するには
-
AWS マネジメントコンソール にサインインし、Amazon RDS コンソール (https://console.aws.amazon.com/rds/
) を開きます。 -
ナビゲーションペインで、[プロキシ] を選択します。
-
[Create proxy (プロキシの作成)] を選択します。
-
プロキシについて次の設定を行います。
設定 説明 エンジンファミリー データベースとの間で送受信されるネットワークトラフィックを解釈するときに、プロキシが認識するデータベースネットワークプロトコル。 注記
Aurora PostgreSQL を使用するには、
postgresデータベースを必ずインスタンス内に保持してください。「削除された postgres データベースのトラブルシューティング」を参照してください。プロキシ識別子 AWS アカウント ID と現在の AWS リージョン内で一意の名前。 アイドルクライアントの接続タイムアウト プロキシは、設定された期間アイドル状態のままである場合、クライアント接続を閉じます。デフォルトでは 1,800 秒 (30 分) です。接続がアイドル状態であるとは、前のリクエストの完了後、新しいリクエストが指定時間内にアプリケーションから送信されない場合のことです。プロキシは、基となるデータベース接続を開いたままにして接続プールに返すため、その接続を新しいクライアント接続に利用できます。
古い接続を事前に削除するには、アイドルクライアントの接続タイムアウトを短くします。ワークロード急増時の接続コストを最小限に抑えるには、タイムアウトを長くします。
データベース このプロキシを介してアクセスする Aurora DB クラスター。このリストには、互換性のあるデータベースエンジン、エンジンバージョン、および他の設定を持つ DB インスタンスとクラスターのみが含まれます。リストが空の場合は、RDS Proxy と互換性のある新しい DB インスタンスまたはクラスターを作成します。これを行うには、「Amazon Aurora 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ステートメントに複数の変数を含めるには、カンマ区切りを使用します。例:SETvariable1=value1,variable2=value2複数のステートメントの場合は、セミコロンをセパレータとして使用します。
重要
初期化クエリは、ターゲットグループ設定の一部としてアクセスできるため、認証や暗号化方法によって保護されません。プロキシターゲットグループ設定を表示または管理するアクセス権を持つユーザーは、初期化クエリを表示できます。このオプションには、パスワードや有効期間の長い暗号化キーなどの機密データを追加しないでください。
AWS Identity and Access Management (IAM) ロール Secrets Manager シークレットにアクセスする権限を持つ IAM ロール。シークレットは、プロキシが使用できるデータベースユーザーアカウントの認証情報を表します。または、AWS マネジメントコンソールを使用して新しい IAM ロールを作成することもできます。
Secrets Manager のシークレット プロキシを使用できるデータベースユーザーアカウントの認証情報を表す Secrets Manager シークレットを作成または選択します。
[デフォルト認証スキーム] が [なし] に設定されている場合、このフィールドは必須です。[デフォルト認証スキーム] が [IAM 認証] に設定されている場合、このフィールドはオプションになり、コンソールでそのようにマークされます。
ドロップダウンから 1 つ以上のシークレットを選択するか、[新しいシークレットを作成する] リンクを使用して、新しいシークレットを作成できます。
クライアント認証タイプ プロキシがクライアントからの接続に使用する認証のタイプ。選択した内容は、このプロキシに関連付けるすべての Secrets Manager シークレットに適用されます。シークレットごとに異なるクライアント認証タイプを指定する必要がある場合は、代わりに AWS CLI または API を使用してプロキシを作成します。このオプションは、クライアント接続が認証にデータベース認証情報を使用する場合にのみ指定します。 IAM 認証 プロキシへの接続の IAM 認証に [必須]または [許可されていません] を指定します。選択した内容は、このプロキシに関連付けるすべての Secrets Manager シークレットに適用されます。シークレットごとに異なる IAM 認証を指定する必要がある場合は、代わりに AWS CLI または API を使用してプロキシを作成します。 デフォルトの認証スキーム プロキシへのクライアント接続およびプロキシから基になるデータベースへの接続にプロキシが使用するデフォルトの認証のタイプを選択します。次のオプションがあります。
[なし] (デフォルト) - プロキシは Secrets Manager シークレットからデータベース認証情報を取得します。
[IAM 認証] - プロキシは IAM 認証を使用してデータベースに接続し、end-to-end IAM 認証を有効にします。
[IAM 認証] を選択すると、ターゲットグループ設定のデータベースに対して IAM データベース認証を有効にするように促す情報アラートが表示されます。
注記
このオプションは、MySQL、PostgreSQL、および MariaDB エンジンファミリーでのみサポートされています。
IAM 認証用のデータベースアカウント このフィールドは、[デフォルト認証スキーム] が [IAM 認証] に設定され、[Identity and Access Management (IAM) ロール] が [IAM ロールを作成] に設定されている場合にのみ表示されます。
IAM 認証で使用するプロキシのデータベースユーザーアカウントに名前を付けます。これは必須のフィールドです。次の方法で複数のアカウントを指定します。
データベースユーザー名を入力してタグとして追加する
特定のデータベースユーザー名を使用する (例:
db_user、jane_doe)複数のユーザーにワイルドカードパターンを使用する (例:
db_test_*)
各アカウントは、X アイコンをクリックして削除できるリムーバブルタグとして表示されます。コンソールはこれらの値を使用して、IAM ロールポリシーに適切な
rds-db:connectアクセス許可を作成します。Transport Layer Security が必要 すべてのクライアント接続に TLS/SSL を適用します。クライアント接続が暗号化されてるかどうかに関係なく、プロキシは基となるデータベースへの接続に同じ暗号化設定を使用します。
ターゲット接続ネットワークタイプ プロキシがターゲットデータベースへの接続に使用する IP バージョン。次のオプションから選択します。
-
IPv4 – プロキシは IPv4 アドレスを使用してデータベースに接続します。
-
IPv6 – プロキシは IPv6 アドレスを使用してデータベースに接続します。
デフォルトは IPv4 です。IPv6 を使用するには、データベースがデュアルスタックモードをサポートしている必要があります。デュアルスタックモードは、ターゲット接続では使用できません。
エンドポイントネットワークタイプ クライアントがプロキシへの接続に使用するプロキシエンドポイントの IP バージョン。次のオプションから選択します。
-
IPv4 – プロキシエンドポイントは IPv4 アドレスのみを使用します。
-
IPv6 – プロキシエンドポイントは IPv6 アドレスのみを使用します。
-
デュアルスタック – プロキシエンドポイントは IPv4 アドレスと IPv6 アドレスの両方をサポートします。
デフォルトは IPv4 です。IPv6 またはデュアルスタックを使用するには、選択したネットワークタイプをサポートするように VPC とサブネットを設定する必要があります。
サブネット このフィールドには、VPC に関連付けられたすべてのサブネットがあらかじめ入力されています。プロキシに不要なサブネットは削除できますが、少なくとも 2 つのサブネットを残しておく必要があります。IPv6 またはデュアルスタックのエンドポイントネットワークタイプの場合は、選択したサブネットが選択したネットワークタイプをサポートしていることを確認します。
VPC セキュリティグループ 既存の VPC セキュリティグループを選択するか、AWS マネジメントコンソールから新しい VPC セキュリティグループを作成します。アプリケーションがプロキシにアクセスできるようにするインバウンドルールと、データベースターゲットからのトラフィックを許可するアウトバウンドルールを設定します。
注記
セキュリティグループは、プロキシからデータベースへの接続を許可する必要があります。セキュリティグループは、アプリケーションからプロキシへのイングレスとプロキシからデータベースへのエグレスの両方で機能します。たとえば、データベースとプロキシの両方に同じセキュリティグループを使用する場合は、そのセキュリティグループ内のリソースが相互に通信できることを確認してください。
共有 VPC を使用する際には、VPC のデフォルトのセキュリティグループや、別のアカウントに関連付けられたセキュリティグループを使用することは避けてください。代わりに、自分のアカウントに属しているセキュリティグループを選択します。存在しない場合は、作成してください。詳細については、「共有 VPC の操作」を参照してください。
RDS は、高可用性を確保するために複数のアベイラビリティーゾーンにプロキシをデプロイします。クロス AZ 通信を有効にするには、プロキシサブネットのネットワークアクセスコントロールリスト (ACL) で、エンジンポートでのエグレスとすべてのポートでのイングレスを許可する必要があります。ネットワーク ACL の詳細については、「ネットワーク ACL を使用してサブネットへのトラフィックを制御する」を参照してください。プロキシとターゲットのネットワーク ACL が同じである場合は、ソースを VPC CIDR に設定した、TCP プロトコルイングレスルールを追加する必要があります。また、[送信先] を VPC CIDR に設定して、エンジンポート固有の TCP プロトコル Egress ルールも追加する必要があります。
拡張ログ記録をアクティブ化 プロキシの互換性やパフォーマンスの問題のトラブルシューティングを行うには、この設定を有効にします。有効にすると、RDS Proxy は、SQL の動作やプロキシ接続のパフォーマンスとスケーラビリティをデバッグするのに役立つ詳細なパフォーマンス情報をログに記録します。
この設定はデバッグの目的でのみ有効にし、ログ内の機密情報を保護するための適切なセキュリティ対策が講じられていることを確認してください。オーバーヘッドを最小限に抑えるため、この設定は有効にしてから 24 時間後に自動的に無効になります。これは、特定の問題のトラブルシューティングを行うために一時的に使用してください。
-
-
[Create proxy (プロキシの作成)] を選択します。
AWS CLI を使用してプロキシを作成するには、以下の必須パラメータを指定して create-db-proxy コマンドを呼び出します。
--db-proxy-name--engine-family--role-arn--vpc-subnet-ids
--engine-family 値では、大文字と小文字が区別されます。
例
Linux、macOS、Unix の場合:
aws rds create-db-proxy \ --db-proxy-nameproxy_name\ --engine-family { MYSQL | POSTGRESQL | SQLSERVER } \ --role-arniam_role\ --vpc-subnet-idsspace_separated_list\ [--default-auth-scheme { NONE | IAM_AUTH }] \ [--authProxyAuthenticationConfig_JSON_string] \ [--vpc-security-group-idsspace_separated_list] \ [--require-tls | --no-require-tls] \ [--idle-client-timeoutvalue] \ [--debug-logging | --no-debug-logging] \ [--endpoint-network-type { IPV4 | IPV6 | DUAL }] \ [--target-connection-network-type { IPV4 | IPV6 }] \ [--tagscomma_separated_list]
Windows の場合:
aws rds create-db-proxy ^ --db-proxy-nameproxy_name^ --engine-family { MYSQL | POSTGRESQL | SQLSERVER } ^ --role-arniam_role^ --vpc-subnet-idsspace_separated_list^ [--default-auth-scheme { NONE | IAM_AUTH }] ^ [--authProxyAuthenticationConfig_JSON_string] ^ [--vpc-security-group-idsspace_separated_list] ^ [--require-tls | --no-require-tls] ^ [--idle-client-timeoutvalue] ^ [--debug-logging | --no-debug-logging] ^ [--endpoint-network-type { IPV4 | IPV6 | DUAL }] ^ [--target-connection-network-type { IPV4 | IPV6 }] ^ [--tagscomma_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" } ]
--endpoint-network-type パラメータは、クライアントがプロキシへの接続に使用するプロキシエンドポイントの IP バージョンを指定します。次の値を指定できます。
-
IPV4– プロキシエンドポイントは IPv4 アドレスのみを使用します (デフォルト)。 -
IPV6– プロキシエンドポイントは IPv6 アドレスのみを使用します。 -
DUAL– プロキシエンドポイントは、IPv4 アドレスと IPv6 アドレスの両方をサポートします。
--target-connection-network-type パラメータは、プロキシがターゲットデータベースへの接続に使用する IP バージョンを指定します。次の値を指定できます。
-
IPV4– プロキシは IPv4 アドレス (デフォルト) を使用してデータベースに接続します。 -
IPV6– プロキシは IPv6 アドレスを使用してデータベースに接続します。
IPv6 またはデュアルスタックのエンドポイントネットワークタイプを使用するには、選択したネットワークタイプをサポートするように VPC とサブネットを設定する必要があります。IPv6 ターゲット接続ネットワークタイプを使用するには、データベースがデュアルスタックモードをサポートしている必要があります。
ヒント
--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-namevalue[--target-group-nametarget_group_name] [--db-instance-identifiersspace_separated_list] # rds db instances, or [--db-cluster-identifierscluster_id] # rds db cluster (all instances)
RDS Proxy を作成するには、Amazon RDS API オペレーション CreateDBProxy を呼び出します。AuthConfig データ構造でパラメータを渡します。
RDS Proxy は、各プロキシを作成するときに、default という名前のターゲットグループを自動的に作成します。RegisterDBProxyTargets 関数を呼び出して、このターゲットグループに Aurora DB クラスターを関連付けます。
重要
デフォルトの認証スキームに [IAM 認証] を選択する場合。
-
プロキシが正常に接続する前に、ターゲットデータベースインスタンスまたはクラスターで IAM データベース認証を有効にする必要があります。
-
[IAM ロールを作成] を選択した場合、[IAM 認証用のデータベースアカウント] が必要です。
-
既存の IAM ロールを選択した場合、コンソールはデータベース接続許可でロールを自動的に更新しません。ロールに必要な
rds-db:connectアクセス許可があることを確認します。