Amazon Aurora および AWS Secrets Manager によるパスワード管理 - Amazon Aurora

Amazon Aurora および AWS Secrets Manager によるパスワード管理

Amazon Aurora は Secrets Manager と統合して、DB クラスターのマスターユーザーパスワードを管理します。

リージョンとバージョンの可用性

機能の可用性とサポートは、各データベースエンジンの特定のバージョンと AWS リージョン によって異なります。Secrets Manager と Amazon Aurora の統合によるバージョンとリージョンの可用性の詳細については、「Secrets Manager 統合でサポートされているリージョンと Aurora DB エンジン」を参照してください。

Secrets Manager と Amazon Aurora の統合に関する制限事項

Secrets Manager によるマスターユーザーパスワードの管理は、以下の機能ではサポートされていません。

  • Amazon RDS ブルー/グリーンデプロイ

  • Aurora Global Database の一部である DB クラスター。

  • Aurora Serverless v1 DB クラスター

  • Aurora MySQL クロスリージョンリードレプリカ

AWS Secrets Manager を使用したマスターユーザーパスワード管理の概要

AWS Secrets Manager を使用すると、コード内のハードコードされた認証情報 (データベースパスワードを含む) を Secrets Manager への API コールで置き換えて、プログラムでシークレットを取得することができます。Secrets Manager の詳細については、AWS Secrets Manager ユーザーガイドを参照してください。

データベースシークレットを Secrets Manager に保存すると、AWS アカウント に料金が発生します。料金については、「AWS Secrets Manager 料金表」を参照してください。

次のいずれかのオペレーションを実行するときに、 Aurora が Amazon Amazon Aurora DB クラスターのマスターユーザーパスワードを Secrets Manager で管理するように指定できます。

  • DB クラスターを作成する

  • DB クラスターを変更する

  • Amazon S3 から DB クラスターを復元する (Aurora MySQL のみ)

Aurora が Secrets Manager でマスターユーザーパスワードを管理するように指定すると、 Aurora はパスワードを生成して Secrets Manager に保存します。シークレットを直接操作して、マスターユーザーの認証情報を取得できます。また、カスタマーマネージドキーを指定してシークレットを暗号化したり、Secrets Manager が提供する KMS キーを使用したりすることもできます。

Aurora はシークレットの設定を管理し、デフォルトで 7 日ごとにシークレットをローテーションします。ローテーションスケジュールなど、一部の設定を変更できます。Secrets Manager でシークレットを管理する DB クラスターを削除すると、シークレットとそれに関連するメタデータも削除されます。

シークレット内の認証情報を使用して DB クラスターに接続するには、Secrets Manager からシークレットを取得します。詳細については、AWS Secrets Manager ユーザーガイドの「AWS Secrets Manager からのシークレットの取得AWS Secrets Manager シークレットの認証情報を使用して SQL データベースに接続する」を参照してください。

Secrets Manager でマスターユーザーパスワードを管理する利点

Secrets Manager で Aurora マスターユーザーのパスワードを管理することには、次の利点があります。

  • Aurora はデータベース認証情報を自動的に生成します。

  • Aurora はデータベース認証情報を AWS Secrets Manager に自動的に保存および管理します。

  • Aurora は、アプリケーションを変更することなく、データベースの認証情報を定期的にローテーションします。

  • Secrets Manager は、データベースの認証情報を人間のアクセスやプレーンテキスト表示から保護します。

  • Secrets Manager では、データベース接続用のシークレット内のデータベース認証情報を取得できます。

  • Secrets Manager では、IAM を使用してシークレット内のデータベース認証情報へのアクセスをきめ細かく制御できます。

  • 必要に応じて、さまざまな KMS キーを使用して、データベースの暗号化を資格情報の暗号化から分離できます。

  • データベース認証情報の手動管理やローテーションが不要になります。

  • AWS CloudTrail と Amazon CloudWatch を使用すると、データベースの認証情報を簡単にモニタリングできます。

Secrets Manager のメリットの詳細については、「AWS Secrets Manager ユーザーガイド」を参照してください。

Secrets Manager の統合に必要なアクセス許可

Secrets Manager の統合に関連するオペレーションを実行するには、ユーザーが必要なアクセス許可を持っている必要があります。必要な特定のリソースの API オペレーションを実行するためのアクセス許可を付与する IAM ポリシーを作成できます。その後、これらのポリシーを、それらのアクセス許可を必要とする IAM アクセス許可セットまたはロールにアタッチできます。詳細については、「Amazon Aurora での Identity and Access Management」を参照してください。

