Redis 用 ElastiCache 転送中の暗号化 (TLS)
データを安全に保つために、Amazon ElastiCache および Amazon EC2 は、サーバーのデータへの不正アクセスに対する防御メカニズムを提供します。ElastiCache では転送時の暗号化機能を提供されるため、ある場所から別の場所に移動しているデータの保護ツールとして使用できます。たとえば、レプリケーショングループ内でプライマリノードからリードレプリカノードへ、またはレプリケーショングループとアプリケーションの間で、データを移動するとします。
転送時の暗号化はオプションであり、Redis レプリケーショングループの作成時にのみ、そのレプリケーショングループで有効にできます。転送時の暗号化は、レプリケーショングループの作成時にレプリケーショングループ上でパラメーター
TransitEncryptionEnabled
を true
(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 で実行されているレプリケーショングループでのみサポートされます。
-
転送時の暗号化は、以下のノードタイプを実行しているレプリケーショングループでのみサポートされます。
-
R5、R4、R3
-
M5、M4、M3
-
T2
詳細については、「サポートされているノードの種類」を参照してください。
-
-
転送時の暗号化は、
TransitEncryptionEnabled
パラメータをtrue
に明示的に設定することで有効になります。 -
転送時の暗号化は、レプリケーショングループの作成時にのみレプリケーショングループで有効にできます。レプリケーショングループを変更して転送時の暗号化のオンとオフを切り替えることはできません。既存のレプリケーショングループ上への転送時の暗号化の実装についての詳細は、「転送時の暗号化を有効にする」を参照してください。
-
転送時の暗号化が有効なレプリケーショングループに接続するためには、データベースは Transport Layer Security (TLS) が有効である必要があります。転送時の暗号化が有効化されていないレプリケーショングループに接続する場合、データベースは TLS を有効にすることはできません。
エンドポイントでデータの暗号化と復号を行うにはある程度の処理が必要であるため、転送時の暗号化の実装によりパフォーマンスが低下する可能性があります。自身のデータで転送時の暗号化ありの場合と暗号化なしの場合とでベンチマークを比較して、実装におけるパフォーマンスの影響を判断してください。
ヒント
新しい接続の作成には高い負荷がかかる場合があるため、SSL 接続を持続させることで転送時の暗号化のパフォーマンスへの影響を軽減させることができます。
転送時の暗号化を有効にする
AWS マネジメントコンソール、AWS CLI、または ElastiCache API を使用して、Redis レプリケーショングループ用 ElastiCache の作成時に転送時の暗号化を有効にできます。
既存のクラスター上で転送時の暗号化を有効にする
転送時の暗号化は、Redis レプリケーショングループの作成時にのみ有効化できます。転送時の暗号化を有効化したい既存レプリケーショングループがある場合は、次の操作を行います。
既存の Redis レプリケーショングループ上で転送時の暗号化を有効にするには
-
レプリケーショングループの手動バックアップを作成します。詳細については、「手動バックアップの作成」を参照してください。
-
エンジンバージョンを 3.2.6、4.0.10 およびそれ以降に、パラメータ
TransitEncryptionEnabled
をtrue
(CLI:--transit-encryption-enabled
) に設定し、バックアップから復元して新しいレプリケーショングループを作成します。詳細については、「クラスターのサイズ変更 (オプション) によるバックアップからの復元」を参照してください。 -
アプリケーションのエンドポイントを、新しいレプリケーショングループのエンドポイントに更新します。詳細については、「接続エンドポイントの検索」を参照してください。
-
古いレプリケーショングループを削除します。詳細については、以下を参照してください。
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 レプリケーショングループを作成します。
主要パラメータ:
-
--engine
—redis
を指定してください。 -
--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 (クラスターモードが有効) レプリケーショングループを作成します。
主要パラメータ:
-
--engine
—redis
を指定してください。 -
--engine-version
—3.2.6 または 4.0.10 以降を指定する必要があります。 -
--transit-encryption-enabled
—必須。転送時の暗号化を有効にする場合、--cache-subnet-group
パラメータの値も指定する必要があります。 -
次のいずれかのパラメーターセットを使用して、レプリケーショングループのノード グループの構成を指定します。
-
--num-node-groups
—このレプリケーショングループ内のシャード数 (ノードグループ数) を指定します。このパラメーターの最大値は 90 です。--replicas-per-node-group
—各ノードグループ (シャード) のレプリカノードの数を指定します。ここで指定される値は、このレプリケーショングループのすべてのシャードに適用されます。このパラメーターの最大値は 5 です。 -
--node-group-configuration
—各シャードの構成を個別に指定します。
-
詳細については、以下を参照してください。
AWS API を使用して転送時の暗号化を有効にする
Redis レプリケーショングループの作成時に ElastiCache API を使用して転送時の暗号化を有効にするには、単一ノード Redis レプリケーショングループの場合は
CreateCacheCluster
を使用し、リードレプリカのあるレプリケーショングループの場合は CreateReplicationGroup
を使用して、TransitEncryptionEnabled
パラメータを true
に設定します。
Redis (クラスターモードが無効) クラスター上で転送時の暗号化を有効にする (API)
ElastiCache API オペレーション CreateReplicationGroup
と以下のパラメーターを使用して、転送時の暗号化が有効な、Redis (クラスターモードが無効) レプリケーショングループを作成します。
主要パラメータ
-
Engine
—redis
を指定してください。 -
EngineVersion
—3.2.6 または 4.0.10 以降を指定する必要があります。 -
TransitEncryptionEnabled
—true
に設定する必要があります。TransitEncryptionEnabled
がtrue
に設定されている場合、CacheSubnetGroup
の値も指定する必要があります。 -
NumCacheClusters
—1 以上このパラメーターの最大値は six です。
詳細については、以下を参照してください。
Redis (クラスターモードが有効) クラスター上で転送時の暗号化を有効にする (API)
ElastiCache API オペレーション CreateReplicationGroup
と以下のパラメーターを使用して、転送時の暗号化が有効な、Redis (クラスターモードが有効) レプリケーショングループを作成します。
主要パラメータ
-
Engine
—redis
を指定してください。 -
EngineVersion
—3.2.6 または 4.0.10 以降を指定する必要があります。 -
TransitEncryptionEnabled
—true
に設定する必要があります。TransitEncryptionEnabled
がtrue
に設定されている場合、CacheSubnetGroup
の値も指定する必要があります。 -
次のいずれかのパラメーターセットを使用して、レプリケーショングループのノード グループの構成を指定します。
-
NumNodeGroups
—このレプリケーショングループ内のシャード数 (ノードグループ数) を指定します。このパラメータの最大値は 90 ですが、サービスの制限増加リクエストを通じて最大 250 まで増やすことができます。詳細については、「AWS サービスの制限」を参照してください。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 クラスターに接続するには
-
SSH クライアントから
stunnel
をインストールします。sudo yum install stunnel
-
以下のコマンドを実行して、ファイル
'/etc/stunnel/redis-cli.conf'
を同時に作成および編集し、Redis 用 ElastiCache クラスターのエンドポイントを 1 つまたは複数の接続パラメーターに追加します。その際、以下に示す出力をテンプレートとして使用します。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-replica] client = yes accept = 127.0.0.1:6380 connect = ssltest-02.ssltest.wif01h.use1.cache.amazonaws.com:6379
この例では、設定ファイルに
redis-cli
とredis-cli-replica
という 2 つの接続があります。パラメータは次のように設定されます。-
この stunnel インスタンスがクライアントであることを指定するために、client は yes に設定されています。
-
accept はクライアント IP に設定されています。この例では、マスターはポート 6379 の Redis のデフォルト 127.0.0.1 に設定されています。レプリカは別のポートを呼び出し、6380 に設定する必要があります。エフェメラルポート 1024 – 65535 を使用できます。詳細については、Amazon VPC ユーザーガイド の「一時ポート」を参照してください。
-
connect は Redis サーバーエンドポイントに設定されています。詳細については、「接続エンドポイントの検索」を参照してください。
-
-
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
-
トンネルのローカルエンドポイントを使用して、暗号化された Redis ノードに接続します。
-
Redis 用 ElastiCache クラスターの作成時に AUTH パスワードが使用されなかった場合、この例では、Amazon Linux上で redis-cli の絶対パスを使用して Redis 用 ElastiCache サーバーに接続します。
/home/ec2-user/redis-stable/src/redis-cli -h localhost -p 6379
Redis クラスターの作成時に AUTH パスワードが使用されなかった場合、この例では、Amazon Linux上で redis-cli の絶対パスを使用して Redis サーバーに接続します。
/home/ec2-user/redis-stable/src/redis-cli -h localhost -p 6379 -a
my-secret-password
または
-
ディレクトリを redis-stable に変更して、次の手順を実行します。
Redis 用 ElastiCache クラスターの作成時に AUTH パスワードが使用されなかった場合、この例では、Amazon Linux上で redis-cli の絶対パスを使用して Redis 用 ElastiCache サーバーに接続します。
src/redis-cli -h localhost -p 6379
Redis クラスターの作成時に AUTH パスワードが使用されなかった場合、この例では、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
-
-
SSL トンネルを停止して閉じるには、
pkill
stunnel プロセスを実行します。sudo pkill stunnel