クラスターまたはレプリケーショングループへのアクセス - Redis 用 Amazon ElastiCache

クラスターまたはレプリケーショングループへのアクセス

Amazon ElastiCache インスタンスは、Amazon EC2 インスタンス経由でアクセスするように設計されています。

ElastiCache インスタンスを Amazon Virtual Private Cloud (Amazon VPC) で起動する場合、ElastiCache インスタンスは同じ Amazon VPC にある Amazon EC2 インスタンスからアクセスできます。または、VPC ピア接続を使用すれば、異なる Amazon VPC にある Amazon EC2 から ElastiCache インスタンスにアクセスできます。

ElastiCache インスタンスを EC2 Classic で起動した場合、そのインスタンスに関連付けられた Amazon EC2 セキュリティグループに、キャッシュセキュリティグループへのアクセスを許可することで、EC2 インスタンスにクラスターへのアクセスを許可することができます。デフォルトでは、クラスターへのアクセスはそのクラスターを起動したアカウントに制限されています。

クラスターのプラットフォームの確認

先に進む前に、EC2-VPC と EC2-Classic のどちらでクラスターを起動したかを確認します。

詳細については、「サポートされているプラットフォームとデフォルト VPC があるかどうかを確認する」を参照してください。

ElastiCache コンソールを使用してクラスタープラットフォームを確認する

以下の手順では ElastiCache コンソールを使用して、EC2-VPC または EC2-Classic のどちらでクラスターを起動したかを確認します。

ElastiCache コンソールを使用してクラスタープラットフォームを確認するには

  1. AWS マネジメントコンソール にサインインし、https://console.aws.amazon.com/elasticache/ にある ElastiCache コンソールを開きます。

  2. Redis エンジンを実行しているクラスターのリストを表示するには、左のナビゲーションペインで、[Redis] を選択します。

  3. クラスターのリストで、クラスター名の左にあるボックスを選択して、アクセスを承認するクラスターを展開します。

  4. [Subnet group:] (サブネットグループ:) を見つけます。

    • 図のように [Subnet group] (サブネットグループ) に名前が入力されている場合は、クラスターが EC2-VPC で起動されています。「EC2-VPC でクラスターを起動した場合」に進んでください。

    • [Subnet group] (サブネットグループ) 名ではなくダッシュ (-) が表示される場合は、クラスターが EC2-Classic で起動されています。「EC2-Classic でクラスターを起動した場合」に進んでください。

詳細については、「サポートされているプラットフォームとデフォルト VPC があるかどうかを確認する」を参照してください。

AWS CLI を使用してクラスタープラットフォームを確認する

以下の手順では AWS CLI を使用して、EC2-VPC または EC2-Classic のどちらでクラスターを起動したかを確認します。

AWS CLI を使用してクラスタープラットフォームを確認するには

  1. コマンドウィンドウを開きます。

  2. コマンドプロンプトで、次のコマンドを入力します。

    Linux, macOS, or Unix 用:

    aws elasticache describe-cache-clusters \ --show-cache-cluster-details \ --cache-cluster-id my-cluster

    Windows の場合:

    aws elasticache describe-cache-clusters ^ --show-cache-cluster-details ^ --cache-cluster-id my-cluster

    このコマンドの JSON 出力は次のようになります。スペースを節約するため、出力の一部は省略されています。

    { "CacheClusters": [ { "Engine": "redis", "AuthTokenEnabled": false, "CacheParameterGroup": { "CacheNodeIdsToReboot": [], "CacheParameterGroupName": "default.redis3.2", "ParameterApplyStatus": "in-sync" }, "CacheClusterId": "my-cluster-001", "CacheSecurityGroups": [], "NumCacheNodes": 1, "AtRestEncryptionEnabled": false, "CacheClusterCreateTime": "2018-01-16T20:09:34.449Z", "ReplicationGroupId": "my-cluster", "AutoMinorVersionUpgrade": true, "CacheClusterStatus": "available", "PreferredAvailabilityZone": "us-east-2a", "ClientDownloadLandingPage": "https://console.aws.amazon.com/elasticache/home#client-download:", "SecurityGroups": [ { "Status": "active", "SecurityGroupId": "sg-e8c03081" } ], "TransitEncryptionEnabled": false, "CacheSubnetGroupName": "default", "EngineVersion": "3.2.10", "PendingModifiedValues": {}, "PreferredMaintenanceWindow": "sat:05:30-sat:06:30", "CacheNodeType": "cache.t2.medium" } ] }

クラスターまたはレプリケーショングループへのアクセスの許可

EC2-VPC でクラスターを起動した場合

クラスターを Amazon Virtual Private Cloud (Amazon VPC) で起動した場合、同じ Amazon VPC で実行されている Amazon EC2 インスタンスからのみ ElastiCache クラスターに接続できます。この場合、クラスターに対するネットワーク進入を許可する必要があります。