作成、変更、または復元オペレーションの場合、 Aurora が Secrets Manager でマスターユーザーパスワードを管理するように指定するユーザーには、次のオペレーションを実行するアクセス許可が必要です。

  • kms:DescribeKey

  • secretsmanager:CreateSecret

  • secretsmanager:TagResource

作成、変更、または復元オペレーションの場合、Secrets Manager でシークレットを暗号化するカスタマーマネージドキーを指定するユーザーには、次のオペレーションを実行するアクセス許可が必要です。

  • kms:Decrypt

  • kms:GenerateDataKey

  • kms:CreateGrant

変更オペレーションの場合、Secrets Manager でマスターユーザーパスワードをローテーションするユーザーには、次のオペレーションを実行するアクセス許可が必要です。

  • secretsmanager:RotateSecret

Aurora によるマスターユーザーパスワードの管理の強化AWS Secrets Manager

IAM 条件キーを使用して、AWS Secrets Manager のマスターユーザーパスワードの Aurora 管理を実施できます。次のポリシーでは、マスターユーザーパスワードが Aurora で Secrets Manager で管理されていない限り、ユーザーが DB インスタンスまたは DB クラスターを作成または復元することはできません。

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Deny", "Action": ["rds:CreateDBInstance", "rds:CreateDBCluster", "rds:RestoreDBInstanceFromS3", "rds:RestoreDBClusterFromS3"], "Resource": "*", "Condition": { "Bool": { "rds:ManageMasterUserPassword": false } } } ] }
注記

このポリシーは、作成時に AWS Secrets Manager でのパスワード管理を強制します。ただし、クラスターを変更することで、Secrets Manager の統合を無効にして、マスターパスワードを手動で設定することができます。

これを防ぐには、ポリシーのアクションブロックに rds:ModifyDBInstancerds:ModifyDBCluster を含めます。これにより、Secrets Manager 統合が有効になっていない既存のクラスターには、以降の変更ができなくなることに注意してください。

IAM ポリシーでの条件キーの使用の詳細については、「Aurora のポリシー条件キー」および「ポリシー例: 条件キーの使用」を参照してください。

Secrets Manager による DB クラスターのマスターユーザーパスワードの管理

以下のアクションを実行すると、Secrets Manager でマスターユーザーパスワードの Aurora 管理を設定できます。

これらのアクションを実行するには、RDS コンソール、AWS CLI、または RDS API を使用できます。

RDS コンソールを使用して DB クラスターを作成または変更する手順に従います。

RDS コンソールを使用してこれらのオペレーションのいずれかを実行する場合、マスターユーザーパスワードが Aurora で Secrets Manager で管理されるように指定できます。これを行うには、DB クラスターを作成または復元するときに、[Credential settings] (認証情報設定) で [Manage master credentials in AWS Secrets Manager] ( でマスター認証情報を管理する) を選択します。DB クラスターを変更する場合は、[Settings] (設定) で [Manage master credentials in AWS Secrets Manager] ( でマスター認証情報を管理する) を選択します。

以下の図は、DB インスタンスを作成または復元するときの AWS Secrets Managerでマスター認証情報を管理する設定の例です。

AWS Secrets Manager でマスター認証情報を管理する

このオプションを選択すると、 Aurora はマスターユーザーパスワードを生成し、そのライフサイクル全体を通じて Secrets Manager で管理します。

選択した AWS Secrets Manager マスター認証情報を管理する

シークレットは、Secrets Manager が提供する KMS キーを使用して暗号化するか、自分で作成したカスタマーマネージドキーを使用して暗号化するかを選択できます。 Aurora が DB クラスターのデータベース認証情報を管理した後は、シークレットの暗号化に使用される KMS キーを変更することはできません。

要件に合わせて他の設定を選択できます。

各 DB クラスターの作成時に使用できる設定の詳細については、「Aurora DB クラスターの設定」を参照してください。DB クラスターの変更時に利用できる設定の詳細については、「Amazon Aurora の設定」を参照してください。

Aurora が Secrets Manager のマスターユーザーパスワードを管理するように指定するには、以下のいずれかの --manage-master-user-password コマンドでオプションを指定します。

これらのコマンドで --manage-master-user-password オプションを指定すると、 Aurora はマスターユーザーパスワードを生成し、そのライフサイクル全体を通じて Secrets Manager で管理します。

