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

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

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

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

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

注記

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 サーバー

  • MongoDB

  • マイSQL

  • Oracle

  • PostgreSQL

  • Amazon Redshift

  • SAP ASE

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

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

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

    • SecretsManagerSecretId – でエンドポイントデータベースへのアクセス用に作成したシークレットの完全な Amazon リソースネーム (ARN)ARN、部分的な 、またはわかりやすい名前 AWS Secrets Manager。

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

    • SecretsManagerOracleAsmSecretId – で Oracle ASM アクセス用に作成したシークレットの完全な Amazon リソースネーム (ARN)ARN、部分的な 、またはわかりやすい名前 AWS Secrets Manager。

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

    注記

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

    SecretsManagerAccessRoleArn = ARN2xsecrets; SecretsManagerOracleAsmAccessRoleArn = ARN2xsecrets;

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

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

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

  2. ユーザーを選択し、 CreateEndpointおよび ModifyEndpointAPI呼び出しに使用するユーザー ID を選択します。

  3. アクセス許可タブから、{} 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. DMS API 呼び出しに IAMロールを使用している場合は、それぞれのロールに対して上記のステップを繰り返します。

  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] (プレーンテキスト) フィールド

    • ID を に割り当てるシークレットの場合は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" }
    • に ID を割り当てるシークレットの場合はSecretsManagerOracleAsmSecretId、次のJSON構造を入力します。

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

      これは、Oracle エンドポイントASMの Oracle を認証するために必要な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 し、 で AWS Identity and Access Management (IAM) コンソールを開きますhttps://console.aws.amazon.com/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

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

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

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

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

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

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

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

    dms.region-name.amazonaws.com

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

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

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

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

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

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

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