

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

# シークレットを使用した AWS Database Migration Service エンドポイントへのアクセス
<a name="security_iam_secretsmanager"></a>

シー*クレット*は 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 マネジメントコンソール を使用してシークレットとシークレットアクセスロールを作成する](#security_iam_secretsmanager.console)」を参照してください。

詳細については AWS Secrets Manager、「 *AWS Secrets Manager ユーザーガイド*」の[「Secrets Manager とは AWS](https://docs.aws.amazon.com/secretsmanager/latest/userguide/intro.html)」を参照してください。

AWS DMS は、サポートされているソースエンドポイントとターゲットエンドポイントで、次のオンプレミスデータベースまたは AWSマネージドデータベースのシークレット認証をサポートします。
+ Amazon DocumentDB
+ IBM Db2 LUW
+ Microsoft SQL Server
+ MongoDB
+ MySQL
+ Oracle
+ [PostgreSQL]
+ Amazon Redshift
+ SAP ASE

これらのデータベースに接続するにはエンドポイント設定の一部として、次のいずれかの値セットを入力できますが、両方を入力することはできません。
+ `UserName`、`Password`、`ServerName`、`Port` の設定を使用したデータベース接続を認証するクリアテキスト値。Oracle ASM も使用する Oracle エンドポイントの場合は、`AsmUserName`、`AsmPassword`、`AsmServerName` の設定を使用して ASM を認証するために追加のクリアテキスト値を含めます。
+ `SecretsManagerSecretId` と `SecretsManagerAccessRoleArn` 設定用の値を使用したシークレット認証。Oracle ASM を使用する Oracle エンドポイントの場合は、`SecretsManagerOracleAsmSecretId`と`SecretsManagerOracleAsmAccessRoleArn` 設定用に追加の値を含めます。これらの設定のシークレット値には次のものが含まれます。
  + `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 を `SecretsManagerAccessRoleArn` と `SecretsManagerOracleAsmAccessRoleArn` の両方に割り当てます。例えば、両方のシークレットに対するシークレット アクセス ロールの ARN が変数 `ARN2xsecrets` に割り当てられている場合、これらの ARN 設定を次のように設定できます。  

  ```
  SecretsManagerAccessRoleArn = ARN2xsecrets;
  SecretsManagerOracleAsmAccessRoleArn = ARN2xsecrets;
  ```

  これらの値を作成する詳細については、「[AWS マネジメントコンソール を使用してシークレットとシークレットアクセスロールを作成する](#security_iam_secretsmanager.console)」をご参照ください。

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

**必要なユーザー許可を提供して検証するには**

1. にサインイン AWS マネジメントコンソール し、 で AWS Identity and Access Management コンソールを開きます[https://console.aws.amazon.com/iam/](https://console.aws.amazon.com/iam/)。

1. **[Users]** (ユーザー) を選択し、`CreateEndpoint` と `ModifyEndpoint` の API コールを行うために使用する **[User ID]** (ユーザー ID) を選択します。

1. **[Permissions]** (許可) タブで、**[\$1\$1 JSON]** を選択します。

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

   ```
   {
   	"Statement": [{
   			"Effect": "Allow",
   			"Action": [
   				"iam:GetRole",
   				"iam:PassRole"
   			],
   			"Resource": "SECRET_ACCESS_ROLE_ARN"
   		},
   		{
   			"Effect": "Allow",
   			"Action": "secretsmanager:DescribeSecret",
   			"Resource": "SECRET_ARN"
   		}
   	]
   }
   ```

1. ユーザーにこれらの許可がない場合は、許可を追加します。

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

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

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

      ```
      aws iam get-role --role-name ROLE_NAME
      ```

      *ROLE\$1NAME* はロ `SecretsManagerAccessRole` 名前に置き換えます。

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

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

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

      ユーザーには、フレンドリ名、ARN の一部、または完全な ARN を指定できます。詳細については、「[describe-secret](https://docs.aws.amazon.com/cli/latest/reference/secretsmanager/describe-secret.html)」をご参照ください。

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

## AWS マネジメントコンソール を使用してシークレットとシークレットアクセスロールを作成する
<a name="security_iam_secretsmanager.console"></a>

を使用して AWS マネジメントコンソール 、エンドポイント認証用のシークレットを作成し、ユーザーに代わって AWS DMS がシークレットにアクセスできるようにポリシーとロールを作成できます。

**を使用してシークレットを作成し、 AWS マネジメントコンソール AWS DMS を使用してソースエンドポイントとターゲットエンドポイントの接続のデータベースを認証するには**

1. にサインイン AWS マネジメントコンソール し、 で AWS Secrets Manager コンソールを開きます[https://console.aws.amazon.com/secretsmanager/](https://console.aws.amazon.com/secretsmanager/)。

1. **新しいシークレットを保存** を選択します。

1. **[Store a new secret]** (新しいシークレットの保存) ページの **[Select secret type]** (シークレットタイプの選択) で、**[Other type of secrets]** (他の種類のシークレット) を選択し、次に**[Plaintext]** (プレーンテキスト) を選択します。
**注記**  
これ以降で、エンドポイントデータベースに接続するために、クリアテキストの認証情報を入力する必要があるのはここだけです。

1. **[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" 
     }
     ```

1.  AWS KMS シークレットを暗号化する暗号化キーを選択します。によって AWS Secrets Manager サービス用に作成されたデフォルトの暗号化キーを受け入れるか、作成した AWS KMS キーを選択できます。

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

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

   ```
   ;.:+{}*&,%\
   ```

   AWS DMS は、エンドポイント認証情報に使用されるパスワードでこれらの文字を許可しません。これらを除外するように Lambda 関数を設定すると、 AWS Secrets Manager はローテーションされたパスワードの値の一部としてこれらの文字を生成できなくなります。Lambda 関数を使用するように自動ローテーションを設定すると、 AWS Secrets Manager はすぐにシークレットをローテーションしてシークレット設定を検証します。
**注記**  
データベースエンジンの構成によっては、データベースでローテーションされた認証情報がフェッチされない場合があります。この場合、認証情報を更新するには、タスクをマニュアルで再起動する必要があります。

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

**シークレットアクセスポリシーとロールを作成して `SecretsManagerAccessRoleArn`または を設定するには`SecretsManagerOracleAsmAccessRoleArn`、 AWS DMS が適切なシークレットにアクセス AWS Secrets Manager できるようにします。**

1. にサインイン AWS マネジメントコンソール し、[https://console.aws.amazon.com/iam/](https://console.aws.amazon.com/iam/) で AWS Identity and Access Management (IAM) コンソールを開きます。

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

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

------
#### [ JSON ]

****  

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

------

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

------
#### [ JSON ]

****  

   ```
   {
       "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\$1arn]* に追加の JSON リソースオブジェクトを指定するだけです。  
シークレットが別のアカウントにある場合は、`SecretsManagerAccessRoleArn` ロールにクロスアカウントのシークレットを検証するための追加のポリシーが必要です。このようなユースケースでは、ポリシーに `secretsmanager:DescribeSecret` アクションを追加します。クロスアカウントシークレットの設定の詳細については、[「別のアカウントのユーザーの AWS Secrets Manager シークレットへのアクセス許可](https://docs.aws.amazon.com/secretsmanager/latest/userguide/auth-and-access_examples_cross.html)」を参照してください。

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

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

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

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

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

   ```
   dms.region-name.amazonaws.com
   ```

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

   ```
   dms.us-east-1.amazonaws.com
   ```

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

**プライベートサブネットのレプリケーションインスタンスで Secrets Manager を使用するには**

1. Secrets Manager VPC エンドポイントを作成し、エンドポイントの DNS を書き留めます。Secrets Manager VPC エンドポイントの作成方法の詳細については、*AWS Secrets Manager ユーザーガイド*の「[VPC endpoint を介した Secrets Manager への接続](https://docs.aws.amazon.com/secretsmanager/latest/userguide/vpc-endpoint-overview.html#vpc-endpoint)」[]() を参照ください。

1. VPC エンドポイントセキュリティグループの進入ルールでは、レプリケーションインスタンスのプライベート IP アドレスまたはレプリケーションインスタンスにアタッチされているセキュリティグループからの HTTPS トラフィックを許可します。

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

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

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