Amazon VPC セキュリティグループからクラスターへのネットワーク進入を許可するには

  1. AWS マネジメントコンソールにサインインをしたあと、https://console.aws.amazon.com/ec2/ にある Amazon EC2 コンソールを開きます。

  2. ナビゲーションペインで、[Network & Security] の下にある [Security Groups] を選択します。

  3. セキュリティグループのリストから、Amazon VPC のセキュリティグループを選択します。ElastiCache 用のセキュリティグループを作成した場合を除き、このセキュリティグループは、default という名前になります。

  4. [Inbound] タブを選択し、次の操作を行います。

    1. [Edit] を選択します。

    2. [Add rule] を選択します。

    3. [Type] 列で [Custom TCP rule] を選択します。

    4. [Port range] ボックスに、クラスターノードのポート番号を入力します。この番号は、クラスターの起動時に指定した番号と同じ番号である必要があります。。​Redis のデフォルトポートは 6379 です

    5. [Source] ボックスで [Anywhere] を選択します。ポート範囲が 0.0.0.0/0 になるため、Amazon VPC 内で起動したすべての Amazon EC2 インスタンスを ElastiCache ノードに接続できます。

      重要

      ElastiCache クラスターを 0.0.0.0/0 に設定すると、パブリック IP アドレスが割り当てられず、VPC 外からアクセスできないため、クラスターはインターネットに公開されません。ただし、お客様のアカウントの他の Amazon EC2 インスタンスにデフォルトのセキュリティグループが適用され、そのインスタンスにパブリック IP アドレスが付与される場合があります。それがデフォルトポートで何かを実行している場合、そのサービスが意図せず公開されることがあります。そのため、ElastiCache でのみ使用される VPC のセキュリティグループを作成されることをお勧めします。詳細については、「 カスタムセキュリティグループ」を参照してください。

    6. [Save] を選択します。

Amazon EC2 で Amazon VPC インスタンスを起動する場合、そのインスタンスは ElastiCache クラスターに接続できます。

EC2-Classic でクラスターを起動した場合

クラスターを EC2-Classic で起動した場合、Amazon EC2 インスタンスにクラスターへのアクセスを許可するには、そのインスタンスに関連付けられた Amazon EC2 セキュリティグループに、キャッシュセキュリティグループへのアクセスを許可する必要があります。

Amazon EC2 セキュリティグループにクラスターへのアクセスを許可するには

  1. AWS マネジメントコンソール にサインインし、https://console.aws.amazon.com/elasticache/ にある ElastiCache コンソールを開きます。

  2. セキュリティグループのリストを表示するには、左のナビゲーションペインから [Security Groups] を選択します。

    重要

    [Security Groups] (セキュリティグループ) がナビゲーションペインにリストされていない場合は、クラスターが EC2-Classic ではなく EC2-VPC で起動されています。「EC2-VPC でクラスターを起動した場合」の指示に従ってください。

  3. [default] セキュリティグループの左側にあるチェックボックスをオンにします。

  4. 画面の下部のリストから、許可する EC2 セキュリティグループ名を選択します。

  5. アクセスを許可するには、[Add] を選択します。

    これで、セキュリティグループに関連付けられた Amazon EC2 インスタンスを、ElastiCache クラスターに接続できるようになりました。

セキュリティグループのアクセスを取り消すには、許可されたセキュリティグループのリストから該当のセキュリティグループを見つけて [Remove] を選択します。

ElastiCache セキュリティグループの詳細については、「セキュリティグループ: EC2-Classic」を参照してください。

AWS 外部からの ElastiCache リソースへのアクセス

Elasticache は、VPC の内部で使用するように設計されたサービスです。インターネットトラフィックの遅延やセキュリティ上の懸念により、外部アクセスは推奨されません。ただし、テストや開発の目的で Elasticache への外部アクセスが必要な場合は、VPN 経由で許可できます。

AWS クライアント VPN を使用して Elasticache ノードへの外部アクセスを許可すると、以下の利点があります。

  • 承認されたユーザーまたは認証キーへのアクセスの制限

  • VPN クライアントと AWS VPN エンドポイント間のトラフィックの暗号化

  • 特定のサブネットまたはノードへのアクセスの制限

  • ユーザーまたは認証キーからのアクセスの容易な取り消し

  • 接続の監査

次に、以下の方法について手順を示します。

認証局の作成

