Redis 用 Amazon ElastiCache
Redis 用 ElastiCache ユーザーガイド (API バージョン 2015-02-02)

Redis 用 ElastiCache 伝送中の暗号化 (TLS)

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

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

重要

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

転送時の暗号化の概要

Amazon ElastiCache 転送時の暗号化は、データが最も脆弱になるポイント、つまりある場所から別の場所への転送時に、データの安全性を強化できるオプションの機能です。エンドポイントでデータの暗号化と復号を行うにはある程度の処理が必要であるため、転送時の暗号化を有効にするとパフォーマンスに影響を及ぼす可能性があります。転送時の暗号化の使用時と未使用時でデータのベンチマークを取得して、ユースケースにおけるパフォーマンス影響を判断する必要があります。

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

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

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

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

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

転送時の暗号化の条件

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

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

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

  • 転送時の暗号化は、最新世代のノードタイプを実行しているレプリケーショングループでのみサポートされます。以前の世代のノードタイプで実行中のレプリケーショングループではサポートされません。詳細については、「サポートされているノードの種類」を参照してください。

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

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

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

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

ヒント

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

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

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

 

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

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

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

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

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

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

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

 

AWS マネジメントコンソール を使用して転送時の暗号化を有効にする

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

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

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

  • [Encryption in-transit] リストから、[Yes] を選択します。

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

 

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 以上このパラメーターの最大値は six です。

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

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—このレプリケーショングループ内のシャード数 (ノードグループ数) を指定します。このパラメーターの最大値は 15 です。

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

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

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

 

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

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

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

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

主要パラメータ

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

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

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

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

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

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

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

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

主要パラメータ

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

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

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

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

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

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

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

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

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

redis-cli を使用して送信中の暗号化を有効にした Redis 用 Amazon ElastiCache ノードへの接続

送信中の暗号化を有効にした Redis ノードの ElastiCache のデータにアクセスするには、Secure Socket Layer (SSL) を使用するクライアントを使用します。ただし、redis-cli は SSL または Transport Layer Security (TLS) をサポートしていません。

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

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

  1. SSH クライアントから stunnel をインストールします。

    $ sudo yum install stunnel
  2. redis-cli.conf ファイルで、1 つまたは複数の接続パラメータに Redis クラスターエンドポイントを追加します。

    $ cat /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 = master.ssltest.wif01h.use1.cache.amazonaws.com:6379 [redis-cli-slave] client = yes accept = 127.0.0.1:6380 connect = ssltest-02.ssltest.wif01h.use1.cache.amazonaws.com:6379

    この例では、設定ファイルに redis-cliredis-cli-slave という 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 ノードに接続します。

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

    $ redis-cli -h localhost -p 6379 -a my-secret-password localhost:6379>set foo "bar" OK localhost:6379>get foo "bar"

    この例では、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

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