シークレットを使用して AWS Database Migration Service エンドポイントにアクセスするには - AWS Database Migration Service

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

シークレットを使用して AWS Database Migration Service エンドポイントにアクセスするには

シークレットは AWS DMS、シークレット認証を通じて、サポートされている AWS DMS ソースまたはターゲットエンドポイントのデータベース接続を認証するためのユーザー認証情報のセットを表すために使用できる暗号化キーです。Oracle Automatic Storage Management (ASM) も使用する Oracle エンドポイントの場合、 は Oracle ASM にアクセスするためのユーザー認証情報を表す追加のシークレット AWS DMS を必要とします。

クラウドおよびオンプレミスのアプリケーション、サービス AWS Secrets Manager、IT リソースにアクセスするための認証情報を安全に作成、保存、取得するためのサービスである を使用して、シークレット認証 AWS DMS に必要なシークレットを作成できます。これは、ユーザーを介さずに認証情報のセキュリティを強化する、暗号化されたシークレット値の定期的な自動ローテーションに対応します。 AWS Secrets Manager また、 でシークレット値のローテーションを有効にすると、シークレットに依存するデータベース移行に影響を与えずに、このシークレット値のローテーションが確実に実行されます。エンドポイント データベース接続を内密に認証するには、エンドポイント設定に含める SecretsManagerSecretId に割り当てる ID または ARN シークレットを作成します。Oracle ASM を Oracle エンドポイントの一部として内密に認証するには、エンドポイント設定にも含める SecretsManagerOracleAsmSecretId に ID または ARN を割り当てるシークレットを作成します。

注記

Amazon RDS Aurora が管理するマスター認証情報は使用できません。これらの認証情報には、接続を確立 AWS DMS する必要があるホストまたはポート情報は含まれません。その代わりに、新しいユーザーとシークレットを作成します。ユーザーとシークレットの作成の詳細については、次の「AWS Management Console を使用してシークレットとシークレットアクセスロールを作成する」を参照してください。

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

AWS DMS は、サポートされているソースエンドポイントとターゲットエンドポイントで、次のオンプレミスデータベースまたは AWSマネージドデータベースのシークレット認証をサポートします。

  • Amazon DocumentDB

  • IBM Db2 LUW

  • Microsoft SQL Server

  • MongoDB

  • MySQL

  • Oracle

  • PostgreSQL

  • Amazon Redshift

  • SAP ASE

これらのデータベースに接続するにはエンドポイント設定の一部として、次のいずれかの値セットを入力できますが、両方を入力することはできません。

  • UserNamePasswordServerNamePort の設定を使用したデータベース接続を認証するクリアテキスト値。Oracle ASM も使用する Oracle エンドポイントの場合は、AsmUserNameAsmPasswordAsmServerName の設定を使用して ASM を認証するために追加のクリアテキスト値を含めます。

  • SecretsManagerSecretIdSecretsManagerAccessRoleArn 設定用の値を使用したシークレット認証。Oracle ASM を使用する Oracle エンドポイントの場合は、SecretsManagerOracleAsmSecretIdSecretsManagerOracleAsmAccessRoleArn 設定用に追加の値を含めます。これらの設定のシークレット値には次のものが含まれます。

    • SecretsManagerSecretId — AWS Secrets Managerでエンドポイントデータベースアクセス用に作成したシークレットの完全な Amazon リソースネーム (ARN)、ARN の一部、またはフレンドリ名。

    • SecretsManagerAccessRoleArn - ユーザーに代わってこのシークレットへのアクセスを提供するために IAM で作成したSecretsManagerSecretIdシークレット AWS DMS アクセスロールの ARN。

    • SecretsManagerOracleAsmSecretId — AWS Secrets Managerで Oracle ASM アクセス用に作成したシークレットの完全な Amazon リソースネーム (ARN)、ARN の一部、またはフレンドリ名。

    • SecretsManagerOracleAsmAccessRoleArn — ユーザーに代わってこの SecretsManagerOracleAsmSecretId シークレットへの AWS DMS アクセスを提供するために IAM に作成したシークレットアクセスロールの ARN。

    注記

    単一のシークレットアクセスロールを使用して、SecretsManagerSecretIdシークレットとシーSecretsManagerOracleAsmSecretIdクレットの両方 AWS DMS へのアクセスを提供することもできます。両方のシークレットに対してこの単一のシークレットアクセスロールを作成する場合は、このアクセスロール用の同じ ARN を SecretsManagerAccessRoleArnSecretsManagerOracleAsmAccessRoleArn の両方に割り当てます。例えば、両方のシークレットに対するシークレット アクセス ロールの ARN が変数 ARN2xsecrets に割り当てられている場合、これらの ARN 設定を次のように設定できます。

    SecretsManagerAccessRoleArn = ARN2xsecrets; SecretsManagerOracleAsmAccessRoleArn = ARN2xsecrets;

    これらの値を作成する詳細については、「AWS Management Console を使用してシークレットとシークレットアクセスロールを作成する」をご参照ください。