認証局 (CA) は、さまざまな手法やツールを使用して作成できます。ここでは、OpenVPN プロジェクトが提供する easy-rsa ユーティリティをお勧めします。選択するオプションにかかわらず、キーは安全に保管してください。次の手順では、easy-rsa スクリプトをダウンロードし、最初の VPN クライアントを認証するための認証局とキーを作成します。

  • 初期証明書を作成するには、ターミナルを開き、次の操作を行います。

    • git clone https://github.com/OpenVPN/easy-rsa

    • cd easy-rsa

    • ./easyrsa3/easyrsa init-pki

    • ./easyrsa3/easyrsa build-ca nopass

    • ./easyrsa3/easyrsa build-server-full server nopass

    • ./easyrsa3/easyrsa build-client-full client1.domain.tld nopass

    証明書を含む pki サブディレクトリが easy-rsa の下に作成されます。

  • サーバー証明書を AWS Certificate Manager (ACM) に送信します。

    • ACM コンソールで、[Certificate Manager] を選択します。

    • [証明書のインポート] を選択します。

    • easy-rsa/pki/issued/server.crt ファイルにあるパブリックキー証明書を [証明書本文] フィールドに入力します。

    • easy-rsa/pki/private/server.key にあるプライベートキーを [証明書のプライベートキー] フィールドに貼り付けます。BEGIN AND END PRIVATE KEY 間にあるすべての行 (BEGIN 行と END 行を含む) を選択してください。

    • easy-rsa/pki/ca.crt ファイルにある CA パブリックキーを [証明書チェーン] フィールドに貼り付けます。

    • [レビューとインポート] を選択します。

    • [インポート] を選択します。

    AWS CLI を使用してサーバーの証明書を ACM に送信するには、次のコマンドを実行します。aws acm import-certificate --certificate file://easy-rsa/pki/issued/server.crt --private-key file://easy-rsa/pki/private/server.key --certificate-chain file://easy-rsa/pki/ca.crt --region region

    後で使用するために証明書 ARN を書き留めます。

AWS クライアント VPN コンポーネントの設定

AWS コンソールの使用

AWS コンソールで、[サービス]、[VPC] の順に選択します。

[仮想プライベートネットワーク] で、[クライアント VPN エンドポイント] を選択し、次の操作を行います。

AWS クライアント VPN コンポーネントの設定

  • [クライアント VPN エンドポイントの作成] を選択します。

  • 以下のオプションを指定します。

    • クライアント IPv4 CIDR: /22 以上の範囲のネットマスクを持つプライベートネットワークを使用します。選択したサブネットが VPC ネットワークのアドレスと競合していないことを確認します。例: 10.0.0.0/22。

    • [サーバー証明書 ARN] で、以前にインポートした証明書の ARN を選択します。

    • [相互認証の使用] を選択します。

    • [クライアント証明書 ARN] で、以前にインポートした証明書の ARN を選択します。

    • [クライアント VPN エンドポイントの作成] を選択します。

AWS CLI の使用

次のコマンドを実行します。

aws ec2 create-client-vpn-endpoint --client-cidr-block "10.0.0.0/22" --server-certificate-arn arn:aws:acm:us-east-1:012345678912:certificate/0123abcd-ab12-01a0-123a-123456abcdef --authentication-options Type=certificate-authentication,,MutualAuthentication={ClientRootCertificateChainArn=arn:aws:acm:us-east-1:012345678912:certificate/123abcd-ab12-01a0-123a-123456abcdef} --connection-log-options Enabled=false

出力例:

"ClientVpnEndpointId": "cvpn-endpoint-0123456789abcdefg", "Status": { "Code": "pending-associate" }, "DnsName": "cvpn-endpoint-0123456789abcdefg.prod.clientvpn.us-east-1.amazonaws.com" }

ターゲットネットワークと VPN エンドポイントの関連付け

  • 新しい VPN エンドポイントを選択し、[関連付け] タブを選択します。

  • [関連付け] を選択し、以下のオプションを指定します。

    • VPC: Elasticache クラスターの VPC を選択します。

    • Elasticache クラスターのネットワークの 1 つを選択します。不確かな場合は、Elasticache ダッシュボードの [サブネットグループ] でネットワークを確認します。

    • [関連付け] を選択します。必要に応じて、残りのネットワークについても同じ手順を繰り返します。

AWS CLI の使用

次のコマンドを実行します。

aws ec2 associate-client-vpn-target-network --client-vpn-endpoint-id cvpn-endpoint-0123456789abcdefg --subnet-id subnet-0123456789abdcdef

出力例:

"Status": { "Code": "associating" }, "AssociationId": "cvpn-assoc-0123456789abdcdef" }

VPN セキュリティグループの確認

VPN エンドポイントは、VPC のデフォルトのセキュリティグループを自動的に採用します。インバウンドルールとアウトバウンドルールをチェックし、セキュリティグループが VPN ネットワーク (VPN エンドポイント設定で定義) から Elasticache ネットワークへのトラフィックをサービスポート (Redis のデフォルトは 6379、Memcached のデフォルトは 11211) で許可するかどうかを確認します。

