AWS Database Migration Service でのセキュリティ - AWS Database Migration Service

AWS Database Migration Service でのセキュリティ

AWS では、クラウドのセキュリティが最優先事項です。AWS のお客様は、セキュリティを最も重視する組織の要件を満たすように構築されたデータセンターとネットワークアーキテクチャから利点を得られます。

セキュリティは、AWS とお客様の間の共有責任です。共有責任モデルでは、これをクラウドセキュリティおよびクラウドのセキュリティとして説明しています。

  • クラウドのセキュリティ – AWS は、AWS クラウド内で AWS サービスを実行するインフラストラクチャを保護する責任を担います。また、AWS は、使用するサービスを安全に提供します。AWS コンプライアンスプログラムの一環として、サードパーティーの監査が定期的にセキュリティの有効性をテストおよび検証しています。AWS DMS に適用されるコンプライアンスプログラムの詳細については、「コンプライアンスプログラム対象範囲内の AWS のサービス」を参照してください。

  • クラウド内のセキュリティ – お客様の責任はお客様が使用する AWS のサービスによって決まります。また、お客様は、お客様のデータの機密性、組織の要件、および適用可能な法律および規制などの他の要因についても責任を担います。

このドキュメントでは、AWS DMS を使用する際に責任共有モデルを適用する方法について説明します。以下のトピックでは、セキュリティおよびコンプライアンスの目的を達成するために AWS DMS を設定する方法を示します。また、AWS DMS リソースのモニタリングや保護に役立つ他の AWS サービスの使用方法についても説明します。

AWS DMS リソースとデータベース (DB) へのアクセスを管理できます。アクセスの管理に使用する方法は、AWS DMS で実行する必要があるレプリケーションタスクによって異なります。

  • AWS Identity and Access Management (IAM) ポリシーを使用して、どのユーザーに AWS DMS リソースの管理を許可するかを決定するアクセス許可を割り当てます。IAM ユーザーとしてサインインしている場合、AWS DMS を使用するには適切なアクセス許可が必要になります。たとえば、IAM を使用して、DB インスタンスのおよびクラスターの作成、記述、変更、削除と、リソースのタグ付け、セキュリティグループの変更をどのユーザーに許可するかを決定できます。IAM に関する詳細および AWS DMS で使用する方法については、「AWS Database Migration Service の Identity and Access Management」を参照してください。

  • AWS DMS では、Transport Layer Security (TLS) を使用したエンドポイント接続に Secure Sockets Layer (SSL) が使用されます。AWS DMS で SSL/TLS を使用する方法については、「AWS Database Migration Service での SSL の使用」を参照してください。

  • AWS DMS は AWS Key Management Service (AWS KMS) 暗号化キーを使用して、レプリケーションインスタンスで使用されるストレージとエンドポイント接続情報を暗号化します。また、AWS DMS は AWS KMS 暗号化キーを使用して、Amazon S3 および Amazon Redshift のターゲットエンドポイントに関する保存中のターゲットデータを保護します。詳細については、「暗号化キーの設定と AWS KMS のアクセス許可の指定」を参照してください。

  • AWS DMS は、可能な限り最大のネットワークアクセスコントロールを実現するために、常に Amazon Virtual Private Cloud (Amazon VPC) サービスに基づいてレプリケーションインスタンスを Virtual Private Cloud (VPC) に作成します。DB インスタンスとインスタンスクラスターには、レプリケーションインスタンスと同じ VPC を使用するか、このレベルのアクセスコントロールに一致させるために追加の VPC を使用します。使用するそれぞれの Amazon VPC は、すべてのポートですべてのトラフィックについて VPC からの送信 (egress) がルールで許可されているセキュリティグループに関連付ける必要があります。このアプローチでは、ソースおよびターゲットデータベースエンドポイントで適切な受信が有効になっている限り、レプリケーションインスタンスからそれらのエンドポイントへの通信が許可されます。

    AWS DMS で使用可能なネットワーク設定の詳細については、「レプリケーションインスタンスのためのネットワークのセットアップ」を参照してください。VPC での DB インスタンスまたはインスタンスクラスターの作成については、AWS ドキュメントで Amazon データベースのセキュリティとクラスター管理のドキュメントを参照してください。AWS DMS でサポートされるネットワーク設定の詳細については、「レプリケーションインスタンスのためのネットワークのセットアップ」を参照してください。

  • データベース移行ログを表示するには、使用している IAM ロールに対する Amazon CloudWatch Logs の適切な権限が必要です。AWS DMS のログ作成の詳細については、「Amazon CloudWatch を使用したレプリケーションモニタリングタスク」を参照してください。

AWS Database Migration Service でのデータ保護

AWS DMS は、データ保護の規制やガイドラインを含む AWS 責任共有モデルに準拠しています。AWS は、すべての AWS のサービスを実行するグ​​ローバルなインフラストラクチャを保護する責任を担います。AWS は、カスタマーコンテンツおよび個人データを取り扱うためのセキュリティ設定の統制など、このインフラストラクチャ上でホストされるデータ管理を維持します。データコントローラーまたはデータプロセッサーとして機能する、AWS のお客様および Amazon パートナーネットワーク (APN) のパートナーは、AWS クラウドに保存された個人データに対する責任を担います。

データの保護については、AWS アカウントの認証情報を保護し、AWS Identity and Access Management (IAM) でプリンシパルを設定することをお勧めします。このようにすることで、それぞれの職務を遂行するために必要なアクセス許可のみを各ユーザーに付与することができます。また、以下の方法でデータを保護することをお勧めします。

  • 各アカウントで多要素認証 (MFA) を使用します。

  • SSL/TLS を使用して AWS リソースと通信します。

  • AWS CloudTrail で API とユーザーアクティビティログをセットアップします。

  • AWS 暗号化ソリューションを、AWS サービス内のすべてのデフォルトのセキュリティ管理と一緒に使用します。

  • Amazon Macie などの高度なマネージドセキュリティサービスを使用します。これにより、Amazon S3 に保存される個人データの検出と保護が支援されます。

顧客のアカウント番号などの機密の識別情報は、データベースの自由形式フィールドに格納しないことを強くお勧めします。この推奨事項は、特に、コンソール、API、AWS CLI、または AWS SDK から AWS DMS ソースエンドポイントとして使用される AWS データベースサービスを使用する場合に適用されます。データベースサービスに入力したすべてのデータは、診断ログの内容として取得される可能性があります。また、外部サーバーへの URL を指定するときは、そのサーバーへのリクエストを検証するための URL に、どのような種類の認証情報も含めないでください。

データ保護の詳細については、AWS セキュリティブログのブログ投稿「AWS の責任共有モデルと GDPR」を参照してください。

データの暗号化

サポートされている AWS DMS ターゲットエンドポイントのデータリソースの暗号化を有効にできます。AWS DMS では、AWS DMS との接続と、AWS DMS とすべてのソースエンドポイントおよびターゲットエンドポイントとの間の接続も暗号化されます。さらに、この暗号化を有効にするために、AWS DMS およびサポートされているターゲットエンドポイントが使用するキーも管理できます。

保管時の暗号化

AWS DMS では、保管時の暗号化がサポートされており、サポートされている AWS DMS ターゲットエンドポイントにコピーする前に、レプリケートされたデータを Amazon S3 にプッシュするために使用するサーバー側の暗号化モードを指定できます。この暗号化モードは、エンドポイントの追加の接続属性 encryptionMode を設定することで指定できます。この encryptionMode 設定で KMS キー暗号化モードが指定されている場合は、カスタム KMS キーを作成して、次の AWS DMS ターゲットエンドポイントのターゲットデータを暗号化することもできます。

転送時の暗号化

AWS DMS では、転送中の暗号化がサポートされており、レプリケートするデータがソースエンドポイントからターゲットエンドポイントへの安全な移動が確保されます。この措置には、レプリケーションパイプラインを経由してデータが移動するときに、レプリケーションタスクが中間ストレージ用に使用するレプリケーションインスタンスの S3 バケットの暗号化も含まれます。AWS DMS では、ソースエンドポイントおよびターゲットエンドポイントへのタスク接続を暗号化するために、Secure Socket Layer (SSL) と共に Transport Layer Security (TLS) が使用されます。AWS DMS では、両方のエンドポイントへの接続を暗号化することで、ソースエンドポイントからレプリケーションタスクと、タスクからターゲットエンドポイントへの移動時に、データの安全性が確保されます。AWS DMS で SSL/TLS を使用する方法については、「AWS Database Migration Service での SSL の使用」を参照してください

AWS DMS では、デフォルトキーとカスタムキーの両方をサポートし、中間レプリケーションストレージと接続情報の両方が暗号化されます。これらのキーは、AWS KMS を使用して管理します。詳細については、「暗号化キーの設定と AWS KMS のアクセス許可の指定」を参照してください。

キーの管理

AWS DMS では、レプリケーションストレージ、接続情報、および特定のターゲットエンドポイントのターゲットデータストレージを暗号化するために、デフォルトキーまたはカスタムキーの使用がサポートされます。これらのキーは、AWS KMS を使用して管理します。詳細については、「暗号化キーの設定と AWS KMS のアクセス許可の指定」を参照してください。

インターネットトラフィックのプライバシー

オンプレミスで実行されている場合でも、クラウド内の AWS サービスの一部として実行されている場合でも、AWS DMS と、同じ AWS リージョン内のソースエンドポイントおよびターゲットエンドポイントとの間では、保護された接続が提供されます。(ソースとターゲットのうち、少なくとも一方のエンドポイントは、クラウド内で AWS サービスの一部として実行するされている必要があります。) VPC がすべて同じ AWS リージョンにあれば、これらのコンポーネントが同じ Virtual Private Cloud (VPC) を共有している場合も、別々の VPC に存在する場合も、この保護が適用されます。AWS DMS でサポートされるネットワーク設定の詳細については、「レプリケーションインスタンスのためのネットワークのセットアップ」を参照してください。これらのネットワーク設定を使用する場合のセキュリティに関する考慮事項については、「AWS Database Migration Service のネットワークセキュリティ」を参照してください。

AWS Database Migration Service の Identity and Access Management

AWS Identity and Access Management (IAM) は、管理者が AWS リソースへのアクセスを安全にコントロールするために役立つ AWS のサービスです。IAM 管理者は、AWS DMS リソースを使用するために認証 (サインイン) および承認 (アクセス許可を持つ) される者を制御します。IAM は、追加料金なしで使用できる AWS のサービスです。

対象者

AWS Identity and Access Management (IAM) の用途は、AWS DMS で行う作業によって異なります。

サービスユーザー – ジョブを実行するために AWS DMS サービスを使用する場合は、管理者が必要なアクセス許可と認証情報を用意します。作業を実行するためにさらに多くの AWS DMS 機能を使用するとき、追加のアクセス許可が必要になる場合があります。アクセスの管理方法を理解すると、管理者から適切なアクセス許可をリクエストするのに役に立ちます。AWS DMS の機能にアクセスできない場合は、「AWS Database Migration Service Identity and Access のトラブルシューティング」を参照してください。

サービス管理者 – 社内の AWS DMS リソースを担当している場合は、おそらく AWS DMS へのフルアクセスがあります。従業員がどの AWS DMS 機能とリソースアクセスする必要があるかを決定するのは管理者の仕事です。その後で、サービスユーザーのアクセス許可を変更するために、IAM 管理者にリクエストを送信する必要があります。IAM の基本概念については、このページの情報を確認します。お客様の会社で AWS DMS の IAM を利用する方法の詳細については、「AWS Database Migration Service と IAM の連携」を参照して ください。

IAM 管理者 – IAM 管理者は、AWS DMS へのアクセスを管理するポリシーの作成方法の詳細について確認する場合があります。IAM で使用できる AWS DMS アイデンティティベースのポリシーの例を表示するには、「AWS Database Migration Service アイデンティティベースのポリシーの例」を参照して ください。

アイデンティティを使用した認証

認証は、アイデンティティ認証情報を使用して AWS にサインインする方法です。AWS マネジメントコンソール を使用するサインインの詳細については、IAM ユーザーガイド の「IAM コンソールとサインインページ」を参照してください。

AWS アカウントのルートユーザー、IAM ユーザーとして、または IAM ロールを引き受けて、認証されている (AWS にサインインしている) 必要があります。会社のシングルサインオン認証を使用することも、Google や Facebook を使用してサインインすることもできます。このような場合、管理者は以前に IAM ロールを使用して ID フェデレーションを設定しました。他の会社の認証情報を使用して AWS にアクセスした場合、ロールを間接的に割り当てられています。

AWS マネジメントコンソール へ直接サインインするには、ルートユーザー E メールまたは IAM ユーザー名とパスワードを使用します。ルートユーザー または IAM を使用して AWS にプログラム的にアクセスできます。AWS では、SDK とコマンドラインツールを提供して、お客様の認証情報を使用して、リクエストに暗号で署名できます。AWS ツールを使用しない場合は、リクエストに自分で署名する必要があります。これには、インバウンド API リクエストを認証するためのプロトコル、署名バージョン 4 を使用します。リクエストの認証の詳細については、AWS General Referenceの「署名バージョン 4 の署名プロセス」を参照してください。

使用する認証方法を問わず、追加のセキュリティ情報の提供を要求される場合もあります。たとえば、AWS では多要素認証 (MFA) を使用してアカウントのセキュリティを高めることを推奨しています。詳細については、IAM ユーザーガイドの「AWS のデバイスに多要素認証 (MFA) を使用」を参照してください。

AWS アカウントのルートユーザー

AWS アカウントを初めて作成する場合は、このアカウントのすべての AWS サービスとリソースに対して完全なアクセス権限を持つシングルサインインアイデンティティで始めます。このアイデンティティは AWS アカウント ルートユーザー と呼ばれ、アカウントの作成に使用した E メールアドレスとパスワードでのサインインによりアクセスします。強くお勧めしているのは、日常的なタスクには、それが管理者タスクであっても、ルートユーザーを使用しないことです。代わりに、最初の IAM ユーザーを作成するためだけに ルートユーザー を使用するというベストプラクティスに従います。その後、ルートユーザー認証情報を安全な場所に保管し、それらを使用して少数のアカウントおよびサービス管理タスクのみを実行します。

IAM ユーザーとグループ

IAM ユーザーは、単一のユーザーまたはアプリケーションに特定のアクセス許可がある AWS アカウント内のアイデンティティです。IAM ユーザーは、ユーザー名とパスワード、アクセスキーのセットなど、長期的な認証情報を持つことができます。アクセスキーを生成する方法の詳細については、IAM ユーザーガイド の「IAM ユーザーのアクセスキーの管理」を参照してください。IAM ユーザーにアクセスキーを生成するとき、必ずキーペアを表示して安全に保存してください。後になって、シークレットアクセスキーを回復することはできません。新しいアクセスキーペアを生成する必要があります。

IAM グループは、IAM ユーザーのコレクションを指定するアイデンティティです。グループとしてサインインすることはできません。グループを使用して、一度に複数のユーザーに対してアクセス許可を指定できます。多数の組のユーザーがある場合、グループを使用すると管理が容易になります。たとえば、IAM Admin という名前のグループを設定して、そのグループに IAM リソースを管理するアクセス許可を与えることができます。