エンドポイントに必要なシークレットおよびシークレットアクセスロールエンドポイント設定を作成し指定した後、これらのシークレットの詳細を含む CreateEndpoint または ModifyEndpoint API リクエストを実行するユーザーアカウントの許可を更新します。これらのアカウントのアクセス許可に、シークレットアクセスロールに対する アクセスIAM:GetRole許可とシークレットに対する アクセスSecretsManager:DescribeSecret許可が含まれていることを確認します。 は、アクセスロールとそのシークレットの両方を検証するためにこれらのアクセス許可 AWS DMS を必要とします。

必要なユーザー許可を提供して検証するには
  1. にサインイン AWS Management Console し、 で AWS Identity and Access Management コンソールを開きますhttps://console.aws.amazon.com/iam/

  2. [Users] (ユーザー) を選択し、CreateEndpointModifyEndpoint の API コールを行うために使用する [User ID] (ユーザー ID) を選択します。

  3. [Permissions] (許可) タブで、[{} JSON] を選択します。

  4. ユーザーに次のアクセス許可があることを確認します。

    { "Statement": [{ "Effect": "Allow", "Action": [ "iam:GetRole", "iam:PassRole" ], "Resource": "SECRET_ACCESS_ROLE_ARN" }, { "Effect": "Allow", "Action": "secretsmanager:DescribeSecret", "Resource": "SECRET_ARN" } ] }
  5. ユーザーにこれらの許可がない場合は、許可を追加します。

  6. IAM ロールを使用して DMS API コールを行う場合は、それぞれのロールで上記のステップを繰り返します。

  7. ターミナルを開き、 を使用して AWS CLI 、上記で使用したロールまたはユーザーを引き受けることで、アクセス許可が正しく付与されていることを確認します。

    1. IAM get-role コマンドを使用して、SecretAccessRole に対するユーザー許可を検証します。

      aws iam get-role --role-name ROLE_NAME

      ROLE_NAME はロ SecretsManagerAccessRole 名前に置き換えます。

      コマンドがエラーメッセージを返す場合は、正しく許可されていることを確認してください。

    2. Secrets Manager describe-secret コマンドを使用して、シークレットに対するユーザー許可を検証します。

      aws secretsmanager describe-secret --secret-id SECRET_NAME OR SECRET_ARN --region=REGION_NAME

      ユーザーには、フレンドリ名、ARN の一部、または完全な ARN を指定できます。詳細については、「describe-secret」をご参照ください。

      コマンドがエラー メッセージを返す場合は、正しく許可されていることを確認してください。

AWS Management Console を使用してシークレットとシークレットアクセスロールを作成する

を使用して AWS Management Console 、エンドポイント認証用のシークレットを作成し、ユーザーに代わって AWS DMS がシークレットにアクセスすることを許可するポリシーとロールを作成できます。

