ElastiCache for Redis転送時の暗号化 (TLS) - Amazon ElastiCache for Redis

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

ElastiCache for Redis転送時の暗号化 (TLS)

データを安全に保つために、Amazon ElastiCache および Amazon EC2 は、サーバーのデータへの不正アクセスに対する防御メカニズムを提供します。ElastiCache では転送時の暗号化機能を提供されるため、ある場所から別の場所に移動しているデータの保護ツールとして使用できます。たとえば、レプリケーショングループ内でプライマリノードからリードレプリカノードへ、またはレプリケーショングループとアプリケーションの間で、データを移動するとします。

転送時の暗号化はオプションであり、Redis レプリケーショングループの作成時にのみ、そのレプリケーショングループで有効にできます。転送時の暗号化は、レプリケーショングループの作成時にレプリケーショングループ上でパラメーター TransitEncryptionEnabledtrue (CLI:  --transit-encryption-enabled) に設定することで有効にします。これは、AWS Management Console、AWS CLI、または ElastiCache API のいずれを使用してレプリケーショングループを作成しても、実行できます。転送時の暗号化を有効にする場合、CacheSubnetGroup の値も指定する必要があります。

重要

パラメーター TransitEncryptionEnabled (CLI: --transit-encryption-enabled) は、CreateReplicationGroup (CLI: create-replication-group) オペレーションを使用する場合にのみ使用できます。

転送時の暗号化の概要

Amazon ElastiCachein-transit 暗号化は、最も脆弱なポイントでデータのセキュリティを向上させるオプション機能です。—ある場所から別の場所に転送中の場合。エンドポイントでデータの暗号化と復号を行うにはある程度の処理が必要であるため、転送時の暗号化を有効にするとパフォーマンスに影響を及ぼす可能性があります。転送時の暗号化の使用時と未使用時でデータのベンチマークを取得して、ユースケースにおけるパフォーマンス影響を判断する必要があります。

ElastiCache 転送時の暗号化では、次の機能が実装されます。

  • 暗号化接続 — サーバーとクライアントの両方の接続が、Secure Socket Layer (SSL) で暗号化されます。

  • 暗号化レプリケーション — プライマリノードとレプリカ ノード間を移動するデータが暗号化されます。

  • サーバー認証 — クライアントは、適切なサーバーに接続していることを認証できます。

  • クライアント認証 — Redis AUTH 機能を使用して、サーバーはクライアントを認証できます。

転送時の暗号化の条件

実装を計画する際は、以下の Amazon ElastiCache 転送時の暗号化の制約事項に留意する必要があります。

  • 転送時の暗号化は、Redis バージョン 3.2.6 および 4.0.10 以降を実行するレプリケーショングループでサポートされます。

  • 転送時の暗号化は、Amazon VPC で実行しているレプリケーショングループでのみサポートされます。

  • 転送時の暗号化は、次のノードタイプを実行しているレプリケーショングループでのみサポートされます。

    • R6g、R5、R4、R3

    • M6g、M5、M4、M3

    • T3、T2

    詳細については、「サポート対象のノードタイプ」を参照してください。

  • 転送時の暗号化は、パラメーター TransitEncryptionEnabledtrue に明示的に設定することで有効化されます。

  • 転送時の暗号化は、レプリケーショングループの作成時にのみレプリケーショングループで有効にできます。レプリケーショングループを変更して転送時の暗号化のオンとオフを切り替えることはできません。既存のレプリケーショングループ上への転送時の暗号化の実装についての詳細は、「転送時の暗号化を有効にする」を参照してください。

  • 転送時の暗号化が有効なレプリケーショングループに接続するためには、データベースは Transport Layer Security (TLS) が有効である必要があります。転送時の暗号化が有効化されていないレプリケーショングループに接続する場合、データベースは TLS を有効にすることはできません。

エンドポイントでデータの暗号化と復号を行うにはある程度の処理が必要であるため、転送時の暗号化の実装によりパフォーマンスが低下する可能性があります。自身のデータで転送時の暗号化使用時のベンチマークを暗号化なしの場合と比較して、実装におけるパフォーマンスの影響を判断してください。

ヒント