ユーザーは、ロールとは異なります。ユーザーは 1 人の特定の人またはアプリケーションに一意に関連付けられますが、ロールはそれを必要とする任意の人が引き受けるようになっています。ユーザーには永続的な長期の認証情報がありますが、ロールでは一時的な認証情報が利用できます。詳細については、IAM ユーザーガイド の「IAM ユーザーの作成が適している場合 (ロールではなく)」を参照してください。

IAM ロール

IAM ロールは、特定のアクセス許可を持つ、AWS アカウント内のアイデンティティです。これは IAM ユーザーに似ていますが、特定のユーザーに関連付けられていません。ロールを切り替えて、AWS マネジメントコンソール で IAM ロールを一時的に引き受けることができます。ロールを引き受けるには、AWS CLI または AWS API オペレーションを呼び出すか、カスタム URL を使用します。ロールを使用する方法の詳細については、IAM ユーザーガイド の「IAM ロールの使用」を参照してください。

IAM ロールと一時的な認証情報は、次の状況で役立ちます。

  • 一時的な IAM ユーザーアクセス許可 – IAM ユーザーは、特定のタスクに対して複数の異なるアクセス許可を一時的に IAM ロールで引き受けることができます。

  • フェデレーティッドユーザーアクセス – IAM ユーザーを作成する代わりに、AWS Directory Service、エンタープライズユーザーディレクトリ、またはウェブ ID プロバイダーに既存のアイデンティティを使用できます。このようなユーザーはフェデレーティッドユーザーと呼ばれます。AWS では、ID プロバイダーを通じてアクセスがリクエストされたとき、フェデレーティッドユーザーにロールを割り当てます。フェデレーティッドユーザーの詳細については、IAM ユーザーガイドの「フェデレーティッドユーザーとロール」を参照してください。

  • クロスアカウントアクセス – IAM ロールを使用して、自分のアカウントのリソースにアクセスすることを別のアカウントの信頼済みプリンシパルに許可できます。ロールは、クロスアカウントアクセスを許可する主な方法です。ただし、一部の AWS のサービスでは、(ロールをプロキシとして使用する代わりに) リソースにポリシーを直接アタッチできます。クロスアカウントアクセスでのロールとリソースベースのポリシーの違いの詳細については、IAM ユーザーガイド の「IAM ロールとリソースベースのポリシーとの相違点」を参照してください。

  • AWS サービスアクセス – サービスロールは、サービスがお客様に代わってお客様のアカウントでアクションを実行するために引き受ける IAM ロールです。一部の AWS のサービス環境を設定するときに、サービスが引き受けるロールを定義する必要があります。このサービスロールには、サービスが必要とする AWS のリソースにサービスがアクセスするために必要なすべてのアクセス権限を含める必要があります。サービスロールはサービスによって異なりますが、多くのサービスロールでは、そのサービスの文書化された要件を満たしている限り、アクセス権限を選択することができます。サービスロールは、お客様のアカウント内のみでアクセスを提供します。他のアカウントのサービスへのアクセス権を付与するためにサービスロールを使用することはできません。IAM 内部からロールを作成、修正、削除できます。たとえば、Amazon Redshift がお客様に代わって Amazon S3 バケットにアクセスし、バケットからデータを Amazon Redshift クラスターにロードすることを許可するロールを作成できます。詳細については、IAM ユーザーガイドAWS サービスにアクセス権限を委任するロールの作成を参照してください。

  • Amazon EC2で実行されているアプリケーション – IAM ロールを使用して、EC2 インスタンスで実行され、AWS CLI または AWS API リクエストを作成しているアプリケーションの一時的な認証情報を管理できます。これは、EC2 インスタンス内でのアクセスキーの保存に推奨されます。AWS ロールを EC2 インスタンスに割り当て、そのすべてのアプリケーションで使用できるようにするには、インスタンスにアタッチされたインスタンスプロファイルを作成します。インスタンスプロファイルにはロールが含まれ、EC2 インスタンスで実行されるプログラムは一時認証情報を取得することができます。詳細については、IAM ユーザーガイドの「Amazon EC2 インスタンスで実行されるアプリケーションに IAM ロールを使用してアクセス権限を付与する」を参照してください。

IAM ロールを使用するべきかどうかについては、IAM ユーザーガイド の「IAM ロール (ユーザーではない) の作成が適している場合」を参照してください。

ポリシーを使用したアクセスの管理

AWS でアクセスをコントロールするには、ポリシーを作成して IAM アイデンティティや AWS リソースにアタッチします。ポリシーは AWS のオブジェクトであり、アイデンティティやリソースに関連付けて、これらのアクセス許可を定義します。AWS は、エンティティ (ルートユーザー、IAM ユーザーまたは IAM ロール) によってリクエストが行われると、それらのポリシーを評価します。ポリシーでのアクセス許可により、リクエストが許可されるか拒否されるかが決まります。大半のポリシーは JSON ドキュメントとして AWS に保存されます。JSON ポリシードキュメントの構造と内容の詳細については、IAM ユーザーガイド の「JSON ポリシー概要」を参照してください。

IAM 管理者は、ポリシーを使用して、AWS リソースへのアクセスを許可するユーザーと、これらのリソースで実行できるアクションを指定できます。すべての IAM エンティティ (ユーザーまたはロール) は、アクセス許可のない状態からスタートします。言い換えると、デフォルト設定では、ユーザーは何もできず、自分のパスワードを変更することすらできません。何かを実行するアクセス許可をユーザーに付与するには、管理者がユーザーにアクセス許可ポリシーをアタッチする必要があります。また、管理者は、必要なアクセス許可があるグループにユーザーを追加できます。管理者がグループにアクセス許可を付与すると、そのグループ内のすべてのユーザーにこれらのアクセス許可が付与されます。

IAM ポリシーは、オペレーションの実行方法を問わず、アクションのアクセス許可を定義します。たとえば、iam:GetRole アクションを許可するポリシーがあるとします。このポリシーがあるユーザーは、AWS マネジメントコンソール、AWS CLI、または AWS API からロールの情報を取得できます。

アイデンティティベースのポリシー

アイデンティティベースのポリシーは、IAM ユーザー、ロール、グループなどのアイデンティティに JSON ドキュメントとしてアタッチできるアクセス許可ポリシーです。これらのポリシーは、アイデンティティが実行できるアクション、リソース、および条件を制御します。アイデンティティベースのポリシーを作成する方法については、IAM ユーザーガイド の「IAM ポリシー の 作成」を参照してください 。

アイデンティティベースのポリシーは、さらにインラインポリシーまたは管理ポリシーに分類できます。インラインポリシーは、単一のユーザー、グループ、またはロールに直接埋め込まれています。管理ポリシーは、AWS アカウント内の複数のユーザー、グループ、およびロールにアタッチできるスタンドアロンポリシーです。管理ポリシーには、AWS 管理ポリシーとカスタマー管理ポリシーが含まれます。管理ポリシーまたはインラインポリシーのいずれかを選択する方法については、IAM ユーザーガイド の「管理ポリシーとインラインポリシーの比較」を参照してください。

リソースベースのポリシー

リソースベースのポリシーは、Amazon S3 バケットなどのリソースにアタッチする JSON ポリシードキュメントです。サービス管理者は、これらのポリシーを使用して、特定のプリンシパル (アカウントメンバー、ユーザー、またはロール) がそのリソースに対して実行する条件およびアクションを定義することができます。リソースベースのポリシーはインラインポリシーです。マネージド型のリソースベースのポリシーはありません。

アクセスコントロールリスト (ACL)

アクセスコントロールリスト (ACL) は、どのプリンシパル (アカウントメンバー、ユーザー、またはロール) にリソースへのアクセス許可を付与するかを制御する一種のポリシーです。ACL は、リソースベースのポリシーと似ていますが、JSON ポリシードキュメント形式を使用しません。ACL をサポートするサービスとして Amazon S3、AWS WAF、Amazon VPC などがあります。ACL の詳細については、『Amazon Simple Storage Service 開発者ガイド』の「アクセスコントロールリスト (ACL) の概要」を参照してください。

その他のポリシータイプ

AWS では、別のあまり一般的ではないポリシータイプもサポートしています。これらのポリシータイプでは、より一般的なポリシータイプで付与された最大のアクセス許可を設定できます。

  • アクセス許可の境界 – アクセス許可の境界は、アイデンティティベースのポリシーが IAM エンティティ (IAM ユーザーまたはロール) に付与できるアクセス許可の上限を設定する高度な機能です。エンティティのアクセス許可の境界を設定できます。結果として得られるアクセス許可は、エンティティの ID ベースのポリシーとそのアクセス許可の境界の共通部分です。Principal フィールドでユーザーまたはロールを指定するリソースベースのポリシーは、アクセス許可の境界では制限されません。これらのポリシーのいずれかを明示的に拒否した場合、その許可は無効になります。アクセス許可の境界の詳細については、IAM ユーザーガイド の「IAM エンティティのアクセス許可の境界」を参照してください。

  • サービスコントロールポリシー (SCP) – SCP は、AWS Organizations で 組織や組織単位 (OU) に最大権限を指定する JSON ポリシーです。AWS Organizations は、お客様のビジネスが所有する複数の AWS アカウントをグループ化し、一元的に管理するサービスです。組織内のすべての機能を有効にすると、サービス制御ポリシー (SCP) を一部またはすべてのアカウントに適用できます。SCP はメンバーアカウントのエンティティに対するアクセス許可を制限します (各 AWS アカウントのルートユーザー など)。Organizations および SCP の詳細については、AWS Organizations ユーザーガイド の「SCP の動作」を参照してください。

  • セッションポリシー – セッションポリシーは、ロールまたはフェデレーティッドユーザーの一時セッションをプログラムで作成する際にパラメータとして渡す高度なポリシーです。結果として得られるセッションのアクセス許可は、ユーザーまたはロールの ID ベースのポリシーとセッションポリシーの共通部分です。また、リソースベースのポリシーからアクセス許可が派生する場合もあります。これらのポリシーのいずれかを明示的に拒否した場合、その許可は無効になります。詳細については、IAM ユーザーガイド の「セッションポリシー」を参照してください。

複数のポリシータイプ

1 つのリクエストに複数のタイプのポリシーが適用されると、結果として作成されるアクセス許可を理解するのがさらに複雑になります。複数のポリシータイプが関連するとき、リクエストを許可するかどうかを AWS が決定する方法の詳細については、IAM ユーザーガイド の「ポリシーの評価ロジック」を参照してください。

AWS Database Migration Service と IAM の連携

AWS DMS へのアクセスを管理するために IAM 使用する前に、AWS DMS で使用できる IAM 機能を理解しておく必要があります。IAM と連携する AWS DMS や他の AWS のサービスの動作の概要については、『IAM ユーザーガイド』の「IAM と連携する AWS のサービス」を参照してください。

AWS DMS アイデンティティベースのポリシー

IAM アイデンティティベースのポリシーでは、許可または拒否されたアクションとリソースを指定でき、さらにアクションが許可または拒否された条件も指定できます。AWS DMS は、特定のアクション、リソース、および条件キーをサポートします。JSON ポリシーで使用するすべての要素については、IAM ユーザーガイド の「IAM JSON ポリシーエレメントのリファレンス」を参照してください。

アクション

IAM アイデンティティベースのポリシーの Action エレメントは、そのポリシーにより許可または拒否される特定のアクションについて説明します。ポリシーアクションの名前は通常、関連する AWS API オペレーションと同じです。このアクションは、関連付けられたオペレーションを実行するためのアクセス許可を付与するポリシーで使用されます。

AWS DMS のポリシーアクションは、アクションの前にプレフィックス dms: を使用します。たとえば、AWS DMS の CreateReplicationTask API 操作により、レプリケーションタスクを作成する権限を付与するには、ポリシーに dms:CreateReplicationTask アクションを含めます。ポリシーステートメントには、Action 要素あるいは NotAction 要素を含める必要があります。AWS DMS は、このサービスで実行できるタスクを説明する独自の一連のアクションを定義します。

単一のステートメントに複数のアクションを指定するには、次のようにコンマで区切ります。