を使用してシークレットを作成するには AWS Management Console 、 を使用してソースエンドポイントとターゲットエンドポイントの接続のデータベースを認証 AWS DMS します。
  1. にサインイン AWS Management Console し、 で AWS Secrets Manager コンソールを開きますhttps://console.aws.amazon.com/secretsmanager/

  2. [新しいシークレットを保存] を選択します。

  3. [Store a new secret] (新しいシークレットの保存) ページの [Select secret type] (シークレットタイプの選択) で、[Other type of secrets] (他の種類のシークレット) を選択し、次に[Plaintext] (プレーンテキスト) を選択します。

    注記

    これ以降で、エンドポイントデータベースに接続するために、クリアテキストの認証情報を入力する必要があるのはここだけです。

  4. [Plaintext] (プレーンテキスト) フィールド

    • SecretsManagerSecretId にアイデンティティを割り当てるシークレットでは、次の JSON 構造を入力します。

      { "username": db_username, "password": db_user_password, "port": db_port_number, "host": db_server_name }
      注記

      これは、エンドポイントデータベースの認証に必要な JSON メンバーの最小リストです。任意の JSON エンドポイント設定をすべて小文字で JSON メンバーとして追加できます。ただし、 AWS DMS では、エンドポイント認証用の追加 JSON メンバーは無視されます。

      ここで、db_username は、データベースにアクセスしているユーザーの名前で、db_user_password は、データベースのユーザーパスワード、db_port_number は、データベースにアクセスするためのポート番号、db_server_name は、次の例のように、ウェブ上のデータベースサーバー名 (アドレス) です。

      { "username": "admin", "password": "some_password", "port": "8190", "host": "oracle101.abcdefghij.us-east-1.rds.amazonaws.com" }
    • SecretsManagerOracleAsmSecretId にアイデンティティを割り当てるシークレットについては、次の JSON 構造を入力します。

      { "asm_user": asm_username, "asm_password": asm_user_password, "asm_server": asm_server_name }
      注記

      これは、Oracle エンドポイント用に Oracle ASM を認証するために最低限必要な JSON メンバーのリストです。また、利用可能な Oracle ASM エンドポイント設定に基づいて指定できる完全なリストでもあります。

      ここで、asm_username は、Oracle ASM にアクセスしているユーザー名、asm_user_password は Oracle ASM ユーザーのパスワード、asm_server_name は、次の例のように、ポートを含むウェブの Oracle ASM サーバー名 (アドレス) です。

      { "asm_user": "oracle_asm_user", "asm_password": "oracle_asm_password", "asm_server": "oracle101.abcdefghij.us-east-1.rds.amazonaws.com:8190/+ASM" }
  5. シークレットを AWS KMS 暗号化する暗号化キーを選択します。によって AWS Secrets Manager サービス用に作成されたデフォルトの暗号化キーを受け入れるか、作成した AWS KMS キーを選択できます。

  6. このシークレットを参照する名前とオプションの説明を指定します。これは、SecretsManagerSecretId または SecretsManagerOracleAsmSecretId の値として使用するフレンドリ名です。

  7. シークレットで自動ローテーションを有効にする場合は、説明に従ってシークレットの認証情報をローテーションするアクセス許可を持つ AWS Lambda 関数を選択または作成する必要があります。ただし、Lambda 関数を使用するように自動ローテーションを設定する前に、関数の構成設定で次の 4 文字を EXCLUDE_CHARACTERS 環境変数の値に追加します。

    ;.:+{}

    AWS DMS では、エンドポイント認証情報に使用されるパスワードにこれらの文字は使用できません。これらを除外するように Lambda 関数を設定すると、 AWS Secrets Manager はローテーションされたパスワードの値の一部としてこれらの文字を生成できなくなります。Lambda 関数を使用するように自動ローテーションを設定すると、 AWS Secrets Manager はシークレットを直ちにローテーションしてシークレット設定を検証します。

    注記

    データベースエンジンの構成によっては、データベースでローテーションされた認証情報がフェッチされない場合があります。この場合、認証情報を更新するには、タスクをマニュアルで再起動する必要があります。

  8. シークレットを確認して保存します AWS Secrets Manager。その後、 で各シークレットをわかりやすい名前で検索し AWS Secrets Manager、シークレット ARN を の値として取得SecretsManagerSecretIdするかSecretsManagerOracleAsmSecretId、必要に応じて取得して、エンドポイントデータベース接続と Oracle ASM (使用されている場合) へのアクセスを認証できます。