新しい接続の作成には高い負荷がかかる場合があるため、SSL 接続持続させることで転送時の暗号化のパフォーマンスへの影響を軽減させることができます。

転送時の暗号化を有効にする

AWS Management Console、AWS CLI、または ElastiCache API を使用して、Redis レプリケーショングループ用 ElastiCache の作成時に転送時の暗号化を有効にできます。

 

既存のクラスターでの転送時の暗号化を有効にする

転送時の暗号化は、Redis レプリケーショングループの作成時にのみ有効化できます。転送時の暗号化を有効化したい既存レプリケーショングループがある場合は、次の操作を行います。

既存の Redis レプリケーショングループ上で転送時の暗号化を有効にするには

  1. レプリケーショングループの手動バックアップを作成します。詳細については、「手動バックアップの作成」を参照してください。

  2. エンジンバージョンを 3.2.6、4.0.10 およびそれ以降に、パラメータ TransitEncryptionEnabledtrue (CLI: --transit-encryption-enabled) に設定し、バックアップから復元して新しいレプリケーショングループを作成します。詳細については、「オプションのクラスタサイズ変更によるバックアップからの復元」を参照してください。

  3. アプリケーションのエンドポイントを、新しいレプリケーショングループのエンドポイントに更新します。詳細については、「接続エンドポイントの検索」を参照してください。

  4. 古いレプリケーショングループを削除します。詳細については、以下を参照してください。

 

を使用した転送時の暗号化を有効にするAWS Management Console

AWS Management Console を使用してレプリケーショングループの作成時に転送時の暗号化を有効にするには、以下のように選択します。

  • エンジンとして Redis を選択します。

  • エンジンバージョン 3.2.6 または 4.0.10 以降。

  • 選択はいからの転送時の暗号化リストです。

詳しいステップについては、以下を参照ください。

 

を使用した転送時の暗号化を有効にするAWS CLI

AWS CLI を使用して Redis レプリケーショングループの作成時に転送時の暗号化を有効にするには、パラメーター transit-encryption-enabled を使用します。

転送時の暗号化を有効にするRedis (クラスターモードが無効)クラスター上 (CLI)

AWS CLI オペレーション create-replication-group と以下のパラメーターを使用して、転送時の暗号化が有効な、レプリカを持つ Redis レプリケーショングループを作成します。

主要パラメータ:

  • --engineredis を指定してください。

  • --engine-version—3.2.6 または 4.0.10 以降を指定する必要があります。

  • --transit-encryption-enabled — 必須。転送時の暗号化を有効にする場合、--cache-subnet-group パラメータの値も指定する必要があります。

  • --num-cache-clusters—1 以上 このパラメーターの最大値は 6 です。

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

のクラスターでの転送中暗号化の有効化Redis (クラスターモードが有効)(CLI)

AWS CLI オペレーション create-replication-group と以下のパラメーターを使用して、転送時の暗号化が有効な、Redis (クラスターモードが有効) レプリケーショングループを作成します。

主要パラメータ:

  • --engineredis を指定してください。

  • --engine-version—3.2.6 または 4.0.10 以降を指定する必要があります。

  • --transit-encryption-enabled — 必須。転送時の暗号化を有効にする場合、--cache-subnet-group パラメータの値も指定する必要があります。

  • 次のいずれかのパラメーターセットを使用して、レプリケーショングループのノード グループの構成を指定します。

    • --num-node-groups—このレプリケーショングループ内のシャード数 (ノードグループ数) を指定します。このパラメーターの最大値は 500 です。

      --replicas-per-node-group—各ノードグループ (シャード) のレプリカノードの数を指定します。ここで指定される値は、このレプリケーショングループのすべてのシャードに適用されます。このパラメーターの最大値は 5 です。

    • --node-group-configuration—各シャードの構成を個別に指定します。

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

 

を使用した転送時の暗号化を有効にするAWSAPI

Redis レプリケーショングループの作成時に ElastiCache API を使用して転送時の暗号化を有効にするには、単一ノード Redis レプリケーショングループの場合は CreateReplicationGroup を使用し、リードレプリカを持つレプリケーショングループの場合は CreateReplicationGroup を使用して、TransitEncryptionEnabled パラメーターを true に設定します。