"Action": [ "dms:action1", "dms:action2"

ワイルドカード (*) を使用して複数のアクションを指定できます。たとえば、Describe という単語で始まるすべてのアクションを指定するには、以下のアクションを含めます。

"Action": "dms:Describe*"

AWS DMS のアクションを一覧表示するには、IAM ユーザーガイドの「AWS Database Migration Service で定義されるアクション」を参照してください。

リソース

Resource エレメントは、アクションが適用されるオブジェクトを指定します。ステートメントには、Resource または NotResource エレメントを含める必要があります。ARN を使用して、またはステートメントがすべてのリソースに適用されることを示すワイルドカード (*) を使用して、リソースを指定します。

AWS DMS は、次のリソースと連携して動作します。

  • 証明書

  • エンドポイント

  • イベントサブスクリプション

  • レプリケーションインスタンス

  • レプリケーションサブネット(セキュリティ)グループ

  • レプリケーションタスク

AWS DMS が必要とするリソースは、呼び出された 1 つまたは複数のアクションによって決まります。関連付けられているリソースや、リソース ARN で指定されたリソースに対して、これらのアクションを許可するポリシーが必要です。

たとえば、AWS DMS エンドポイントリソースの ARN は次のようになります:

arn:${Partition}:dms:${Region}:${Account}:endpoint/${InstanceId}

ARN の形式の詳細については、「Amazon リソースネーム (ARN) と AWS のサービスの名前空間」を参照してください。

たとえば、ステートメントで use-east-2 リージョンの 1A2B3C4D5E6F7G8H9I0J1K2L3M エンドポイントインスタンスを指定するには、次の ARN を使用します。

"Resource": "arn:aws:dms:us-east-2:987654321098:endpoint/1A2B3C4D5E6F7G8H9I0J1K2L3M"

特定のアカウントに属するすべてのエンドポイントを指定するには、ワイルドカード (*) を使用します。

"Resource": "arn:aws:dms:us-east-2:987654321098:endpoint/*"

リソースの作成など、一部の AWS DMS アクションは、特定のリソースで実行できません。このような場合は、ワイルドカード (*) を使用する必要があります。

"Resource": "*"

一部の AWS DMSAPI アクションでは、複数のリソースが対象になります。たとえば、StartReplicationTask はレプリケーションタスクを開始し、ソースとターゲットの 2 つのデータベースエンドポイントリソースに接続するため、IAM ユーザーには、ソースエンドポイントを読み取るアクセス許可とターゲットエンドポイントに書き込むアクセス許可が必要です。複数のリソースを単一のステートメントで指定するには、ARN をカンマで区切ります。

"Resource": [ "resource1", "resource2" ]

ポリシーを使用して AWS DMS リソースへのアクセスを制御する方法については、「」を参照してください。AWS DMS リソースタイプおよびその ARN のリストを表示するには、IAM ユーザーガイド の「AWS Database Migration Service で定義されるリソース」を参照してください。どのアクションで、各リソースの ARN を指定することができるかについては、「AWS Database Migration Service で定義されるアクション」を参照してください。

条件キー

Condition エレメント (または Condition ブロック) を使用すると、ステートメントが有効な条件を指定できます。Conditionエレメントはオプションです。イコールや以下などの条件演算子を使用する条件式を構築して、リクエスト内に値のあるポリシーの条件に一致させることができます。

1 つのステートメントに複数の Condition エレメントを指定する場合、または 1 つの Condition エレメントに複数のキーを指定する場合、AWS が論理 AND 演算を使用してそれらを評価します。単一の条件キーに複数の値を指定する場合、AWS が論理 OR 演算を使用して条件を評価します。ステートメントのアクセス許可が付与される前にすべての条件が満たされる必要があります。

条件を指定する際にプレースホルダー変数も使用できます。たとえば、IAM ユーザー名でタグ付けされている場合のみ、リソースにアクセスする IAM ユーザーアクセス許可を付与できます。詳細については、IAM ユーザーガイド の「IAM ポリシーエレメント: 変数およびタグ」を参照してください。

AWS DMS は独自の条件キーを定義し、一部のグローバル条件キーの使用をサポートしています。すべての AWS グローバル条件キーを確認するには、IAM ユーザーガイド の「AWS グローバル条件コンテキストキー」を参照してください。

AWS DMS では、条件キーで使用できる標準タグのセットが定義されています。独自のカスタムタグを定義することもできます。詳細については、「タグを使用してアクセスをコントロールする」を参照してください。

AWS DMS 条件キーのリストを表示するには、IAM ユーザーガイド の「AWS Database Migration Service の条件キー」を参照してください。どのアクションおよびリソースと条件キーを使用できるかについては、「AWS Database Migration Service で定義されるアクション」および「AWS Database Migration Service で定義されるリソース」を参照してください。

AWS DMS アイデンティティベースのポリシーの例を表示するには、「AWS Database Migration Service アイデンティティベースのポリシーの例」を参照してください。

AWS DMS リソースベースのポリシー

リソースベースのポリシーは、指定されたプリンシパルによって指定の AWS DMS リソースに対して実行できるアクションおよび実行条件を指定する JSON ポリシードキュメントです。AWS DMS では、サポートされているターゲットエンドポイントに移行されるデータを暗号化するために作成した AWS KMS 暗号化キーに関するリソースベースのアクセス許可ポリシーがサポートされます。サポートされているターゲットエンドポイントには Amazon Redshift や Amazon S3 があります。リソースベースのポリシーを使用することで、これらの暗号化キーを使用するためのアクセス許可を、各ターゲットエンドポイントの他のアカウントに付与できます。

クロスアカウントアクセスを有効にするには、全体のアカウント、または別のアカウントの IAM エンティティを、リソースベースのポリシーのプリンシパルとして指定します。リソースベースのポリシーにクロスアカウントのプリンシパルを追加しても、信頼関係は半分しか確立されない点に注意してください。プリンシパルとリソースが異なる AWS アカウントにある場合は、リソースにアクセスするためのアクセス許可をプリンシパルエンティティにも付与する必要があります。アクセス許可は、アイデンティティベースのポリシーをエンティティにアタッチすることで付与します。ただし、リソースベースのポリシーで、同じアカウントのプリンシパルへのアクセス権が付与されている場合は、アイデンティティベースのポリシーをさらに付与する必要はありません。詳細については、『IAM ユーザーガイド』の「IAM ロールとリソースベースのポリシーとの相違点」を参照してください。

AWS DMS サービスでは、キーポリシーと呼ばれるリソースベースのポリシーを 1 種類のみサポートしており、これが AWS KMS 暗号化キーにアタッチされています。このポリシーでは、サポートされているターゲットエンドポイントで移行されたデータを暗号化できるプリンシパルエンティティ(アカウント、ユーザー、ロール、フェデレーティッドユーザー)を定義します。

サポートされているターゲットエンドポイント用に作成する暗号化キーにリソースベースのポリシーをアタッチする方法については、「Amazon Redshift ターゲットデータを暗号化する AWS KMS キーの作成と使用」および「Amazon S3 ターゲットオブジェクトを暗号化する AWS KMS キーの作成」を参照してください。

AWS DMS のリソースベースのポリシーの例については、「リソースベースのポリシーの例 (AWS KMS)」を参照してください。

AWS DMS タグに基づいた承認

タグを AWS DMS リソースにアタッチすることも、AWS DMS へのリクエストでタグを渡すこともできます。タグに基づいてアクセスを制御するには、dms:ResourceTag/key-nameaws:RequestTag/key-nameaws:TagKeys 条件キーを使用して、ポリシーの条件要素でタグ情報を指定します。AWS DMS では、条件キーで使用できる標準タグのセットが定義されています。独自のカスタムタグを定義することもできます。詳細については、「タグを使用してアクセスをコントロールする」を参照してください。

タグに基づいてリソースへのアクセスを制限するアイデンティティベースのポリシーの例については、「タグに基づく AWS DMS リソースへのアクセス」を参照してください。

AWS DMS の IAM ロール

IAM ロールは、特定のアクセス許可を持つ、AWS アカウント内のエンティティです。

AWS DMS を使用した一時的な認証情報の使用

一時的な認証情報を使用して、フェデレーションでのサインイン、IAM ロールの引き受け、またはクロスアカウントロールの引き受けを行うことができます。一時的なセキュリティ認証情報を取得するには、AssumeRoleGetFederationToken などの AWS STS API オペレーションを呼び出します。

AWS DMSでは、一時認証情報の使用をサポートしています。

サービスにリンクされたロール

サービスにリンクされたロールによって、AWS サービスが他のサービスのリソースにアクセスして自動的にアクションを完了できます。サービスにリンクされたロールは、IAM アカウント内に表示され、サービスによって所有されます。IAM 管理者は、サービスにリンクされたロールのアクセス許可を表示できますが、編集することはできません。

AWS DMS では、サービスにリンクされたロールがサポートされていません。

サービスロール

この機能では、サービスのロールをユーザーに代わって引き受けることをサービスに許可します。このロールにより、サービスはユーザーに代わって他のサービスのリソースにアクセスし、アクションを実行できます。サービスロールは、IAM アカウントに表示され、サービスによって所有されます。つまり、IAM 管理者は、このロールのアクセス許可を変更できます。ただし、これを行うことにより、サービスの機能が損なわれる場合があります。

AWS DMS では、特定のソースエンドポイントまたはターゲットエンドポイントを使用するために作成する必要がある 2 種類のサービスロールがサポートされています:

AWS DMS で IAM ロールを選択する

AWS CLI または AWS DMS API をデータベース移行に使用する場合、AWS DMS の機能を使用する前に特定の IAM ロールを AWS アカウントに追加する必要があります。これらのロールのうち 2 つは dms-vpc-roledms-cloudwatch-logs-role です。Amazon Redshift をターゲットデータベースとして使用している場合、IAM ロール dms-access-for-endpoint も AWS アカウントに追加する必要があります。詳細については、「AWS CLI と AWS DMS API で使用する IAM ロールの作成」を参照してください。

AWS Database Migration Service アイデンティティベースのポリシーの例

デフォルトでは、IAM ユーザーおよびロールには、AWS DMS リソースを作成または変更するアクセス許可がありません。また、AWS マネジメントコンソール、AWS CLI、または AWS API を使用してタスクを実行することもできません。IAM 管理者は、ユーザーとロールに必要な、指定されたリソースで特定の API オペレーションを実行するアクセス許可をユーザーとロールに付与する IAM ポリシーを作成する必要があります。続いて、管理者はそれらのアクセス権限が必要な IAM ユーザーまたはグループにそのポリシーをアタッチします。

JSON ポリシードキュメントのこれらの例を使用して、IAM アイデンティティベースのポリシーを作成する方法については、IAM ユーザーガイド の「[JSON] タブでのポリシーの 作成」を参照してください。

ポリシーのベストプラクティス

アイデンティティベースのポリシーは非常に強力です。アカウント内で、AWS DMS リソースを作成、アクセス、または削除できるかどうかを決定します。これらのアクションを実行すると、AWS アカウントに追加料金が発生する可能性があります。アイデンティティベースのポリシーを作成または編集するときは、以下のガイドラインと推奨事項に従います。

  • AWS 管理ポリシーの使用を開始する – AWS DMS の使用をすばやく開始するには、AWS 管理ポリシーを使用して、従業員に必要なアクセス許可を付与します。これらのポリシーはアカウントですでに有効になっており、AWS によって管理および更新されています。詳細については、IAM ユーザーガイド の「AWS 管理ポリシーを使用したアクセス許可の使用開始」を参照してください 。

  • 最小権限を付与する – カスタムポリシーを作成するときは、タスクを実行するために必要なアクセス許可のみを付与します。最小限のアクセス権限から開始し、必要に応じて追加のアクセス権限を付与します。この方法は、寛容なアクセス権限で始め、後でそれらを強化しようとするよりも安全です。詳細については、IAM ユーザーガイド の「最小権限を付与する」を参照してください。

  • 機密性の高いオペレーションに MFA を有効にする – 追加セキュリティとして、機密性の高リソースまたは API オペレーションにアクセスするために IAM ユーザーに対して、多要素認証 (MFA) の使用を要求します。詳細については、IAM ユーザーガイドの「AWS のデバイスに 多要素認証 (MFA) を使用」を参照してください。

  • 追加セキュリティに対するポリシー条件を使用する – 実行可能な範囲内で、アイデンティティベースのポリシーがリソースにアクセスできる条件を定義します。たとえば、要求が発生しなければならない許容 IP アドレスの範囲を指定するための条件を記述できます。指定された日付または時間範囲内でのみリクエストを許可する条件を書くことも、SSL や MFA の使用を要求することもできます。ポリシー要素の詳細については、IAM ユーザーガイド の「IAM JSON ポリシー要素: 条件」を参照してください。

AWS DMS コンソールを使用する

次のポリシーでは、AWS DMS コンソールを含めて AWS DMS へのアクセスを許可し、その他の Amazon サービス (Amazon EC2 など) から特定の必要なアクションに関するアクセス許可も指定しています。

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "dms:*", "Resource": "*" }, { "Effect": "Allow", "Action": [ "kms:ListAliases", "kms:DescribeKey" ], "Resource": "*" }, { "Effect": "Allow", "Action": [ "iam:GetRole", "iam:PassRole", "iam:CreateRole", "iam:AttachRolePolicy" ], "Resource": "*" }, { "Effect": "Allow", "Action": [ "ec2:DescribeVpcs", "ec2:DescribeInternetGateways", "ec2:DescribeAvailabilityZones", "ec2:DescribeSubnets", "ec2:DescribeSecurityGroups", "ec2:ModifyNetworkInterfaceAttribute", "ec2:CreateNetworkInterface", "ec2:DeleteNetworkInterface" ], "Resource": "*" }, { "Effect": "Allow", "Action": [ "cloudwatch:Get*", "cloudwatch:List*" ], "Resource": "*" }, { "Effect": "Allow", "Action": [ "logs:DescribeLogGroups", "logs:DescribeLogStreams", "logs:FilterLogEvents", "logs:GetLogEvents" ], "Resource": "*" }, { "Effect": "Allow", "Action": [ "redshift:Describe*", "redshift:ModifyClusterIamRoles" ], "Resource": "*" } ] }

これらのアクセス許可の内訳は、コンソールを使用するためにそれぞれのアクセス許可が必要な理由を理解するうえで役立ちます。

次のセクションは、利用可能な AWS KMS キーとエイリアスをユーザーがリストし、コンソールに表示することを許可するために必要です。KMS キーの Amazon リソースネーム (ARN) がわかり、AWS Command Line Interface (AWS CLI) のみを使用している場合、このエントリは必要ではありません。

{ "Effect": "Allow", "Action": [ "kms:ListAliases", "kms:DescribeKey" ], "Resource": "*" }

次のセクションは、エンドポイントとともにロール ARN を渡す必要がある特定のエンドポイントタイプに必要です。さらに、必要な AWS DMS ロールが事前に作成されていない場合、AWS DMS コンソールはそのロールを作成することができます。すべてのロールが事前に設定されている場合、必要なものは iam:GetRole および iam:PassRole のみです。ロールの詳細については、「AWS CLI と AWS DMS API で使用する IAM ロールの作成」を参照してください。

{ "Effect": "Allow", "Action": [ "iam:GetRole", "iam:PassRole", "iam:CreateRole", "iam:AttachRolePolicy" ], "Resource": "*" }

次のセクションは、AWS DMS には Amazon EC2 インスタンスを作成し、作成されるレプリケーションインスタンス用のネットワークを設定する必要があるため、必須となります。これらのリソースはお客様のアカウント内に存在するため、お客様に代わってこれらのアクションを実行できる必要があります。

{ "Effect": "Allow", "Action": [ "ec2:DescribeVpcs", "ec2:DescribeInternetGateways", "ec2:DescribeAvailabilityZones", "ec2:DescribeSubnets", "ec2:DescribeSecurityGroups", "ec2:ModifyNetworkInterfaceAttribute", "ec2:CreateNetworkInterface", "ec2:DeleteNetworkInterface" ], "Resource": "*" }

次のセクションは、ユーザーがレプリケーションインスタンスのメトリクスを表示することを許可するために必要です。

{ "Effect": "Allow", "Action": [ "cloudwatch:Get*", "cloudwatch:List*" ], "Resource": "*" }

このセクションは、ユーザーがレプリケーションログを表示することを許可するために必要です。

{ "Effect": "Allow", "Action": [ "logs:DescribeLogGroups", "logs:DescribeLogStreams", "logs:FilterLogEvents", "logs:GetLogEvents" ], "Resource": "*" }

次のセクションは、Amazon Redshift をターゲットとして使用する場合に必要です。これにより、AWS DMS は、Amazon Redshift クラスターが AWS DMS に対して適切に設定されていることを検証できます。

{ "Effect": "Allow", "Action": [ "redshift:Describe*", "redshift:ModifyClusterIamRoles" ], "Resource": "*" }

AWS DMS コンソールは、AWS DMS コンソールを使用する際に AWS アカウントに自動的にアタッチされる複数のロールを作成します。AWS Command Line Interface (AWS CLI) または AWS DMS API を移行に使用する場合、これらのロールをアカウントに追加する必要があります。これらのロールの追加についての詳細は、「AWS CLI と AWS DMS API で使用する IAM ロールの作成」を参照してください。

このポリシーを使用して AWS DMS にアクセスするための要件の詳細については、「AWS DMS の使用に必要な IAM アクセス許可」を参照してください。

自分のアクセス許可の表示をユーザーに許可する

この例は

この例では、ユーザー ID にアタッチされたインラインおよび管理ポリシーの表示を IAM ユーザーに許可するポリシーを作成する方法を示します。このポリシーには、コンソールで、または AWS CLI か AWS API を使用してプログラム的に、このアクションを完了するアクセス許可が含まれています。

{ "Version": "2012-10-17", "Statement": [ { "Sid": "ViewOwnUserInfo", "Effect": "Allow", "Action": [ "iam:GetUserPolicy", "iam:ListGroupsForUser", "iam:ListAttachedUserPolicies", "iam:ListUserPolicies", "iam:GetUser" ], "Resource": ["arn:aws:iam::*:user/${aws:username}"] }, { "Sid": "NavigateInConsole", "Effect": "Allow", "Action": [ "iam:GetGroupPolicy", "iam:GetPolicyVersion", "iam:GetPolicy", "iam:ListAttachedGroupPolicies", "iam:ListGroupPolicies", "iam:ListPolicyVersions", "iam:ListPolicies", "iam:ListUsers" ], "Resource": "*" } ] }

1 つの Amazon S3 バケットにアクセスする