シークレットアクセスポリシーとロールを作成して SecretsManagerAccessRoleArnまたは を設定するにはSecretsManagerOracleAsmAccessRoleArn、 が AWS DMS 適切なシークレットにアクセス AWS Secrets Manager できるようにします。
  1. にサインイン AWS Management Console し、https://console.aws.amazon.com/iam/ で AWS Identity and Access Management (IAM) コンソールを開きます。

  2. [Policies] (ポリシー) を選択し、次に[Create Policy] (ポリシー作成) を選択します

  3. [JSON] を選択し、次のポリシーを入力して、シークレットへのアクセスと復号化を有効にします。

    { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "secretsmanager:GetSecretValue", "Resource": secret_arn, }, { "Effect": "Allow", "Action": [ "kms:Decrypt", "kms:DescribeKey" ], "Resource": kms_key_arn, } ] }

    ここで、secret_arn はシークレット ARN で、必要に応じて SecretsManagerSecretId または SecretsManagerOracleAsmSecretId のいずれかより入手できます。kms_key_arn は、次の例のように、シークレットを暗号化するために使用する AWS KMS キーの ARN です。

    { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "secretsmanager:GetSecretValue", "Resource": "arn:aws:secretsmanager:us-east-2:123456789012:secret:MySQLTestSecret-qeHamH" }, { "Effect": "Allow", "Action": [ "kms:Decrypt", "kms:DescribeKey" ], "Resource": "arn:aws:kms:us-east-2:123456789012:key/761138dc-0542-4e58-947f-4a3a8458d0fd" } ] }
    注記

    によって作成されたデフォルトの暗号化キーを使用する場合 AWS Secrets Manager、 の AWS KMS アクセス許可を指定する必要はありませんkms_key_arn

    ポリシーで両方のシークレットへのアクセスを許可する場合は、もう 1 つの [secret_arn] に追加の JSON リソースオブジェクトを指定するだけです。

    シークレットが別のアカウントにある場合は、SecretsManagerAccessRoleArn ロールにクロスアカウントのシークレットを検証するための追加のポリシーが必要です。このようなユースケースでは、ポリシーに secretsmanager:DescribeSecret アクションを追加します。クロスアカウントシークレットの設定の詳細については、「別のアカウントのユーザーの AWS Secrets Manager シークレットへのアクセス許可」を参照してください。

  4. フレンドリ名とオプションの説明を使用して、ポリシーを確認して作成します。

  5. [Roles] (ロール)、[Create role] (ロールの作成) の順に選択します。

  6. 信頼されたエンティティの種類に、[AWS service] (サービス) を選択します。

  7. 信頼されたサービスのリストから [DMS] を選択し、[Next: Permissions] (次へ: アクセス許可) を選択します。

  8. ステップ 4 で作成したポリシーを検索しアタッチし、任意のタグを追加しながらロールを確認します。この時点で、 ロールの信頼関係を編集して、 AWS DMS リージョンサービスプリンシパルを信頼されたエンティティとして使用します。このプリンシパルの形式は以下のとおりです。

    dms.region-name.amazonaws.com

    ここで、region-name は 例えば us-east-1 などといったリージョンの名前です。したがって、この AWS DMS リージョンのリージョンサービスプリンシパルは次のとおりです。

    dms.us-east-1.amazonaws.com
  9. ロールの信頼されたエンティティを編集した後、フレンドリ名とオプションの説明を使用してロールを作成します。IAM でフレンドリ名を持つ新しいロールを検索し、ロール ARN を SecretsManagerAccessRoleArn または SecretsManagerOracleAsmAccessRoleArn の値として取得して、エンドポイントデータベース接続を認証することができるようになりました。

プライベートサブネットのレプリケーションインスタンスで Secrets Manager を使用するには
  1. Secrets Manager VPC エンドポイントを作成し、エンドポイントの DNS を書き留めます。Secrets Manager VPC エンドポイントの作成方法の詳細については、AWS Secrets Manager ユーザーガイドの「VPC endpoint を介した Secrets Manager への接続 を参照ください。

  2. レプリケーションインスタンスのセキュリティグループを Secrets Manager VPC エンドポイントにアタッチします。

  3. レプリケーションインスタンスのセキュリティグループのエグレスルールでは、送信先 0.0.0.0/0 のすべてのトラフィックを許可します。

  4. エンドポイントの追加接続属性 secretsManagerEndpointOverride=secretsManager endpoint DNS を設定し、次の例に示すように、シークレットマネージャーの VPC エンドポイント DNS を入力します。

    secretsManagerEndpointOverride=vpce-1234a5678b9012c-12345678.secretsmanager.eu-west-1.vpce.amazonaws.com