VPN エンドポイントに割り当てられたセキュリティグループを変更する必要がある場合は、次の手順を実行します。

  • 現在のセキュリティグループを選択します。

  • [セキュリティグループの適用] を選択します。

  • 新しいセキュリティグループを選択します。

AWS CLI の使用

次のコマンドを実行します。

aws ec2 apply-security-groups-to-client-vpn-target-network --client-vpn-endpoint-id cvpn-endpoint-0123456789abcdefga  --vpc-id vpc-0123456789abdcdef --security-group-ids sg-0123456789abdcdef

出力例:

"SecurityGroupIds": [ "sg-0123456789abdcdef" ] }

注記

ElastiCache セキュリティグループは、VPN クライアントからのトラフィックも許可する必要があります。クライアントのアドレスは、VPC ネットワークに従って VPN エンドポイントアドレスでマスクされます。したがって、Elasticache セキュリティグループでインバウンドルールを作成するときは、VPC ネットワーク (VPN クライアントのネットワークではありません) を考慮してください。

宛先ネットワークへの VPN アクセスの許可

[認証] タブで [受信の承認] を選択し、以下を指定します。

  • アクセスを有効にする送信先ネット: 0.0.0.0/0 を使用して任意のネットワーク (インターネットを含む) へのアクセスを許可するか、Elasticache ネットワーク/ホストを制限します。

  • [アクセスを付与する対象] で、[すべてのユーザーにアクセスを許可する] を選択します。

  • [認証ルールの追加] を選択します。

AWS CLI の使用

次のコマンドを実行します。

aws ec2 authorize-client-vpn-ingress --client-vpn-endpoint-id cvpn-endpoint-0123456789abcdefg --target-network-cidr 0.0.0.0/0 --authorize-all-groups

出力例:

{ "Status": { "Code": "authorizing" } }

VPN クライアントからインターネットへのアクセスの許可

VPN 経由でインターネットをブラウズする必要がある場合は、追加のルートを作成する必要があります。[ルートテーブル] タブを選択し、[ルートの作成] を選択します。

  • ルート送信先: 0.0.0.0/0

  • ターゲット VPC サブネット ID: インターネットにアクセスできる、関連付けられたサブネットの 1 つを選択します。

  • [ルートの作成] を選択します。

AWS CLI の使用

次のコマンドを実行します。

aws ec2 create-client-vpn-route --client-vpn-endpoint-id cvpn-endpoint-0123456789abcdefg --destination-cidr-block 0.0.0.0/0 --target-vpc-subnet-id subnet-0123456789abdcdef

出力例:

{ "Status": { "Code": "creating" } }

VPN クライアントの設定

AWS クライアント VPN ダッシュボードで、最近作成した VPN エンドポイントを選択し、[クライアント設定のダウンロード] を選択します。設定ファイル、easy-rsa/pki/issued/client1.domain.tld.crt ファイル、および easy-rsa/pki/private/client1.domain.tld.key ファイルをコピーします。設定ファイルを編集し、以下のパラメータを変更または追加します。

  • cert: client1.domain.tld.crt ファイルを指すパラメータ cert を使用して新しい行を追加します。ファイルへの完全なパスを使用します。例: cert /home/user/.cert/client1.domain.tld.crt

  • cert: key: client1.domain.tld.key ファイルを指すパラメータ key を使用して新しい行を追加します。ファイルへの完全なパスを使用します。例: key /home/user/.cert/client1.domain.tld.key

コマンド sudo openvpn --config downloaded-client-config.ovpnを使用して VPN 接続を確立します。

アクセスの取り消し

特定のクライアントキーからのアクセスを無効にする必要がある場合は、CA でキーを取り消します。次に、取り消しリストを AWS クライアント VPN に送信します。

easy-rsa でキーを取り消す方法は次のとおりです。

  • cd easy-rsa

  • ./easyrsa3/easyrsa revoke client1.domain.tld

  • 続行するには、「yes」と入力します。中止するには、その他を入力します。

    Continue with revocation: `yes` ... * `./easyrsa3/easyrsa gen-crl

  • 更新された CRL が作成されます。CRL ファイル: /home/user/easy-rsa/pki/crl.pem

AWS クライアント VPN への取り消しリストのインポート:

  • AWS マネジメントコンソール で、[サービス]、[VPC] の順に選択します。

  • [クライアント VPN エンドポイント] を選択します。

  • クライアント VPN エンドポイントを選択し、[アクション]、[クライアント証明書 CRL のインポート] の順に選択します。

  • crl.pem ファイルの内容を貼り付けます。

AWS CLI の使用

次のコマンドを実行します。

aws ec2 import-client-vpn-client-certificate-revocation-list --certificate-revocation-list file://./easy-rsa/pki/crl.pem --client-vpn-endpoint-id cvpn-endpoint-0123456789abcdefg

出力例:

Example output: { "Return": true }