AWS DMS では、データベース移行の中間ストレージとして Amazon S3 バケットが使用されます。通常、AWS DMS では、この目的のためにデフォルトの S3 バケットが管理されています。ただし、場合によっては(特に AWS CLI または AWS DMS API を使用する場合)、AWS DMS では独自の S3 バケットを指定できます。たとえば、Amazon Redshift ターゲットエンドポイントにデータを移行するための独自の S3 バケットを指定できます。この場合は、Amazon が管理する AmazonDMSRedshiftS3Role ポリシーに基づくアクセス許可のロールを作成する必要があります。

次の例は、AmazonDMSRedshiftS3Role ポリシーの 1 つのバージョンを示しています。AWS DMS はこのポリシーにより、AWS アカウントの IAM ユーザーに、1 つの Amazon S3 バケットへのアクセス権限を付与できます。また、このユーザーは、オブジェクトの追加、更新、削除を行うこともできます。

このポリシーでは、ユーザーに s3:PutObjects3:GetObjects3:DeleteObject のアクセス許可を付与するだけでなく、s3:ListAllMyBucketss3:GetBucketLocation、および s3:ListBucket のアクセス許可も付与します。これらが、コンソールで必要とされる追加のアクセス許可です。その他のアクセス許可では、バケットのライフサイクルの管理が AWS DMS に許可されます。また、オブジェクトをコピーするには、s3:GetObjectAcl アクションが必要です。

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "s3:CreateBucket", "s3:ListBucket", "s3:DeleteBucket", "s3:GetBucketLocation", "s3:GetObject", "s3:PutObject", "s3:DeleteObject", "s3:GetObjectVersion", "s3:GetBucketPolicy", "s3:PutBucketPolicy", "s3:GetBucketAcl", "s3:PutBucketVersioning", "s3:GetBucketVersioning", "s3:PutLifecycleConfiguration", "s3:GetLifecycleConfiguration", "s3:DeleteBucketPolicy" ], "Resource": "arn:aws:s3:::dms-*" } ] }

このポリシーに基づくロールの作成の詳細については、「Amazon S3 バケット設定」を参照してください。

タグに基づく AWS DMS リソースへのアクセス

アイデンティティベースのポリシーの条件を使用して、タグに基づいて AWS DMS リソースへのアクセスをコントロールできます。この例では、すべての AWS DMS エンドポイントへのアクセスを許可するポリシーを作成する方法を示しています。ただし、アクセス許可が付与されるのは、エンドポイントデータベースタグ Owner にそのユーザーのユーザー名の値がある場合のみです。

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "dms:*", "Resource": "arn:aws:dms:*:*:endpoint/*", "Condition": { "StringEquals": {"dms:endpoint-tag/Owner": "${aws:username}"} } } ] }

このポリシーをアカウントの IAM ユーザーにアタッチできます。richard-roe という名前のユーザーが AWS DMS エンドポイントへのアクセスを試みる場合、エンドポイントデータベースには Owner=richard-roe または owner=richard-roe のタグが必要です。それ以外の場合、このユーザーはアクセスを拒否されます。条件キー名では大文字と小文字は区別されないため、条件タグキー OwnerOwnerowner に一致します。ポリシー要素の詳細については、IAM ユーザーガイド の「IAM JSON ポリシー要素: 条件」を参照してください。

リソースベースのポリシーの例 (AWS KMS)

AWS DMS では、カスタムの AWS KMS 暗号化キーを作成して、サポートされているターゲットエンドポイントデータを暗号化できます。キーポリシーを作成して、サポートされているターゲットデータ暗号化用に作成する暗号化キーに、このポリシーをアタッチする方法については、「Amazon Redshift ターゲットデータを暗号化する AWS KMS キーの作成と使用」および「Amazon S3 ターゲットオブジェクトを暗号化する AWS KMS キーの作成」を参照してください。

Amazon Redshift ターゲットデータを暗号化するためのカスタム AWS KMS 暗号化キーのポリシー

次の例は、Amazon Redshift ターゲットデータを暗号化するために作成する AWS KMS 暗号化キー用に作成されたキーポリシーの JSON を示しています。

{ "Id": "key-consolepolicy-3", "Version": "2012-10-17", "Statement": [ { "Sid": "Enable IAM User Permissions", "Effect": "Allow", "Principal": { "AWS": [ "arn:aws:iam::987654321098:root" ] }, "Action": "kms:*", "Resource": "*" }, { "Sid": "Allow access for Key Administrators", "Effect": "Allow", "Principal": { "AWS": [ "arn:aws:iam::987654321098:role/Admin" ] }, "Action": [ "kms:Create*", "kms:Describe*", "kms:Enable*", "kms:List*", "kms:Put*", "kms:Update*", "kms:Revoke*", "kms:Disable*", "kms:Get*", "kms:Delete*", "kms:TagResource", "kms:UntagResource", "kms:ScheduleKeyDeletion", "kms:CancelKeyDeletion" ], "Resource": "*" }, { "Sid": "Allow use of the key", "Effect": "Allow", "Principal": { "AWS": [ "arn:aws:iam::987654321098:role/DMS-Redshift-endpoint-access-role" ] }, "Action": [ "kms:Encrypt", "kms:Decrypt", "kms:ReEncrypt*", "kms:GenerateDataKey*", "kms:DescribeKey" ], "Resource": "*" }, { "Sid": "Allow attachment of persistent resources", "Effect": "Allow", "Principal": { "AWS": [ "arn:aws:iam::987654321098:role/DMS-Redshift-endpoint-access-role" ] }, "Action": [ "kms:CreateGrant", "kms:ListGrants", "kms:RevokeGrant" ], "Resource": "*", "Condition": { "Bool": { "kms:GrantIsForAWSResource": true } } } ] }

ここでは、キーを作成する前に作成した Amazon Redshift ターゲットエンドポイントデータにアクセスするためのロールが、キーポリシーで参照されている箇所を確認できます。この例では、DMS-Redshift-endpoint-access-role です。また、異なるプリンシパル(ユーザーとロール)に対して許可されているさまざまなキーアクションも確認できます。たとえば、DMS-Redshift-endpoint-access-role のすべてのユーザーは、ターゲットデータを暗号化、復号化、および再暗号化できます。このようなユーザーは、エクスポート用のデータキーを生成し、AWS KMS の外でデータを暗号化することもできます。また、作成したキーなど、カスタマーマスターキー (CMK) に関する詳細情報を返すこともできます。さらに、このようなユーザーは、ターゲットエンドポイントなどの AWS リソースへのアタッチメントを管理できます。

Amazon S3 ターゲットデータを暗号化するためのカスタム AWS KMS 暗号化キーのポリシー

次の例は、Amazon S3 ターゲットデータを暗号化するために作成する AWS KMS 暗号化キー用に作成されたキーポリシーの JSON を示しています。