シークレットを暗号化するには、カスタマーマネージドキーを指定するか、Secrets Manager によって提供されるデフォルトの KMS キーを使用できます。--master-user-secret-kms-key-id オプションを使用して、カスタマーマネージドキーを指定します。AWS KMS キー識別子は、KMS キーのキー ARN、キー ID、エイリアス ARN、またはエイリアス名です。別の AWS アカウント で KMS キーを使用するには、キー ARN またはエイリアス ARN を指定します。 Aurora が DB クラスターのデータベース認証情報を管理した後は、シークレットの暗号化に使用される KMS キーを変更することはできません。

要件に合わせて他の設定を選択できます。

各 DB クラスターの作成時に使用できる設定の詳細については、「Aurora DB クラスターの設定」を参照してください。DB クラスターの変更時に利用できる設定の詳細については、「Amazon Aurora の設定」を参照してください。

この例では、 DB クラスターを作成し、 Aurora が Secrets Manager でパスワードを管理するように指定しています。シークレットは、Secrets Manager によって提供される KMS キーを使用して暗号化されます。

Linux、macOS、Unix の場合:

aws rds create-db-cluster \ --db-cluster-identifier sample-cluster \ --engine aurora-mysql \ --engine-version 8.0 \ --master-username admin \ --manage-master-user-password

Windows の場合:

aws rds create-db-cluster ^ --db-cluster-identifier sample-cluster ^ --engine aurora-mysql ^ --engine-version 8.0 ^ --master-username admin ^ --manage-master-user-password

Aurora が Secrets Manager のマスターユーザーパスワードを管理するように指定するには、次のいずれかのオペレーションで ManageMasterUserPassword パラメータを true に設定します。

これらのオペレーションのいずれかで ManageMasterUserPassword パラメータを true に設定すると、 Aurora はマスターユーザーパスワードを生成し、そのライフサイクル全体を通じて Secrets Manager で管理します。

シークレットを暗号化するには、カスタマーマネージドキーを指定するか、Secrets Manager によって提供されるデフォルトの KMS キーを使用できます。MasterUserSecretKmsKeyId パラメータを使用して、カスタマーマネージドキーを指定します。AWS KMS キー識別子は、KMS キーのキー ARN、キー ID、エイリアス ARN、またはエイリアス名です。別の AWS アカウント で KMS キーを使用するには、キー ARN またはエイリアス ARN を指定します。 Aurora が DB クラスターのデータベース認証情報を管理した後は、シークレットの暗号化に使用される KMS キーを変更することはできません。

DB クラスターのマスターユーザーパスワードシークレットのローテーション

Aurora がマスターユーザーパスワードシークレットをローテーションすると、Secrets Manager は既存のシークレットの新しいシークレットバージョンを生成します。新しいバージョンのシークレットには、新しいマスターユーザーパスワードが含まれています。Aurora は、 DB クラスターのマスターユーザーパスワードを、新しいシークレットバージョンのパスワードと一致するように変更します。

スケジュールされたローテーションを待つ代わりに、シークレットをすぐにローテーションできます。Secrets Manager でマスターユーザーパスワードシークレットをローテーションするには、 DB クラスターを変更します。DB クラスターの変更については、「Amazon Aurora DB クラスターの変更」を参照してください。

RDS コンソール、AWS CLI、または RDS API を使用して、マスターユーザーのパスワードシークレットをすぐに更新できます。新しいパスワードは常に 28 文字で、少なくとも 1 つの大文字と小文字、1 つの数字、1 つの句読点が含まれます。

RDS コンソールを使用してマスターユーザーパスワードシークレットをローテーションするには、 DB クラスターを変更し、[Settings] (設定) で [Rotate secret immediately] (シークレットを直ちにローテーションする) を選択します。

マスターユーザーパスワードシークレットをすぐにローテーションする

RDS コンソールを使用して、 および コンソール、CLI、API を使用した DB クラスターの変更 の DB クラスターを変更する手順に従います。確認ページで [Apply immediately] (すぐに適用) を選択する必要があります。

AWS CLI を使用してマスターユーザーパスワードシークレットをローテーションするには、modify-db-cluster コマンドを使用して --rotate-master-user-password オプションを指定します。マスターパスワードをローテーションするときは、--apply-immediately オプションを指定する必要があります。

この例では、マスターユーザーパスワードシークレットをローテーションします。

Linux、macOS、Unix の場合:

aws rds modify-db-cluster \ --db-cluster-identifier mydbcluster \ --rotate-master-user-password \ --apply-immediately

Windows の場合:

aws rds modify-db-cluster ^ --db-cluster-identifier mydbcluster ^ --rotate-master-user-password ^ --apply-immediately

ModifyDBCluster オペレーションを使用して RotateMasterUserPassword パラメータを true に設定すると、マスターユーザーパスワードシークレットをローテーションできます。マスターパスワードを変更するときは、ApplyImmediately パラメータを true に設定する必要があります。

DB クラスターのシークレットに関する詳細の表示

コンソール (https://console.aws.amazon.com/secretsmanager/) または AWS CLI (get-secret-value Secrets Manager コマンド) を使用して自分のシークレットを取得できます。

Aurora によって管理されているシークレットの Amazon リソースネーム (ARN) は、RDS コンソール、AWS CLI、または RDS API の Secrets Manager で確認できます。

Aurora によって管理されているシークレットの詳細を Secrets Manager で表示するには
  1. AWS Management Console にサインインし、Amazon RDS コンソール (https://console.aws.amazon.com/rds/) を開きます。

  2. ナビゲーションペインで、データベースを選択します。

  3. 詳細を表示する DB クラスターの名前を選択します。

  4. [設定] タブを選択します。

    [Master Credentials ARN] (マスター認証情報の ARN) では、シークレット ARN を表示できます。

    Aurora が管理するシークレットの詳細を Secrets Manager で表示する

    [Manage in Secrets Manager] (Secrets Managerで管理) で管理リンクをクリックすると、Secrets Manager コンソールでシークレットを表示および管理できます。

RDS AWS CLI describe-db-cluster コマンドを使用すると、Secrets Manager で Aurora によって管理されているシークレットに関する次の情報を検索できます。

  • SecretArn – シークレットの ARN

  • SecretStatus – シークレットのステータス

    設定可能なステータス値は以下のとおりです。

    • creating – シークレットは作成中です。

    • active – シークレットは通常の使用とローテーションで利用可能です。

    • rotating – シークレットはローテーション中です。

    • impaired - シークレットはデータベースの認証情報へのアクセスに使用できますが、ローテーションはできません。例えば、アクセス許可が変更されて RDS がシークレットやシークレットの KMS キーにアクセスできなくなった場合、シークレットがこのステータスになる可能性があります。

      シークレットのステータスがこの場合は、ステータスの原因となった状態を修正できます。ステータスの原因となった条件を修正すると、ステータスは次のローテーションまで impaired のままです。または、DB クラスターを変更してデータベース認証情報の自動管理をオフにしてから、DB クラスターを再度変更してデータベース認証情報の自動管理をオンにすることもできます。DB クラスターを変更するには、modify-db-cluster コマンドの --manage-master-user-password を使用します。

  • KmsKeyId – シークレットの暗号化に使用する KMS キーの ARN。

特定の DB クラスターの出力を表示する --db-cluster-identifier オプションを指定します。この例は、DB クラスターが使用するシークレットの出力を示しています。

aws rds describe-db-clusters --db-cluster-identifier mydbcluster

以下は、シークレットの出力例を示しています。

"MasterUserSecret": { "SecretArn": "arn:aws:secretsmanager:eu-west-1:123456789012:secret:rds!cluster-033d7456-2c96-450d-9d48-f5de3025e51c-xmJRDx", "SecretStatus": "active", "KmsKeyId": "arn:aws:kms:eu-west-1:123456789012:key/0987dcba-09fe-87dc-65ba-ab0987654321" }

シークレット ARN がある場合は、get-secret-value Secrets Manager CLI コマンドを使用してシークレットの詳細を表示できます。

この例は、前のサンプル出力のシークレットの詳細を示しています。

Linux、macOS、Unix の場合:

aws secretsmanager get-secret-value \ --secret-id 'arn:aws:secretsmanager:eu-west-1:123456789012:secret:rds!cluster-033d7456-2c96-450d-9d48-f5de3025e51c-xmJRDx'

Windows の場合:

aws secretsmanager get-secret-value ^ --secret-id 'arn:aws:secretsmanager:eu-west-1:123456789012:secret:rds!cluster-033d7456-2c96-450d-9d48-f5de3025e51c-xmJRDx'

Aurora によって管理されているシークレットの ARN、ステータス、および KMS キーは、DescribeDBClusters RDS オペレーションを使用して Secrets Manager で表示し、DBClusterIdentifier パラメータを DB クラスター識別子に設定できます。シークレットの詳細は、出力に含まれています。

シークレット ARN がある場合は、GetSecretValue Secrets Manager オペレーションを使用してシークレットの詳細を表示できます。