AWS Database Migration Service
ユーザーガイド (Version API Version 2016-01-01)

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 によって提供されたルート CA と証明書バンドルを https://s3.amazonaws.com/rds-downloads/rds-combined-ca-bundle.pem でダウンロードできます。

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 Database Migration Service で SSL を使用する場合の制限

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

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

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

  • サーバー SSL 証明書が中間 CA によって署名されている場合、中間 CA からルート CA に向かう証明書チェーン全体が単一の .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. エンドポイントへの接続の暗号化に使用する証明書をアップロードします。

    注記

    エンドポイントを作成または変更するときに、[Create database endpoint (データベースエンドポイントの作成)] ページで [Add new CA certificate (新しい 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. エンドポイントへの接続の暗号化に使用する証明書をアップロードします。

    注記

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

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

  6. [SSL mode] を選択します。

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

    
                                     AWS Database Migration Service SSL 証明書管理

  7. [Modify] を選択します。

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

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

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

AWS DMS の Oracle エンドポイントでは、noneverify-ca の SSL モードがサポートされています。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. LD_LIBRARY_PATH システム変数に $ORACLE_HOME/lib を追加します。

    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 証明書 .pem ファイルを ssl_wallet ディレクトリに配置します。Amazon RDS のお客様は、 https://s3.amazonaws.com/rds-downloads/rds-ca-2015-root.pem から RDS CA 証明書ファイルをダウンロードできます。

  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 ewallet.p12 -nodes -out nonoracle_wallet.pem
  11. 共通名として「dms」を指定します。

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

    openssl req -noout -text -in self-signed-oracle.csr | grep -i signature
  13. ステップ 12 が 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 certrequest.csr -CA self-rootCA.pem -CAkey self-rootCA.key -CAcreateserial -out certrequest.crt -days 365 -sha256
  15. 証明書をウォレットに追加します。

    orapki wallet add -wallet $ORACLE_HOME/self_signed_ssl_wallet -user_cert -cert certrequest.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 にアップロードします。