{ "Id": "key-consolepolicy-3", "Version": "2012-10-17", "Statement": [ { "Sid": "Enable IAM User Permissions", "Effect": "Allow", "Principal": { "AWS": [ "arn:aws:iam::987654321098:root" ] }, "Action": "kms:*", "Resource": "*" }, { "Sid": "Allow access for Key Administrators", "Effect": "Allow", "Principal": { "AWS": [ "arn:aws:iam::987654321098:role/Admin" ] }, "Action": [ "kms:Create*", "kms:Describe*", "kms:Enable*", "kms:List*", "kms:Put*", "kms:Update*", "kms:Revoke*", "kms:Disable*", "kms:Get*", "kms:Delete*", "kms:TagResource", "kms:UntagResource", "kms:ScheduleKeyDeletion", "kms:CancelKeyDeletion" ], "Resource": "*" }, { "Sid": "Allow use of the key", "Effect": "Allow", "Principal": { "AWS": [ "arn:aws:iam::987654321098:role/DMS-S3-endpoint-access-role" ] }, "Action": [ "kms:Encrypt", "kms:Decrypt", "kms:ReEncrypt*", "kms:GenerateDataKey*", "kms:DescribeKey" ], "Resource": "*" }, { "Sid": "Allow attachment of persistent resources", "Effect": "Allow", "Principal": { "AWS": [ "arn:aws:iam::987654321098:role/DMS-S3-endpoint-access-role" ] }, "Action": [ "kms:CreateGrant", "kms:ListGrants", "kms:RevokeGrant" ], "Resource": "*", "Condition": { "Bool": { "kms:GrantIsForAWSResource": true } } } ]

ここでは、キーの作成前に作成した Amazon S3 ターゲットエンドポイントデータにアクセスするためのロールが、キーポリシーで参照されている箇所を確認できます。この例では、DMS-S3-endpoint-access-role です。また、異なるプリンシパル(ユーザーとロール)に対して許可されているさまざまなキーアクションも確認できます。たとえば、DMS-S3-endpoint-access-role のすべてのユーザーは、ターゲットデータを暗号化、復号化、および再暗号化できます。このようなユーザーは、エクスポート用のデータキーを生成し、AWS KMS の外でデータを暗号化することもできます。また、作成したキーなど、カスタマーマスターキー (CMK) に関する詳細情報を返すこともできます。さらに、このようなユーザーは、ターゲットエンドポイントなどの AWS リソースへのアタッチメントを管理できます。

AWS Database Migration Service Identity and Access のトラブルシューティング

次の情報は、AWS DMS と IAM の使用に伴って発生する可能性がある一般的な問題の診断や修復に役立ちます。

AWS DMS でアクションを実行する権限がない

AWS マネジメントコンソール から、アクションを実行する権限がないと通知された場合、管理者に問い合わせ、サポートを依頼する必要があります。お客様のユーザー名とパスワードを発行したのが、担当の管理者です。

以下の例のエラーは、mateojackson IAM ユーザーがコンソールを使用してAWS DMS エンドポイントの詳細を表示しようとして、dms: DescribeEndpoint アクセス許可がない場合に発生します。

User: arn:aws:iam::123456789012:user/mateojackson is not authorized to perform: dms:DescribeEndpoint on resource: my-postgresql-target

この場合、Mateo は、dms:DescribeEndpoint アクションを使用して my-postgresql-target エンドポイントにアクセスできるように、ポリシーの更新を管理者に依頼します。

次のことを実行する権限がない: iam:PassRole

iam:PassRole アクションを実行する権限がないというエラーが表示された場合、管理者に問い合わせ、サポートを依頼する必要があります。お客様のユーザー名とパスワードを発行したのが、担当の管理者です。AWS DMS にロールを渡すことができるようにポリシーを更新するよう、管理者に依頼します。

一部の AWS サービスでは、新しいサービスロールまたはサービスにリンクされたロールを作成せずに、既存のロールをサービスに渡すことができます。そのためには、サービスにロールを渡すアクセス許可が必要です。

以下の例のエラーは、marymajor という IAM ユーザーがコンソールを使用して AWS DMS でアクションを実行しようする場合に発生します。ただし、アクションでは、サービスロールによって付与されたアクセス許可がサービスにある必要があります。メアリーには、ロールをサービスに渡すアクセス許可がありません。

User: arn:aws:iam::123456789012:user/marymajor is not authorized to perform: iam:PassRole

この場合、メアリーは担当の管理者に iam:PassRole アクションを実行できるようにポリシーの更新を依頼します。

アクセスキーを表示する場合

IAM ユーザーアクセスキーを作成した後は、いつでもアクセスキー ID を表示できます。ただし、シークレットアクセスキーをもう一度表示することはできません。シークレットアクセスキーを紛失した場合は、新しいキーペアを作成する必要があります。

アクセスキーは、アクセスキー ID (例: AKIAIOSFODNN7EXAMPLE) とシークレットアクセスキー (例: wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY) の 2 つの部分から構成されます。ユーザー名とパスワードと同様に、リクエストを認証するために、アクセスキー ID とシークレットアクセスキーの両方を使用する必要があります。ユーザー名とパスワードと同様に、アクセスキーをしっかり管理してください。

重要

正規ユーザー ID を確認するためであっても、アクセスキーをサードパーティーに提供しないでください。提供すると、第三者がアカウントへの永続的アクセスを取得する場合があります。

アクセスキーペアを作成する場合、アクセスキー ID とシークレットアクセスキーを安全な場所に保存するように求めるプロンプトが表示されます。このシークレットアクセスキーは、作成時にのみ使用できます。シークレットアクセスキーを紛失した場合、新しいアクセスキーを IAM ユーザーに追加する必要があります。最大 2 つのアクセスキーを持つことができます。すでに 2 つある場合は、新しいキーペアを作成する前に、いずれかを削除する必要があります。手順を表示するには、IAM ユーザーガイド の「アクセスキーの管理 」を参照してください。

管理者として AWS DMS へのアクセスを他のユーザーに許可する

AWS DMS へのアクセスを他のユーザーに許可するには、アクセスを必要とする人またはアプリケーションの IAM エンティティ (ユーザーまたはロール) を作成する必要があります。ユーザーは、このエンティティの認証情報を使用して AWS にアクセスします。次に、AWS DMS の適切なアクセス許可を付与するポリシーを、そのエンティティにアタッチする必要があります。

すぐに開始するには、IAM ユーザーガイド の「IAM が委任した最初のユーザーおよびグループの作成」を参照してください 。

自分の AWS アカウント以外のユーザーに AWS DMS リソースへのアクセスを許可する場合

他のアカウントのユーザーや組織外のユーザーが、リソースへのアクセスに使用できるロールを作成できます。ロールを引き受けるように信頼されたユーザーを指定することができます。リソースベースのポリシーまたはアクセスコントロールリスト (ACL) をサポートするサービスの場合、それらのポリシーを使用して、リソースへのアクセスを付与できます。

詳細については、以下を参照してください。

AWS Database Migration Service でのログ記録とモニタリング

モニタリングは、AWS DMS および AWS ソリューションの信頼性、可用性、パフォーマンスを維持するうえで重要な要素です。マルチポイント障害が発生した場合は、その障害をより簡単にデバッグできるように、AWS ソリューションのすべての部分からモニタリングデータを収集する必要があります。AWS には、AWS DMS タスクおよびリソースをモニタリングし、潜在的なインシデントに対応するための複数のツールが用意されています。

AWS DMS イベントと通知

AWS DMS は Amazon Simple Notification Service (Amazon SNS) を使用して、AWS DMS イベントが発生したときに(レプリケーションインスタンスが作成されたときや削除されたときなどに)通知を送信します。イベントは AWS DMS によって、サブスクライブ可能なカテゴリにグループ分けされるため、そのカテゴリのイベントが発生すると、通知を受け取ることができます。たとえば、特定のレプリケーションインスタンスの作成カテゴリにサブスクライブした場合は、レプリケーションインスタンスに影響を与える作成関連のイベントが発生するたびに通知を受け取ります。これらの通知は、E メールメッセージ、テキストメッセージ、HTTP エンドポイントの呼び出しなど、AWS リージョン用に Amazon SNS でサポートされているいずれの形式でも使用できます。詳細については、「AWS Database Migration Service のイベントと通知の使用」を参照してください。

タスクのステータス

タスクのステータスを確認し、タスクの統制テーブルをモニタリングすることで、タスクの進行状況を監視できます。タスクのステータスは、AWS DMS のタスクとタスクに関連付けられたリソースの状態を示します。これによって、作成、開始、実行、停止など、タスクの現在の状態がわかります。また、テーブルの全読み込みが開始または進行中など、タスクが移行中のテーブルの現在の状態や、テーブルで挿入、削除、更新が発生した数などの詳細も含まれます。タスクおよびタスクリソースの状態のモニタリングについては、「タスクのステータス」および「タスク実行中のテーブルの状態」を参照してください。統制テーブルの詳細については、「制御テーブルタスク設定」を参照してください。

Amazon CloudWatch アラームとログ

Amazon CloudWatch アラームを使用すると、指定した期間で 1 つ以上のタスクメトリクスを監視できます。メトリクスが指定のしきい値を超えると、Amazon SNS トピックに通知が送信されます。CloudWatch アラームでは、メトリクスが特定の状態になったという理由では、アクションは呼び出されません。それだけではなく、状態が変化して、その状態が指定期間数にわたって持続している必要があります。また、AWS DMS は、移行プロセス中にも CloudWatch を使用してタスク情報を記録します。AWS CLI または AWS DMS API を使用すると、タスクログに関する情報を表示できます。AWS DMS で CloudWatch を使用する方法については、「Amazon CloudWatch を使用したレプリケーションモニタリングタスク」を参照してください。AWS DMS メトリクスのモニタリングの詳細については、「AWS Database Migration Service のメトリクス」を参照してください。AWS DMS タスクログの使用については、「AWS DMS タスクログの表示と管理」を参照してください。

AWS CloudTrail ログ

AWS DMS は AWS CloudTrail と統合されています。このサービスは、AWS DMS 内でユーザー、IAM ロール、または AWS サービスによって実行されたアクションを記録するサービスです。CloudTrail は、AWS DMS コンソールからの呼び出しや AWS DMS API オペレーションへのコード呼び出しを含む、AWS DMS のすべての API コールをイベントとしてキャプチャします。証跡を作成する場合は、AWS DMS のイベントなど、Amazon S3 バケットへの CloudTrail イベントの継続的な配信を有効にすることができます。証跡を設定しない場合でも、CloudTrail コンソールの [Event history (イベント履歴)] で最新のイベントを表示できます。CloudTrail によって収集された情報を使用して、リクエストの作成元の IP アドレス、リクエストの実行者、リクエストの実行日時などの詳細を調べて、AWS DMS に対してどのようなリクエストが行われたかを判断できます。詳細については、「AWS CloudTrail による AWS DMS API コールのログ記録」を参照してください。

データベースのログ

AWS マネジメントコンソール、AWS CLI、または AWS データベースサービスの API を使用して、タスクエンドポイントのデータベースログを表示、ダウンロード、監視できます。詳細については、AWS ドキュメントでデータベースサービスのドキュメントを参照してください。

AWS Database Migration Service のコンプライアンス検証

サードパーティーの監査では、複数の AWS コンプライアンスプログラムの一環として、AWS Database Migration Service のセキュリティとコンプライアンスの評価が行われます。これには、次のプログラムが含まれます。

  • SOC

  • PCI

  • ISO

  • FedRAMP

  • DoD CC SRG

  • HIPAA BAA

  • MTCS

  • CS

  • K-ISMS

  • ENS High

  • OSPAR

  • HITRUST CSF

特定のコンプライアンスプログラムの対象となる AWS サービスのリストについては、「コンプライアンスプログラムによる AWS 対象範囲内のサービス」を参照してください。一般的な情報については、「AWS コンプライアンスプログラム」を参照してください。

サードパーティーの監査レポートをダウンロードするには、AWS Artifact を使用します。詳細については、「AWS Artifact でレポートをダウンロードする」を参照してください。

AWS DMS を使用する際のお客様のコンプライアンス責任は、データの機密性、企業のコンプライアンス目的、適用法規や規制によって決まります。AWS ではコンプライアンスに役立つ以下のリソースを用意しています。

AWS Database Migration Service でのレジリエンス

AWS のグローバルインフラストラクチャは AWS リージョンとアベイラビリティーゾーンを中心として構築されます。AWS リージョンには、低レイテンシー、高いスループット、そして高度の冗長ネットワークで接続されている複数の物理的に独立・隔離されたアベイラビリティーゾーンがあります。アベイラビリティーゾーンでは、アベイラビリティーゾーン間で中断することなく自動的にフェイルオーバーするアプリケーションとデータベースを設計および運用することができます。アベイラビリティーゾーンは、従来の単一または複数のデータセンターインフラストラクチャよりも可用性、耐障害性、および拡張性が優れています。

AWSのリージョンやアベイラビリティーゾーンの詳細については、AWSグローバルインフラストラクチャを参照してください。

AWS DMS で [マルチ AZ] オプションを選択すると、AWS グローバルインフラストラクチャに加えて、マルチ AZ 配置を使用したレプリケーションインスタンスの高可用性とフェイルオーバーサポートが提供されます。

AWS DMS のマルチ AZ 配置では、異なるアベイラビリティーゾーンにレプリケーションインスタンスのスタンバイレプリカが自動的にプロビジョニングされ、維持されます。プライマリレプリケーションインスタンスは、同期的にスタンバイレプリカにレプリケートされます。プライマリレプリケーションインスタンスに障害が発生するか、応答しない場合、スタンバイ状態で中断時間をできる限り抑えて、実行中のタスクを再開します。プライマリはその状態を常にスタンバイにレプリケーションしているため、マルチ AZ 配置ではパフォーマンス上のオーバーヘッドが発生します。

マルチ AZ 配置の使用については、「AWS DMS レプリケーションインスタンスを使用する」を参照してください。

AWS Database Migration Service のインフラストラクチャセキュリティ

マネージド型サービスとしての AWS Database Migration Service は、ホワイトペーパー「Amazon Web Services: セキュリティプロセスの概要」に記載されている AWS グローバルネットワークセキュリティの手順で保護されています。

AWS が公開している API コールを使用して、ネットワーク経由で AWS DMS にアクセスします。クライアントで Transport Layer Security (TLS) 1.0 以降がサポートされている必要があります。また、Ephemeral Diffie-Hellman (DHE) や Elliptic Curve Ephemeral Diffie-Hellman (ECDHE) などの Perfect Forward Secrecy (PFS) を使用した暗号スイートもクライアントでサポートされている必要があります。これらのモードは、Java 7 以降など、最近のほとんどのシステムでサポートされています。

また、リクエストは、アクセスキー ID と、AWS Identity and Access Management (IAM) プリンシパルに関連付けられているシークレットのアクセスキーを使用して署名する必要があります。または、AWS Security Token Service (AWS STS) を使用して、一時的なセキュリティ認証情報を生成し、リクエストに署名することもできます。

これらの API オペレーションは任意のネットワークの場所から呼び出すことができますが、AWS DMS ではリソースベースのアクセスポリシーがサポートされているため、ソース IP アドレスに基づく制限を含めることができます。さらに、AWS DMS ポリシーを使用して、特定の Amazon VPC エンドポイントや特定の Virtual Private Cloud (VPC) からのアクセスをコントロールすることもできます。これにより、実質的にAWS ネットワーク内の特定の VPC から特定の AWS DMS リソースへのネットワークアクセスのみが分離されます。

AWS DMS でリソースベースのポリシーを使用する方法の詳細については、「リソース名とタグを使用したファイングレインアクセスコントロール」を参照してください。

AWS DMS の使用に必要な IAM アクセス許可

AWS DMS を使用するには、特定の IAM アクセス許可と IAM ロールを使用します。IAM ユーザーとしてサインインして AWS DMS を使用する場合、アカウント管理者は、このセクションで示すポリシーを AWS DMS の実行に使用する IAM ユーザー、グループ、またはロールにアタッチする必要があります。IAM アクセス許可の詳細については、『IAM ユーザーガイド』を参照してください。

次のポリシーでは、AWS DMS へのアクセス許可と、Amazon の他のサービス(AWS KMS、IAM、Amazon EC2、Amazon CloudWatch など)で必要とされる特定のアクションへのアクセス許可が付与されます。CloudWatch では、AWS DMS の移行がリアルタイムでモニタリングされ、移行の進行状況を示すメトリクスが収集および追跡されます。CloudWatch ログを使用すると、タスクの問題をデバッグできます。

注記

タグ付けを使用して、AWS DMS リソースへのアクセスをさらに制限できます。タグ付けを使用して AWS DMS リソースへのアクセスを制限する方法については、「リソース名とタグを使用したファイングレインアクセスコントロール」を参照してください。

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "dms:*", "Resource": "*" }, { "Effect": "Allow", "Action": [ "kms:ListAliases", "kms:DescribeKey" ], "Resource": "*" }, { "Effect": "Allow", "Action": [ "iam:GetRole", "iam:PassRole", "iam:CreateRole", "iam:AttachRolePolicy" ], "Resource": "*" }, { "Effect": "Allow", "Action": [ "ec2:DescribeVpcs", "ec2:DescribeInternetGateways", "ec2:DescribeAvailabilityZones", "ec2:DescribeSubnets", "ec2:DescribeSecurityGroups", "ec2:ModifyNetworkInterfaceAttribute", "ec2:CreateNetworkInterface", "ec2:DeleteNetworkInterface" ], "Resource": "*" }, { "Effect": "Allow", "Action": [ "cloudwatch:Get*", "cloudwatch:List*" ], "Resource": "*" }, { "Effect": "Allow", "Action": [ "logs:DescribeLogGroups", "logs:DescribeLogStreams", "logs:FilterLogEvents", "logs:GetLogEvents" ], "Resource": "*" }, { "Effect": "Allow", "Action": [ "redshift:Describe*", "redshift:ModifyClusterIamRoles" ], "Resource": "*" } ] }

これらのアクセス許可の内訳は、それぞれのアクセス許可が必要な理由を理解するうえで役立ちます。

次のセクションは、ユーザーが AWS DMS API オペレーションを呼び出すことを許可するために必要です。

{ "Effect": "Allow", "Action": "dms:*", "Resource": "*" }

次のセクションは、利用可能な AWS KMS キーとエイリアスをユーザーがリストし、コンソールに表示することを許可するために必要です。KMS キーの Amazon リソースネーム (ARN) がわかり、AWS Command Line Interface (AWS CLI) のみを使用している場合、このエントリは必要ではありません。

{ "Effect": "Allow", "Action": [ "kms:ListAliases", "kms:DescribeKey" ], "Resource": "*" }

次のセクションは、エンドポイントとともに IAM ロールの ARN を渡す必要がある特定のエンドポイントタイプに必要になります。また、必要な AWS DMS ロールが事前に作成されていない場合は、そのロールを AWS DMS コンソールで作成できます。すべてのロールが事前に設定されている場合、必要なものは iam:GetRole および iam:PassRole のみです。ロールの詳細については、「AWS CLI と AWS DMS API で使用する IAM ロールの作成」を参照してください。

{ "Effect": "Allow", "Action": [ "iam:GetRole", "iam:PassRole", "iam:CreateRole", "iam:AttachRolePolicy" ], "Resource": "*" }

次のセクションは、AWS DMS には Amazon EC2 インスタンスを作成し、作成されるレプリケーションインスタンス用のネットワークを設定する必要があるため、必須となります。これらのリソースはお客様のアカウント内に存在するため、お客様に代わってこれらのアクションを実行できる必要があります。

{ "Effect": "Allow", "Action": [ "ec2:DescribeVpcs", "ec2:DescribeInternetGateways", "ec2:DescribeAvailabilityZones", "ec2:DescribeSubnets", "ec2:DescribeSecurityGroups", "ec2:ModifyNetworkInterfaceAttribute", "ec2:CreateNetworkInterface", "ec2:DeleteNetworkInterface" ], "Resource": "*" }

次のセクションは、ユーザーがレプリケーションインスタンスのメトリクスを表示することを許可するために必要です。

{ "Effect": "Allow", "Action": [ "cloudwatch:Get*", "cloudwatch:List*" ], "Resource": "*" }

このセクションは、ユーザーがレプリケーションログを表示することを許可するために必要です。

{ "Effect": "Allow", "Action": [ "logs:DescribeLogGroups", "logs:DescribeLogStreams", "logs:FilterLogEvents", "logs:GetLogEvents" ], "Resource": "*" }

次のセクションは、Amazon Redshift をターゲットとして使用する場合に必要です。これにより、AWS DMS は、Amazon Redshift クラスターが AWS DMS に対して適切に設定されていることを検証できます。

{ "Effect": "Allow", "Action": [ "redshift:Describe*", "redshift:ModifyClusterIamRoles" ], "Resource": "*" }

AWS DMS コンソールは、AWS DMS コンソールを使用する際に AWS アカウントに自動的にアタッチされる複数のロールを作成します。AWS Command Line Interface (AWS CLI) または AWS DMS API を移行に使用する場合、これらのロールをアカウントに追加する必要があります。これらのロールの追加についての詳細は、「AWS CLI と AWS DMS API で使用する IAM ロールの作成」を参照してください。

AWS CLI と AWS DMS API で使用する IAM ロールの作成

AWS CLI または AWS DMS API をデータベース移行に使用する場合は、AWS DMS の機能を使用する前に 3 つの IAM ロールを AWS アカウントに追加する必要があります。これらのロールのうち 2 つは dms-vpc-roledms-cloudwatch-logs-role です。Amazon Redshift をターゲットデータベースとして使用している場合、IAM ロール dms-access-for-endpoint も AWS アカウントに追加する必要があります。

管理ポリシーの更新は自動です。IAM ロールでカスタムポリシーを使用する場合、このドキュメントで管理ポリシーの更新事項がないか定期的に確認してください。管理ポリシーの詳細は、get-policy コマンドと get-policy-version コマンドを組み合わせて使用して表示できます。

たとえば、次の get-policy コマンドは、指定された IAM ロールに関する情報を取得します。

aws iam get-policy --policy-arn arn:aws:iam::aws:policy/service-role/AmazonDMSVPCManagementRole

コマンドから返される情報は、次のとおりです。

{ "Policy": { "PolicyName": "AmazonDMSVPCManagementRole", "Description": "Provides access to manage VPC settings for AWS managed customer configurations", "CreateDate": "2015-11-18T16:33:19Z", "AttachmentCount": 1, "IsAttachable": true, "PolicyId": "ANPAJHKIGMBQI4AEFFSYO", "DefaultVersionId": "v3", "Path": "/service-role/", "Arn": "arn:aws:iam::aws:policy/service-role/AmazonDMSVPCManagementRole", "UpdateDate": "2016-05-23T16:29:57Z" } }

次の get-policy-version コマンドは、IAM ポリシー情報を取得します。

aws iam get-policy-version --policy-arn arn:aws:iam::aws:policy/service-role/AmazonDMSVPCManagementRole --version-id v3

コマンドから返される情報は、次のとおりです。

{ "PolicyVersion": { "CreateDate": "2016-05-23T16:29:57Z", "VersionId": "v3", "Document": { "Version": "2012-10-17", "Statement": [ { "Action": [ "ec2:CreateNetworkInterface", "ec2:DescribeAvailabilityZones", "ec2:DescribeInternetGateways", "ec2:DescribeSecurityGroups", "ec2:DescribeSubnets", "ec2:DescribeVpcs", "ec2:DeleteNetworkInterface", "ec2:ModifyNetworkInterfaceAttribute" ], "Resource": "*", "Effect": "Allow" } ] }, "IsDefaultVersion": true } }