のクラスターでの転送中暗号化の有効化Redis (クラスターモードが無効)(API)

ElastiCache API オペレーション CreateReplicationGroup と以下のパラメーターを使用して、転送時の暗号化が有効な、Redis (クラスターモードが無効) レプリケーショングループを作成します。

キーのパラメータ

  • Engineredis を指定してください。

  • EngineVersion—3.2.6 または 4.0.10 以降を指定する必要があります。

  • TransitEncryptionEnabledtrue に設定する必要があります。

    TransitEncryptionEnabledtrue に設定されている場合、CacheSubnetGroup の値も指定する必要があります。

  • NumCacheClusters—1 以上 このパラメーターの最大値は 6 です。

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

のクラスターでの転送中暗号化の有効化Redis (クラスターモードが有効)(API)

ElastiCache API オペレーション CreateReplicationGroup と以下のパラメーターを使用して、転送時の暗号化が有効な、Redis (クラスターモードが有効) レプリケーショングループを作成します。

キーのパラメータ

  • Engineredis を指定してください。

  • EngineVersion—3.2.6 または 4.0.10 以降を指定する必要があります。

  • TransitEncryptionEnabledtrue に設定する必要があります。

    TransitEncryptionEnabledtrue に設定されている場合、CacheSubnetGroup の値も指定する必要があります。

  • 次のいずれかのパラメーターセットを使用して、レプリケーショングループのノード グループの構成を指定します。

    • NumNodeGroups—このレプリケーショングループ内のシャード数 (ノードグループ数) を指定します。このパラメーターの最大値は500サービス制限の増加リクエストによって最大 250 まで増やすことができます。詳細については、「」を参照してください。AWSサービスの制限

      ReplicasPerNodeGroup—各ノードグループ (シャード) のレプリカノードの数を指定します。ここで指定される値は、このレプリケーショングループのすべてのシャードに適用されます。このパラメーターの最大値は 5 です。

    • NodeGroupConfiguration—各シャードの構成を個別に指定します。

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

に接続するAmazon ElastiCache for Redisredis-cli を使用して送信中の暗号化を有効にしたノード

データにアクセスするにはElastiCache for Redis送信中の暗号化を有効にして、Secure Socket Layer (SSL) を使用するクライアントを使用します。Amazon linuxやAmazon Linux 2ではTLS/SSLでredis-cliを使うこともできる。

redis-cli を使用して、Amazon Linux 2 または Amazon Linux で送信中の暗号化を有効にした Redis クラスターに接続するには

  1. redis-cli ユーティリティをダウンロードし、コンパイルします。このユーティリティは Redis ソフトウェアディストリビューションに含まれています。

  2. EC2 インスタンスのコマンドプロンプトで、以下のコマンドを入力します。

    Amazon Linux 2

    $ sudo yum -y install openssl-devel gcc $ wget http://download.redis.io/redis-stable.tar.gz $ tar xvzf redis-stable.tar.gz $ cd redis-stable $ make distclean $ make redis-cli BUILD_TLS=yes $ sudo install -m 755 src/redis-cli /usr/local/bin/

    Amazon Linux

    $ sudo yum install gcc jemalloc-devel openssl-devel tcl tcl-devel clang wget $ wget http://download.redis.io/redis-stable.tar.gz $ tar xvzf redis-stable.tar.gz $ cd redis-stable $ make redis-cli CC=clang BUILD_TLS=yes $ sudo install -m 755 src/redis-cli /usr/local/bin/

    Amazon Linux では、以下の追加ステップを実行する必要があります。

    sudo yum install clang CC=clang make sudo make install
  3. その後、オプションのmake-testコマンドを実行します。

  4. EC2 インスタンスのコマンドプロンプトで、次のコマンドを入力します。この例に示されているクラスターのエンドポイントやポートを、使用するクラスターのエンドポイントやポートに置き換えてください。

    redis-cli -h Primary or Configuration Endpoint --tls -p 6379

    エンドポイントを見つける方法の詳細については、「」ノードのエンドポイントを見つける

    次の例では、暗号化と認証がイネーブルになっているクラスターに接続します。

    redis-cli -h Primary or Configuration Endpoint --tls -a 'your-password' -p 6379