同じコマンドを使用して、AmazonDMSRedshiftS3Role および AmazonDMSCloudWatchLogsRole 管理ポリシーに関する情報を取得できます。

注記

データベースの移行に AWS DMS コンソールを使用すると、これらのロールは自動的に AWS アカウントに追加されます。

次の手順では、dms-vpc-roledms-cloudwatch-logs-role、および dms-access-for-endpoint の各 IAM ロールを作成します。

AWS CLI または AWS DMS API で使用する IAM ロール dms-vpc-role を作成するには

  1. 次の IAM ポリシーを含む JSON ファイルを作成します。JSON ファイルに dmsAssumeRolePolicyDocument.json という名前を付けます。

    { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": "dms.amazonaws.com" }, "Action": "sts:AssumeRole" } ] }

    次のコマンドを使用して AWS CLI でロールを作成します。

    aws iam create-role --role-name dms-vpc-role --assume-role-policy-document file://dmsAssumeRolePolicyDocument.json
  2. 次のコマンドを使用して AmazonDMSVPCManagementRole ポリシーを dms-vpc-role にアタッチします。

    aws iam attach-role-policy --role-name dms-vpc-role --policy-arn arn:aws:iam::aws:policy/service-role/AmazonDMSVPCManagementRole

AWS CLI または AWS DMS API で使用する IAM ロール dms-cloudwatch-logs-role を作成するには

  1. 次の IAM ポリシーを含む JSON ファイルを作成します。JSON ファイルに dmsAssumeRolePolicyDocument2.json という名前を付けます。

    { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": "dms.amazonaws.com" }, "Action": "sts:AssumeRole" } ] }

    次のコマンドを使用して AWS CLI でロールを作成します。

    aws iam create-role --role-name dms-cloudwatch-logs-role --assume-role-policy-document file://dmsAssumeRolePolicyDocument2.json
  2. 次のコマンドを使用して AmazonDMSCloudWatchLogsRole ポリシーを dms-cloudwatch-logs-role にアタッチします。

    aws iam attach-role-policy --role-name dms-cloudwatch-logs-role --policy-arn arn:aws:iam::aws:policy/service-role/AmazonDMSCloudWatchLogsRole

Amazon Redshift をターゲットデータベースとして使用する場合は、IAM ロール dms-access-for-endpoint を作成して Amazon S3 へのアクセスを可能にする必要があります。

ターゲットデータベースとしての Amazon Redshift で使用する IAM ロール dms-access-for-endpoint を作成するには

  1. 次の IAM ポリシーを含む JSON ファイルを作成します。JSON ファイルに dmsAssumeRolePolicyDocument3.json という名前を付けます。

    { "Version": "2012-10-17", "Statement": [ { "Sid": "1", "Effect": "Allow", "Principal": { "Service": "dms.amazonaws.com" }, "Action": "sts:AssumeRole" }, { "Sid": "2", "Effect": "Allow", "Principal": { "Service": "redshift.amazonaws.com" }, "Action": "sts:AssumeRole" } ] }
  2. 次のコマンドを使用して AWS CLI でロールを作成します。

    aws iam create-role --role-name dms-access-for-endpoint --assume-role-policy-document file://dmsAssumeRolePolicyDocument3.json
  3. 次のコマンドを使用して AmazonDMSRedshiftS3Role ポリシーを dms-access-for-endpoint ロールにアタッチします。

    aws iam attach-role-policy --role-name dms-access-for-endpoint \ --policy-arn arn:aws:iam::aws:policy/service-role/AmazonDMSRedshiftS3Role

AWS CLI または AWS DMS API を使用するための IAM ポリシーが設定されている必要があります。

リソース名とタグを使用したファイングレインアクセスコントロール

Amazon リソースネーム (ARN) に基づくリソース名とリソースタグを使用して、AWS DMS リソースへのアクセスを管理できます。これを行うには、許可されたアクションを定義するか、条件ステートメントを IAM ポリシーに含めます。

リソース名を使用したアクセスの制御

IAM ユーザーアカウントを作成し、AWS DMS リソースの ARN に基づいてポリシーを割り当てることができます。

次のポリシーでは、ARN arn:aws:dms:us-east-1:152683116:rep:DOH67ZTOXGLIXMIHKITV を使用して、AWS DMS レプリケーションインスタンスへのアクセスを拒否します。

{ "Version": "2012-10-17", "Statement": [ { "Action": [ "dms:*" ], "Effect": "Deny", "Resource": "arn:aws:dms:us-east-1:152683116:rep:DOH67ZTOXGLIXMIHKITV" } ] }

たとえば、このポリシーが有効になっていると、次のコマンドは失敗します。

$ aws dms delete-replication-instance --replication-instance-arn "arn:aws:dms:us-east-1:152683116:rep:DOH67ZTOXGLIXMIHKITV" A client error (AccessDeniedException) occurred when calling the DeleteReplicationInstance operation: User: arn:aws:iam::152683116:user/dmstestusr is not authorized to perform: dms:DeleteReplicationInstance on resource: arn:aws:dms:us-east-1:152683116:rep:DOH67ZTOXGLIXMIHKITV $ aws dms modify-replication-instance --replication-instance-arn "arn:aws:dms:us-east-1:152683116:rep:DOH67ZTOXGLIXMIHKITV" A client error (AccessDeniedException) occurred when calling the ModifyReplicationInstance operation: User: arn:aws:iam::152683116:user/dmstestusr is not authorized to perform: dms:ModifyReplicationInstance on resource: arn:aws:dms:us-east-1:152683116:rep:DOH67ZTOXGLIXMIHKITV

AWS DMS エンドポイントとレプリケーションタスクへのアクセスを制限する IAM ポリシーを指定することもできます。

以下のポリシーでは、エンドポイントの ARN を使用して AWS DMS エンドポイントへのアクセスを制限します。

{ "Version": "2012-10-17", "Statement": [ { "Action": [ "dms:*" ], "Effect": "Deny", "Resource": "arn:aws:dms:us-east-1:152683116:endpoint:D6E37YBXTNHOA6XRQSZCUGX" } ] }

たとえば、次のコマンドは、エンドポイントの ARN を使用するポリシーが有効になっていると失敗します。

$ aws dms delete-endpoint --endpoint-arn "arn:aws:dms:us-east-1:152683116:endpoint:D6E37YBXTNHOA6XRQSZCUGX" A client error (AccessDeniedException) occurred when calling the DeleteEndpoint operation: User: arn:aws:iam::152683116:user/dmstestusr is not authorized to perform: dms:DeleteEndpoint on resource: arn:aws:dms:us-east-1:152683116:endpoint:D6E37YBXTNHOA6XRQSZCUGX $ aws dms modify-endpoint --endpoint-arn "arn:aws:dms:us-east-1:152683116:endpoint:D6E37YBXTNHOA6XRQSZCUGX" A client error (AccessDeniedException) occurred when calling the ModifyEndpoint operation: User: arn:aws:iam::152683116:user/dmstestusr is not authorized to perform: dms:ModifyEndpoint on resource: arn:aws:dms:us-east-1:152683116:endpoint:D6E37YBXTNHOA6XRQSZCUGX

以下のポリシーでは、タスクの ARN を使用して AWS DMS タスクへのアクセスを制限します。

{ "Version": "2012-10-17", "Statement": [ { "Action": [ "dms:*" ], "Effect": "Deny", "Resource": "arn:aws:dms:us-east-1:152683116:task:UO3YR4N47DXH3ATT4YMWOIT" } ] }

たとえば、次のコマンドは、タスクの ARN を使用するポリシーが有効になっていると失敗します。

$ aws dms delete-replication-task --replication-task-arn "arn:aws:dms:us-east-1:152683116:task:UO3YR4N47DXH3ATT4YMWOIT" A client error (AccessDeniedException) occurred when calling the DeleteReplicationTask operation: User: arn:aws:iam::152683116:user/dmstestusr is not authorized to perform: dms:DeleteReplicationTask on resource: arn:aws:dms:us-east-1:152683116:task:UO3YR4N47DXH3ATT4YMWOIT

タグを使用してアクセスをコントロールする

AWS DMS は、お客様が定義するポリシーで利用できる一般的なキーと値ペアのセットを定義します。それ以外のタグ付けの要件はありません。AWS DMS リソースのタグ付けの詳細については、「AWS Database Migration Service でのリソースへのタグ付け」を参照してください。

以下のリストは、AWS DMS で使用できる標準タグを示しています。

  • aws:CurrentTime – リクエストの日時を表し、一時的な条件に基づいてアクセス制限を許可します。

  • aws:EpochTime – このタグは上記の aws:CurrentTime タグと似ていますが、現在の時刻が Unix エポックからの経過秒数で表されることが異なります。

  • aws:MultiFactorAuthPresent – これはリクエストが Multi-Factor Authentication を介して署名されたかどうかを示すブールタグです。

  • aws:MultiFactorAuthAge – Multi-Factor Authentication トークンの期間 (秒) へのアクセスを提供します。

  • aws:principaltype – 現在のリクエストに対するプリンシパルのタイプ (ユーザー、アカウント、フェデレーティッドユーザーなど) へのアクセスを提供します。

  • aws:SourceIp – リクエストを発行するユーザーのソース IP アドレスを表します。

  • aws:UserAgent – リソースをリクエストしているクライアントアプリケーションに関する情報を提供します。

  • aws:userid – リクエストを発行しているユーザーの ID へのアクセスを提供します。

  • aws:username – リクエストを発行しているユーザーの名前へのアクセスを提供します。

  • dms:InstanceClass – レプリケーションインスタンスホストのコンピューティングサイズへのアクセスを提供します。

  • dms:StorageSize – ストレージボリュームサイズ (GB) へのアクセスを提供します。

独自のタグを定義することもできます。カスタマー定義のタグは、AWS のタグ付けサービスに保持されるシンプルなキー値ペアです。このタグを AWS DMS リソース (レプリケーションインスタンス、エンドポイント、タスクを含む) に追加できます。これらのタグはポリシーの IAM「条件」ステートメントを使用してマッチングされ、特定の条件付きタグを使用して参照されます。タグキーにはプレフィックスとして「dms」、リソースタイプ、および「tag」が付きます。以下にタグ形式を示します。

dms:{resource type}-tag/{tag key}={tag value}

たとえば、タグ「stage=production」を含むレプリケーションインスタンスに対してのみ API コールの成功を許可するポリシーを定義するとします。次の条件ステートメントは、指定されたタグを持つリソースに一致します。

"Condition": { "streq": { "dms:rep-tag/stage":"production" } }

次のタグを、このポリシー条件に一致するレプリケーションインスタンスに追加します。

stage production

AWS DMS リソースに既に割り当てられているタグに加えて、特定のリソースに適用できるタグキーと値を制限するポリシーを記述することもできます。この場合、タグのプレフィックスは「req」です。

たとえば、次のポリシーステートメントは、ユーザーが特定のリソースに割り当てることができるタグを、許可される値の特定のリストに制限します。

"Condition": { "streq": { "dms:rep-tag/stage": [ "production", "development", "testing" ] } }

以下のポリシー例では、リソースタグに基づいて AWS DMS リソースへのアクセスを制限します。

次のポリシーでは、タグの値が「Desktop」、タグキーが「Env」のレプリケーションインスタンスへのアクセスを制限します。

{ "Version": "2012-10-17", "Statement": [ { "Action": [ "dms:*" ], "Effect": "Deny", "Resource": "*", "Condition": { "StringEquals": { "dms:rep-tag/Env": [ "Desktop" ] } } } ] }

次のコマンドは、タグの値が「Desktop」で、タグキーが「Env」の場合にアクセスを制限する IAM ポリシーに基づいて、成功または失敗します。

$ aws dms list-tags-for-resource --resource-name arn:aws:dms:us-east-1:152683116:rep:46DHOU7JOJYOJXWDOZNFEN --endpoint-url http://localhost:8000 { "TagList": [ { "Value": "Desktop", "Key": "Env" } ] } $ aws dms delete-replication-instance --replication-instance-arn "arn:aws:dms:us-east-1:152683116:rep:46DHOU7JOJYOJXWDOZNFEN" A client error (AccessDeniedException) occurred when calling the DeleteReplicationInstance operation: User: arn:aws:iam::152683116:user/dmstestusr is not authorized to perform: dms:DeleteReplicationInstance on resource: arn:aws:dms:us-east-1:152683116:rep:46DHOU7JOJYOJXWDOZNFEN $ aws dms modify-replication-instance --replication-instance-arn "arn:aws:dms:us-east-1:152683116:rep:46DHOU7JOJYOJXWDOZNFEN" A client error (AccessDeniedException) occurred when calling the ModifyReplicationInstance operation: User: arn:aws:iam::152683116:user/dmstestusr is not authorized to perform: dms:ModifyReplicationInstance on resource: arn:aws:dms:us-east-1:152683116:rep:46DHOU7JOJYOJXWDOZNFEN $ aws dms add-tags-to-resource --resource-name arn:aws:dms:us-east-1:152683116:rep:46DHOU7JOJYOJXWDOZNFEN --tags Key=CostCenter,Value=1234 A client error (AccessDeniedException) occurred when calling the AddTagsToResource operation: User: arn:aws:iam::152683116:user/dmstestusr is not authorized to perform: dms:AddTagsToResource on resource: arn:aws:dms:us-east-1:152683116:rep:46DHOU7JOJYOJXWDOZNFEN $ aws dms remove-tags-from-resource --resource-name arn:aws:dms:us-east-1:152683116:rep:46DHOU7JOJYOJXWDOZNFEN --tag-keys Env A client error (AccessDeniedException) occurred when calling the RemoveTagsFromResource operation: User: arn:aws:iam::152683116:user/dmstestusr is not authorized to perform: dms:RemoveTagsFromResource on resource: arn:aws:dms:us-east-1:152683116:rep:46DHOU7JOJYOJXWDOZNFEN

次のポリシーでは、タグの値が「Desktop」、タグキーが「Env」の AWS DMSエンドポイントへのアクセスを制限します。

{ "Version": "2012-10-17", "Statement": [ { "Action": [ "dms:*" ], "Effect": "Deny", "Resource": "*", "Condition": { "StringEquals": { "dms:endpoint-tag/Env": [ "Desktop" ] } } } ] }

次のコマンドは、タグの値が「Desktop」で、タグキーが「Env」の場合にアクセスを制限する IAM ポリシーに基づいて、成功または失敗します。

$ aws dms list-tags-for-resource --resource-name arn:aws:dms:us-east-1:152683116:endpoint:J2YCZPNGOLFY52344IZWA6I { "TagList": [ { "Value": "Desktop", "Key": "Env" } ] } $ aws dms delete-endpoint --endpoint-arn "arn:aws:dms:us-east-1:152683116:endpoint:J2YCZPNGOLFY52344IZWA6I" A client error (AccessDeniedException) occurred when calling the DeleteEndpoint operation: User: arn:aws:iam::152683116:user/dmstestusr is not authorized to perform: dms:DeleteEndpoint on resource: arn:aws:dms:us-east-1:152683116:endpoint:J2YCZPNGOLFY52344IZWA6I $ aws dms modify-endpoint --endpoint-arn "arn:aws:dms:us-east-1:152683116:endpoint:J2YCZPNGOLFY52344IZWA6I" A client error (AccessDeniedException) occurred when calling the ModifyEndpoint operation: User: arn:aws:iam::152683116:user/dmstestusr is not authorized to perform: dms:ModifyEndpoint on resource: arn:aws:dms:us-east-1:152683116:endpoint:J2YCZPNGOLFY52344IZWA6I $ aws dms add-tags-to-resource --resource-name arn:aws:dms:us-east-1:152683116:endpoint:J2YCZPNGOLFY52344IZWA6I --tags Key=CostCenter,Value=1234 A client error (AccessDeniedException) occurred when calling the AddTagsToResource operation: User: arn:aws:iam::152683116:user/dmstestusr is not authorized to perform: dms:AddTagsToResource on resource: arn:aws:dms:us-east-1:152683116:endpoint:J2YCZPNGOLFY52344IZWA6I $ aws dms remove-tags-from-resource --resource-name arn:aws:dms:us-east-1:152683116:endpoint:J2YCZPNGOLFY52344IZWA6I --tag-keys Env A client error (AccessDeniedException) occurred when calling the RemoveTagsFromResource operation: User: arn:aws:iam::152683116:user/dmstestusr is not authorized to perform: dms:RemoveTagsFromResource on resource: arn:aws:dms:us-east-1:152683116:endpoint:J2YCZPNGOLFY52344IZWA6I

次のポリシーでは、タグの値が「Desktop」、タグキーが「Env」のレプリケーションタスクへのアクセスを制限します。

{ "Version": "2012-10-17", "Statement": [ { "Action": [ "dms:*" ], "Effect": "Deny", "Resource": "*", "Condition": { "StringEquals": { "dms:task-tag/Env": [ "Desktop" ] } } } ] }

次のコマンドは、タグの値が「Desktop」で、タグキーが「Env」の場合にアクセスを制限する IAM ポリシーに基づいて、成功または失敗します。

$ aws dms list-tags-for-resource --resource-name arn:aws:dms:us-east-1:152683116:task:RB7N24J2XBUPS3RFABZTG3 { "TagList": [ { "Value": "Desktop", "Key": "Env" } ] } $ aws dms delete-replication-task --replication-task-arn "arn:aws:dms:us-east-1:152683116:task:RB7N24J2XBUPS3RFABZTG3" A client error (AccessDeniedException) occurred when calling the DeleteReplicationTask operation: User: arn:aws:iam::152683116:user/dmstestusr is not authorized to perform: dms:DeleteReplicationTask on resource: arn:aws:dms:us-east-1:152683116:task:RB7N24J2XBUPS3RFABZTG3 $ aws dms add-tags-to-resource --resource-name arn:aws:dms:us-east-1:152683116:task:RB7N24J2XBUPS3RFABZTG3 --tags Key=CostCenter,Value=1234 A client error (AccessDeniedException) occurred when calling the AddTagsToResource operation: User: arn:aws:iam::152683116:user/dmstestusr is not authorized to perform: dms:AddTagsToResource on resource: arn:aws:dms:us-east-1:152683116:task:RB7N24J2XBUPS3RFABZTG3 $ aws dms remove-tags-from-resource --resource-name arn:aws:dms:us-east-1:152683116:task:RB7N24J2XBUPS3RFABZTG3 --tag-keys Env A client error (AccessDeniedException) occurred when calling the RemoveTagsFromResource operation: User: arn:aws:iam::152683116:user/dmstestusr is not authorized to perform: dms:RemoveTagsFromResource on resource: arn:aws:dms:us-east-1:152683116:task:RB7N24J2XBUPS3RFABZTG3

暗号化キーの設定と AWS KMS のアクセス許可の指定

AWS DMS は、レプリケーションインスタンスにより使用されるストレージと、エンドポイント接続情報を暗号化します。レプリケーションインスタンスで使用されるストレージを暗号化するために、AWS DMS では AWS アカウントに固有の AWS Key Management Service (AWS KMS) キーを使用します。このキーは、AWS KMS で表示し、管理できます。アカウント (aws/dms) でデフォルトの AWS KMS キーを使用できます。あるいは、カスタム AWS KMS キーを作成できます。既存の AWS KMS キーがある場合、暗号化にそのキーを使用することもできます。

注記

暗号化キーとして使用するカスタムまたは既存の AWS KMS キーは、対称キーである必要があります。AWS DMS では、非対称暗号化キーの使用がサポートされていません。対称暗号化キーと非対称暗号化キーの詳細については、AWS Key Management Service 開発者ガイドの「https://docs.aws.amazon.com/kms/latest/developerguide/symmetric-asymmetric.html」を参照してください。

[レプリケーションインスタンスの作成] ページの [詳細] セクションからカスタム AWS KMS マスターキーを選択していない場合、デフォルトの AWS KMS キー (aws/dms) は、最初にレプリケーションインスタンスを起動したときに作成されます。デフォルトの AWS KMS キーを使用している場合は、移行のために使用している IAM ユーザーアカウントに付与する必要がある唯一のアクセス許可は、kms:ListAliaseskms:DescribeKey です。デフォルトの AWS KMS キーの使用に関する詳細については、「AWS DMS の使用に必要な IAM アクセス許可」を参照してください。

カスタム AWS KMS キーを使用するには、次のいずれかのオプションを使用して、カスタム AWS KMS キーに権限を割り当てます。

  • 移行に使用する IAM ユーザーアカウントを、AWS KMS カスタムキーのキー管理者あるいはキーユーザーとして追加します。これにより、IAM ユーザーアカウントに必要な AWS KMS 権限が確実に付与されます。このアクションは、AWS DMS を使用するために IAM ユーザーアカウントに付与する IAM のアクセス許可に追加されます。キーユーザーへのアクセス権限の付与の詳細については、『AWS Key Management Service Developer Guide』の「キーユーザーに CMK の使用を許可する」を参照してください。

  • カスタム AWS KMS キーに対するキー管理者あるいはキーユーザーとして IAM ユーザーアカウントを追加したくない場合、AWS DMSを使用するために IAM ユーザーアカウントに付与する必要がある IAM のアクセス許可に、次のアクセス許可を追加で付与してください。

    { "Effect": "Allow", "Action": [ "kms:ListAliases", "kms:DescribeKey", "kms:CreateGrant", "kms:Encrypt", "kms:ReEncrypt*" ], "Resource": "*" },

AWS DMS には AWS KMS キーエイリアスも使用できます。独自の AWS KMS キーを作成して AWS KMS キーへのアクセスをユーザーに許可する方法の詳細については、「KMS 開発者ガイド」を参照してください。

AWS KMS キー識別子を指定しない場合、AWS DMS はデフォルトの暗号化キーを使用します。AWS KMS は、AWS アカウントの AWS DMS のデフォルトの暗号化キーを作成します。AWS アカウントには、AWS のリージョンごとにデフォルトの暗号化キーがあります。

AWS DMS リソースの暗号化に使用される AWS KMS キーを管理するには、AWS Key Management Service を使用します。AWS KMS は、安全で可用性の高いハードウェアとソフトウェアを組み合わせて、クラウド向けに拡張されたキー管理システムを提供します。AWS KMS を使用して、暗号化キーを作成し、それらのキーの使用方法を制御するポリシーを定義できます。

次の AWS マネジメントコンソール で AWS KMS を見つけることができます。

  1. AWS マネジメントコンソール にサインインし、AWS Key Management Service (AWS KMS) コンソール (https://console.aws.amazon.com/kms) を開きます。

  2. AWS リージョンを変更するには、ページの右上隅にあるリージョンセレクターを使用します。

  3. AWS KMS キーを操作するには、次のいずれかのオプションを選択します。

    • AWS により自動的に作成および管理されているアカウント内のキーを表示するには、ナビゲーションペインで [AWS managed keys (AWS で管理されたキー)] を選択します。

    • ユーザーが作成および管理するアカウント内のキーを表示するには、ナビゲーションペインで [Customer managed keys (カスタマー管理型のキー)] を選択します。

AWS KMS は AWS CloudTrail をサポートしているため、キーの使用を監査して、キーが適切に使用されていることを確認できます。AWS KMS キーは、AWS DMS と、Amazon RDS、Amazon S3、Amazon Redshift、および Amazon EBS などのサポートされている AWS サービスの組み合わせで使用できます。

また、次の AWS DMS エンドポイントでターゲットデータを暗号化するためだけにカスタム AWS KMS キーを作成することができます。

AWS KMS キーを使用して AWS DMS リソースを作成した後に、リソースの暗号化キーを変更することはできません。AWS DMS リソースを作成する前に、必ず暗号化キーの要件を確認してください。

AWS Database Migration Service のネットワークセキュリティ

AWS Database Migration Service を使用するときに作成するネットワークのセキュリティ要件は、ネットワークの設定方法によって異なります。AWS DMS のネットワークセキュリティの一般的なルールは次のとおりです。

  • レプリケーションインスタンスは、ソースとターゲットのエンドポイントにアクセスできる必要があります。レプリケーションインスタンスのセキュリティグループには、データベースポートでデータベースエンドポイントへの送信をインスタンスに許可するネットワーク ACL またはルールが必要です。

  • データベースエンドポイントには、レプリケーションインスタンスからの受信アクセスを許可するネットワーク ACL およびセキュリティグループルールを含める必要があります。これは、構成に応じて、レプリケーションインスタンスのセキュリティグループ、プライベート IP アドレス、パブリック IP アドレス、または NAT ゲートウェイのパブリックアドレスを使用して実現できます。

  • ネットワークで VPN トンネルが使用されている場合、NAT ゲートウェイとして機能する Amazon EC2 インスタンスは、レプリケーションインスタンスにそのゲートウェイを通じたトラフィックの送信を許可するセキュリティグループを使用する必要があります。

デフォルトでは、AWS DMS レプリケーションインスタンスにより使用される VPC セキュリティグループに、すべてのポートで 0.0.0.0/0 への送信を許可するルールがあります。このセキュリティグループを変更するか、独自のセキュリティグループを使用する場合、少なくとも、対応するデータベースポートでソースおよびターゲットエンドポイントへの送信が許可される必要があります。

データベース移行に使用できるネットワーク構成には、それぞれ固有のセキュリティ上の考慮事項があります。

  • すべてのデータベース移行コンポーネントが 1 つの VPC にある設定 — エンドポイントで使用されるセキュリティグループは、データベースポートでレプリケーションインスタンスからの進入を許可する必要があります。レプリケーションインスタンスによって使用されるセキュリティグループでエンドポイントへの受信が許可されることを確認してください。または、エンドポイントにより使用されるセキュリティグループに、レプリケーションインスタンスのプライベート IP アドレスにアクセスを許可するセキュリティルールを作成できます。

  • 2 つの VPC がある設定 — レプリケーションインスタンスで使用されるセキュリティグループには、VPC の範囲とデータベースの DB ポートに関するルールが必要です。

  • AWS Direct Connect または VPN を使用した VPC へのネットワークの設定 — VPC からオンプレミス VPN へのトンネルに向かうトラフィックを許可する VPN トンネル。この設定では、特定の IP アドレスまたは範囲に向かうトラフィックを、VPC からオンプレミス VPN へのトラフィックをブリッジできるホストに送信するルーティングルールが VPC に含まれています。この場合、レプリケーションインスタンスのプライベート IP アドレスまたはセキュリティグループから NAT インスタンスへのトラフィックを許可する必要がある独自のセキュリティグループ設定が NAT ホストに含まれています。

  • インターネットを使用した VPC へのネットワークの設定 — VPC セキュリティグループには、VPC に向かわないトラフィックをインターネットゲートウェイに送信するルーティングルールが含まれている必要があります。この設定では、エンドポイントへの接続がレプリケーションインスタンス上のパブリック IP アドレスから行われているように見えます。

  • ClassicLink を使用して VPC 内に存在しない Amazon RDS DB インスタンスを VPC 内の DB インスタンスに設定 — ソースまたはターゲットの Amazon RDS DB インスタンスが VPC 内になく、レプリケーションインスタンスが存在する VPC とセキュリティグループを共有していない場合、プロキシサーバーを設定し、ClassicLink を使用してソースおよびターゲットのデータベースに接続できます。

  • ソースエンドポイントがレプリケーションインスタンスで使用されている VPC の外にあり、NAT のゲートウェイを使用している — 単一の Elastic network interface にバインドされた単一の Elastic IP アドレスを使用してネットワークアドレス変換 (NAT) ゲートウェイを設定します。次に、この Elastic network interface は NAT 識別子 (nat-#####) を受け取ります。インターネットゲートウェイではなくその NAT ゲートウェイへのデフォルトルートが VPC に含まれている場合、レプリケーションインスタンスはインターネットゲートウェイのパブリック IP アドレスを使用してデータベースエンドポイントに接続しているように見えます。この場合、VPC 外のデータベースエンドポイントへの進入は、レプリケーションインスタンスのパブリック IP アドレスではなく NAT アドレスからの進入を許可する必要があります。

AWS Database Migration Service での SSL の使用

Secure Sockets Layer (SSL) を使用することで、ソースおよびターゲットエンドポイントへの接続を暗号化できます。これを行うには、AWS DMS マネジメントコンソールまたは AWS DMS API を使用してエンドポイントに証明書を割り当てます。AWS DMS コンソールを使用して証明書を管理することもできます。

すべてのデータベースが同じ方法で SSL を使用するわけではありません。MySQL と互換性がある Amazon Aurora は、SSL のエンドポイントとして、サーバー名、クラスター内のプライマリインスタンスのエンドポイントを使用します。Amazon Redshift エンドポイントではすでに SSL 接続が使用されているため、AWS DMS によりセットアップされた SSL 接続は必要ありません。Oracle エンドポイントには追加の手順が必要です。詳細については、「Oracle エンドポイントでの SSL のサポート」を参照してください。

エンドポイントに証明書を割り当てるには、ルート証明書を指定するか、エンドポイントにデプロイされるサーバー SSL 証明書の署名に使用された、ルートに導く (証明書バンドルとして) 中間 CA 証明書チェーンを指定します。証明書は、PEM 形式の X509 ファイルとしてのみ受け入れられます。証明書をインポートすると、エンドポイントにその証明書を指定するために使用できる Amazon リソースネーム (ARN) を受け取ります。Amazon RDS を使用する場合は、Amazon RDS によってホストされている rds-combined-ca-bundle.pem ファイルで提供されているルート CA と証明書バンドルをダウンロードできます。このファイルのダウンロードの詳細については、『Amazon RDS ユーザーガイド』の「SSL/TLS を使用した DB インスタンスへの接続の暗号化」を参照してください。

SSL 証明書認証に使用する SSL モードは、複数の中から選択できます。

  • none – 接続は暗号化されていません。このオプションは安全ではありませんが、必要なオーバーヘッドが小さくなります。

  • require – 接続は SSL (TLS) を使用して暗号化されますが、CA 検証は行われません。このオプションは安全性が高まりますが、必要なオーバーヘッドが増えます。

  • verify-ca – 接続は暗号化されています。このオプションは安全性が高まりますが、必要なオーバーヘッドが増えます。このオプションでは、サーバー証明書が認証されます。

  • verify-full – 接続は暗号化されています。このオプションは安全性が高まりますが、必要なオーバーヘッドが増えます。このオプションでは、サーバー証明書が認証され、サーバーのホスト名が証明書のホスト名属性と一致することが確認されます。

すべての SSL モードがすべてのデータベースエンドポイントで機能するわけではありません。次の表は、各データベースエンジンでサポートされている SSL モードを示しています。

DB エンジン

none

require

verify-ca

verify-full

MySQL/MariaDB/Amazon Aurora MySQL

デフォルト値 サポート外 サポート対象 サポート対象

Microsoft SQL Server

デフォルト値 サポート対象 サポート外 サポート対象

PostgreSQL

デフォルト値 サポート対象 サポート対象 サポート対象

Amazon Redshift

デフォルト値 SSL が有効でない SSL が有効でない SSL が有効でない

Oracle

デフォルト値 サポート外 サポート対象 サポート外

SAP ASE

デフォルト値 SSL が有効でない SSL が有効でない サポート対象

MongoDB

デフォルト値 サポート対象 サポート外 サポート対象

Db2 LUW

デフォルト値 サポート外 サポート対象 サポート外

AWS DMS で SSL を使用する場合の制限

AWS DMS で SSL を使用する際の制限事項を次に示します。

  • Amazon Redshift ターゲットエンドポイントへの SSL 接続はサポートされていません。AWS DMS では Amazon S3 バケットを使用して Amazon Redshift データベースにデータを転送します。この転送は、デフォルトで Amazon Redshift によって暗号化されます。

  • SSL が有効な Oracle エンドポイントで変更データキャプチャ (CDC) タスクを実行すると、SQL タイムアウトが発生することがあります。CDC カウンターに想定の数値が反映されないという問題がある場合は、タスク設定の ChangeProcessingTuning セクションの MinimumTransactionSize パラメータに小さい値を設定します。最低値 100 から始めることができます。MinimumTransactionSize パラメータの詳細については、「変更処理のチューニング設定」を参照してください。

  • インポートできる証明書の形式は、.pem 形式および .sso(Oracle ウォレット)形式のみです。

  • 場合によっては、サーバーの SSL 証明書が中間認証局 (CA) によって署名されていることがあります。その場合は、中間 CA からルート CA までの証明書チェーン全体が 1 つの.pem ファイルとしてインポートされていることを確認します。

  • サーバーで自己署名証明書を使用している場合、SSL モードとして [require] を選択します。require SSL モードでは、サーバーの SSL 証明書が暗黙的に信頼され、証明書が CA により署名されたかどうかの検証は試行されません。

証明書の管理

DMS コンソールを使用すると、SSL 証明書を表示および管理できます。DMS コンソールを使用して証明書をインポートすることもできます。


                     AWS Database Migration Service SSL 証明書の管理

MySQL 互換、PostgreSQL、または SQL Server のエンドポイントでの SSL の有効化

新しく作成したエンドポイントまたは既存のエンドポイントに SSL 接続を追加できます。

SSL を使用する AWS DMS エンドポイントを作成するには

  1. AWS マネジメントコンソールにサインインし、AWS Database Migration Service を選択します。

    注記

    AWS Identity and Access Management (IAM) ユーザーとしてサインインしている場合、AWS DMS にアクセスするための適切なアクセス許可が必要です。データベース移行に必要なアクセス許可の詳細については、「AWS DMS の使用に必要な IAM アクセス許可」を参照してください。

  2. ナビゲーションペインで [Certificates] を選択します。

  3. [Import Certificate] を選択します。

  4. エンドポイントへの接続の暗号化に使用する証明書をアップロードします。

    注記

    エンドポイントを作成または変更するときに、[データベースエンドポイントの作成] ページで [新しい CA 証明書の追加] を選択することにより、AWS DMS コンソールを使用して証明書をアップロードすることもできます。

  5. ステップ 3: ソースとターゲットのエンドポイントを指定する」での説明に従って、エンドポイントを作成します。

SSL を使用できるように既存の AWS DMS エンドポイントを変更するには

  1. AWS マネジメントコンソールにサインインし、AWS Database Migration Service を選択します。

    注記

    AWS Identity and Access Management (IAM) ユーザーとしてサインインしている場合、AWS DMS にアクセスするための適切なアクセス許可が必要です。データベース移行に必要なアクセス許可の詳細については、「AWS DMS の使用に必要な IAM アクセス許可」を参照してください。

  2. ナビゲーションペインで [Certificates] を選択します。

  3. [Import Certificate] を選択します。

  4. エンドポイントへの接続の暗号化に使用する証明書をアップロードします。

    注記

    エンドポイントを作成または変更するときに、[データベースエンドポイントの作成] ページで [新しい CA 証明書の追加] を選択することにより、AWS DMS コンソールを使用して証明書をアップロードすることもできます。

  5. ナビゲーションペインで、[Endpoints] を選択し、変更するエンドポイントを選択して [Modify] を選択します。

  6. SSL モードの値を選択します。

    [verify-ca] モードまたは [verify-full] モードを選択した場合は、次に示すように、使用する証明書を [CA 証明書] に指定します。

    
                             AWS Database Migration Service SSL 証明書の管理
  7. [Modify] を選択します。

  8. エンドポイントが変更されている場合は、エンドポイントを選択して [接続のテスト] を選択し、SSL 接続が機能しているかどうかを調べます。

ソースおよびターゲットエンドポイントを作成したら、これらのエンドポイントを使用するタスクを作成します。タスクの作成に関する詳細については、「ステップ 4: タスクを作成する」を参照してください。

Oracle エンドポイントでの SSL のサポート

AWS DMS Oracle エンドポイントは、none および verify-ca SSL モードの SSL V3 をサポートします。Oracle エンドポイントで SSL を使用するには、.pem 証明書ファイルの代わりにエンドポイント用の Oracle ウォレットをアップロードします。

Oracle SSL への既存の証明書の使用

既存の Oracle クライアントインストールを使用して CA 証明書ファイルから Oracle ウォレットファイルを作成するには、以下の手順を実行します。

AWS DMS で Oracle SSL に既存の Oracle クライアントインストールを使用するには

  1. 以下のコマンドを実行して、ORACLE_HOME システム変数を dbhome_1 ディレクトリの場所に設定します。

    prompt>export ORACLE_HOME=/home/user/app/user/product/12.1.0/dbhome_1
  2. $ORACLE_HOME/libLD_LIBRARY_PATH システム変数に追加します。

    prompt>export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$ORACLE_HOME/lib
  3. $ORACLE_HOME/ssl_wallet に Oracle Wallet のディレクトリを作成します。

    prompt>mkdir $ORACLE_HOME/ssl_wallet
  4. CA 証明書ファイル .pemssl_wallet ディレクトリに配置します。Amazon RDS を使用する場合は、Amazon RDS によってホストされる rds-ca-2015-root.pem ルート CA 証明書ファイルをダウンロードできます。このファイルのダウンロードの詳細については、『Amazon RDS ユーザーガイド』の「SSL/TLS を使用した DB インスタンスへの接続の暗号化」を参照してください。

  5. 以下のコマンドを実行して Oracle Wallet を作成します。

    prompt>orapki wallet create -wallet $ORACLE_HOME/ssl_wallet -auto_login_only prompt>orapki wallet add -wallet $ORACLE_HOME/ssl_wallet -trusted_cert -cert $ORACLE_HOME/ssl_wallet/ca-cert.pem -auto_login_only

ここまでの手順を完了したら、ImportCertificate API コールで certificate-wallet パラメータを指定してウォレットファイルをインポートできます。Oracle エンドポイントの作成または変更時に SSL モードとして verify-ca を選択すると、インポートされたウォレット証明書を使用できます。

注記

Oracle ウォレットはバイナリファイルです。AWS DMS ではこれらのファイルがそのまま使用されます。

Oracle SSL への自己署名証明書の使用

Oracle SSL に自己署名証明書を使用するには、以下の手順を実行します。

AWS DMS で Oracle SSL に自己署名証明書を使用するには

  1. 自己署名証明書で使用するディレクトリを作成します。

    mkdir SELF_SIGNED_CERT_DIRECTORY
  2. 前の手順で作成したディレクトリに移動します。

    cd SELF_SIGNED_CERT_DIRECTORY
  3. ルートキーを作成します。

    openssl genrsa -out self-rootCA.key 2048
  4. 前の手順で作成したルートキーを使用して、ルート証明書に自己署名します。

    openssl req -x509 -new -nodes -key self-rootCA.key -sha256 -days 1024 -out self-rootCA.pem
  5. Oracle データベース用の Oracle ウォレットディレクトリを作成します。

    mkdir $ORACLE_HOME/self_signed_ssl_wallet
  6. 新しい Oracle ウォレットを作成します。

    orapki wallet create -wallet $ORACLE_HOME/self_signed_ssl_wallet -pwd password -auto_login_local
  7. Oracle ウォレットにルート証明書を追加します。

    orapki wallet add -wallet $ORACLE_HOME/self_signed_ssl_wallet -trusted_cert -cert self-rootCA.pem -pwd password
  8. Oracle ウォレットの内容のリストを表示します。リストにはルート証明書が含まれます。

    orapki wallet display -wallet $ORACLE_HOME/self_signed_ssl_wallet
  9. ORAPKI ユーティリティを使用して証明書署名リクエスト (CSR) を生成します。

    orapki wallet add -wallet $ORACLE_HOME/self_signed_ssl_wallet -dn "CN=dms" -keysize 2048 -sign_alg sha256 -pwd password
  10. 次のコマンドを実行します。

    openssl pkcs12 -in $ORACLE_HOME/self_signed_ssl_wallet/ewallet.p12 -nodes -out nonoracle_wallet.pem
  11. 共通名として「dms」を指定します。

    openssl req -new -key nonoracle_wallet.pem -out self-signed-oracle.csr
  12. 証明書の署名を取得します。

    openssl req -noout -text -in self-signed-oracle.csr | grep -i signature
  13. ステップ 12 からの出力が sha1WithRSAEncryption または sha256WithRSAEncryption の場合は、次のコードを実行します。

    openssl x509 -req -in self-signed-oracle.csr -CA self-rootCA.pem -CAkey self-rootCA.key -CAcreateserial -out self-signed-oracle.crt -days 365 -sha256
  14. ステップ 12 が md5WithRSAEncryption の場合は、以下のコードを実行します。

    openssl x509 -req -in self-signed-oracle.csr -CA self-rootCA.pem -CAkey self-rootCA.key -CAcreateserial -out self-signed-oracle.crt -days 365 -sha256
  15. 証明書をウォレットに追加します。

    orapki wallet add -wallet $ORACLE_HOME/self_signed_ssl_wallet -user_cert -cert self-signed-oracle.crt -pwd password
  16. sqlnet.ora ファイル ($ORACLE_HOME/network/admin/sqlnet.ora) を設定します。

    WALLET_LOCATION = (SOURCE = (METHOD = FILE) (METHOD_DATA = (DIRECTORY = ORACLE_HOME/self_signed_ssl_wallet) ) ) SQLNET.AUTHENTICATION_SERVICES = (NONE) SSL_VERSION = 1.0 SSL_CLIENT_AUTHENTICATION = FALSE SSL_CIPHER_SUITES = (SSL_RSA_WITH_AES_256_CBC_SHA)
  17. Oracle リスナーを停止します。

    lsnrctl stop
  18. listener.ora ファイル ($ORACLE_HOME/network/admin/listener.ora) に SSL のエントリを追加します。

    SSL_CLIENT_AUTHENTICATION = FALSE WALLET_LOCATION = (SOURCE = (METHOD = FILE) (METHOD_DATA = (DIRECTORY = ORACLE_HOME/self_signed_ssl_wallet) ) ) SID_LIST_LISTENER = (SID_LIST = (SID_DESC = (GLOBAL_DBNAME = SID) (ORACLE_HOME = ORACLE_HOME) (SID_NAME = SID) ) ) LISTENER = (DESCRIPTION_LIST = (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = localhost.localdomain)(PORT = 1521)) (ADDRESS = (PROTOCOL = TCPS)(HOST = localhost.localdomain)(PORT = 1522)) (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521)) ) )
  19. tnsnames.ora ファイル ($ORACLE_HOME/network/admin/tnsnames.ora) を設定します。

    <SID>= (DESCRIPTION= (ADDRESS_LIST = (ADDRESS=(PROTOCOL = TCP)(HOST = localhost.localdomain)(PORT = 1521)) ) (CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME = <SID>) ) ) <SID>_ssl= (DESCRIPTION= (ADDRESS_LIST = (ADDRESS=(PROTOCOL = TCPS)(HOST = localhost.localdomain)(PORT = 1522)) ) (CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME = <SID>) ) )
  20. Oracle リスナーを再起動します。

    lsnrctl start
  21. Oracle リスナーの状態を表示します。

    lsnrctl status
  22. sqlplus と SSL tnsnames エントリを使用して、localhost からデータベースへの SSL 接続をテストします。

    sqlplus -L ORACLE_USER@SID_ssl
  23. SSL を使用して正常に接続したことを確認します。

    SELECT SYS_CONTEXT('USERENV', 'network_protocol') FROM DUAL; SYS_CONTEXT('USERENV','NETWORK_PROTOCOL') -------------------------------------------------------------------------------- tcps
  24. 現在のディレクトリを自己署名証明書のあるディレクトリに変更します。

    cd SELF_SIGNED_CERT_DIRECTORY
  25. AWS DMS で使用される新しいクライアント Oracle ウォレットを作成します。

    orapki wallet create -wallet ./ -auto_login_only
  26. Oracle ウォレットに自己署名証明書を追加します。

    orapki wallet add -wallet ./ -trusted_cert -cert rootCA.pem -auto_login_only
  27. AWS DMS で使用される Oracle ウォレットの内容のリストを表示します。リストには自己署名証明書が含まれます。

    orapki wallet display -wallet ./
  28. 作成した Oracle ウォレットを AWS DMS にアップロードします。

データベースのパスワードの変更

ほとんどの状況では、ソースまたはターゲットエンドポイント用のデータベースのパスワードを変更するのは簡単です。移行またはレプリケーションタスクで現在使用しているエンドポイント用のデータベースのパスワードを変更する必要がある場合、そのプロセスは少し複雑になります。以下の手順は、その方法を示しています。

移行またはレプリケーションタスクでエンドポイント用のデータベースのパスワードを変更するには

  1. AWS マネジメントコンソールにサインインし、AWS DMS を選択します。AWS Identity and Access Management (IAM) ユーザーとしてサインインしている場合、AWS DMS にアクセスするための適切なアクセス許可が必要です。必要なアクセス権限の詳細については、「AWS DMS の使用に必要な IAM アクセス許可」を参照してください。

  2. ナビゲーションペインで、[Tasks] を選択します。

  3. データベースのパスワードを変更するエンドポイントを使用するタスクを選択してから、[Stop] を選択します。

  4. タスクが停止されている間、データベースの操作に使用するネイティブツールを使用して、エンドポイント用のデータベースのパスワードを変更できます。

  5. DMS マネジメントコンソールに戻り、ナビゲーションペインから [Endpoints] を選択します。

  6. パスワードを変更したデータベースのエンドポイントを選択してから、[Modify] を選択します。

  7. [Password] ボックスに新しいパスワードを入力し、[Modify] を選択します。

  8. ナビゲーションペインから [Tasks] を選択します。

  9. 先ほど停止したタスクを選択してから、[Start/Resume] を選択します。

  10. タスクを続行する方法に応じて、[Start] または [Resume] のいずれかを選択してから、[Start task] を選択します。