この問題を回避するには、stunnel コマンドを使用して Redis ノードへの SSL トンネルを作成します。次に、redis-cli を使用してそのトンネルに接続し、暗号化された Redis ノードからデータにアクセスします。

redis-cli を使用して送信中の暗号化を有効にした Redis クラスターに接続するには

  1. SSH を使用してクライアントに接続し、stunnel

    sudo yum install stunnel
  2. 次のコマンドを実行して、ファイルを作成します。'/etc/stunnel/redis-cli.conf'を同時に使用して、ElastiCache for Redisクラスタエンドポイントを 1 つまたは複数の接続パラメータに追加し、以下の出力をテンプレート:として使用します。

    vi /etc/stunnel/redis-cli.conf fips = no setuid = root setgid = root pid = /var/run/stunnel.pid debug = 7 delay = yes options = NO_SSLv2 options = NO_SSLv3 [redis-cli] client = yes accept = 127.0.0.1:6379 connect = primary.ssltest.wif01h.use1.cache.amazonaws.com:6379 [redis-cli-replica] client = yes accept = 127.0.0.1:6380 connect = ssltest-02.ssltest.wif01h.use1.cache.amazonaws.com:6379

    この例では、設定ファイルに redis-cliredis-cli-replica という 2 つの接続があります。パラメータは次のように設定されます。

    • この stunnel インスタンスがクライアントであることを指定するために、client は yes に設定されています。

    • accept はクライアント IP に設定されています。この例では、プライマリはポート 6379 の Redis のデフォルト 127.0.0.1 に設定されています。レプリカは別のポートを呼び出し、6380 に設定する必要があります。エフェメラルポート 1024 – 65535 を使用できます。詳細については、「」を参照してください。一時ポートAmazon VPC ユーザーガイド。

    • connect は Redis サーバーエンドポイントに設定されています。詳細については、「接続エンドポイントの検索」を参照してください。

  3. stunnel を起動します。

    sudo stunnel /etc/stunnel/redis-cli.conf

    netstat コマンドを使用して、トンネルが開始されたことを確認します。

    sudo netstat -tulnp | grep -i stunnel tcp 0 0 127.0.0.1:6379 0.0.0.0:* LISTEN 3189/stunnel tcp 0 0 127.0.0.1:6380 0.0.0.0:* LISTEN 3189/stunnel
  4. トンネルのローカルエンドポイントを使用して、暗号化された Redis ノードに接続します。

    • 中にAUTH パスワードを使用しなかった場合ElastiCache for Redisクラスターを作成する場合、この例では、redis-cli を使用してElastiCache for RedisAmazon Linuxでは、redis-cliの完全なパスを使用してサーバー:

      /home/ec2-user/redis-stable/src/redis-cli -h localhost -p 6379

      Redis クラスターの作成中に AUTH パスワードが使用された場合、この例では redis-cli を使用して、Amazon Linux で redis-cli の完全パスを使用して Redis サーバーに接続します。

      /home/ec2-user/redis-stable/src/redis-cli -h localhost -p 6379 -a my-secret-password

    または

    • ディレクトリを redis-stable に変更し、次の操作を行います。

      中にAUTH パスワードを使用しなかった場合ElastiCache for Redisクラスターを作成する場合、この例では、redis-cli を使用してElastiCache for RedisAmazon Linuxでは、redis-cliの完全なパスを使用してサーバー:

      src/redis-cli -h localhost -p 6379

      Redis クラスターの作成中に AUTH パスワードが使用された場合、この例では redis-cli を使用して、Amazon Linux で redis-cli の完全パスを使用して Redis サーバーに接続します。

      src/redis-cli -h localhost -p 6379 -a my-secret-password

    この例では、Telnet を使用して Redis サーバーに接続します。

    telnet localhost 6379 Trying 127.0.0.1... Connected to localhost. Escape character is '^]'. auth MySecretPassword +OK get foo $3 bar
  5. SSL トンネルを停止して閉じるには、pkill stunnel プロセスを実行します。

    sudo pkill stunnel

以下の資料も参照してください。