

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

# クラスターへのアクセス
<a name="accessing-memorydb"></a>

MemoryDB インスタンスは、Amazon EC2 インスタンスを介してアクセスするように設計されています。

同じ Amazon VPC 内の Amazon EC2 インスタンスから MemoryDB ノードにアクセスできます。または、VPC ピアリングを使用して、異なる Amazon VPC 内の Amazon EC2 から MemoryDB ノードにアクセスできます。

**Topics**
+ [すべてのクラスターに対するアクセスを許可する](#grant-access)
+ [外部からのMemoryDBリソースへのアクセス AWS](#access-from-outside-aws)

## すべてのクラスターに対するアクセスを許可する
<a name="grant-access"></a>

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

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

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

1. ナビゲーションペインで、**[ネットワークとセキュリティ]** の下にある **[セキュリティグループ]** を選択します。

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

1. **Inbound** タブを選択し、次の操作を行います。

   1. **Edit** (編集) を選択します。

   1. **ルールの追加** を選択します。

   1. **Type** 列で **Custom TCP rule** を選択します。

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

   1. **[ソース]** ボックスで **[任意の場所]** を選択します。ポート範囲が 0.0.0.0/0 になるため、Amazon VPC 内で起動したすべての Amazon EC2 インスタンスを MemoryDB ノードに接続できます。
**重要**  
MemoryDBクラスターを0.0.0.0/0にオープンしても、クラスターはパブリックIPアドレスを持たないためインターネットに公開されず、VPC外からアクセスすることはできません。ただし、お客様のアカウントの他の Amazon EC2 インスタンスにデフォルトのセキュリティグループが適用され、そのインスタンスにパブリック IP アドレスが付与される場合があります。それがデフォルトポートで何かを実行している場合、そのサービスが意図せず公開されることがあります。そのため、MemoryDB専用にVPCセキュリティグループを作成することをお勧めします。詳細については、「[ カスタムセキュリティグループ](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/using-network-security.html#creating-your-own-security-groups)」を参照してください。

   1. **Save (保存)** を選択します。

Amazon VPCにAmazon EC2インスタンスを起動すると、そのインスタンスはMemoryDBクラスターに接続できるようになります。

## 外部からのMemoryDBリソースへのアクセス AWS
<a name="access-from-outside-aws"></a>

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

AWS クライアントVPNを使用することで、MemoryDBノードへの外部アクセスを許可することができます：
+ 承認されたユーザーまたは認証キーへのアクセスの制限
+ VPN クライアントと AWS VPN エンドポイント間のトラフィックの暗号化
+ 特定のサブネットまたはノードへのアクセスの制限
+ ユーザーまたは認証キーからのアクセスの容易な取り消し
+ 接続の監査

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

**Topics**
+ [認証局の作成](#create-cert)
+ [AWS クライアント VPN コンポーネントの設定](#configure-vpn-components)
+ [VPN クライアントの設定](#configure-vpn-client)

### 認証局の作成
<a name="create-cert"></a>

認証局 (CA) は、さまざまな手法やツールを使用して作成できます。ここでは、[OpenVPN](https://openvpn.net/community-resources/openvpn-project/) プロジェクトが提供する easy-rsa ユーティリティをお勧めします。選択するオプションにかかわらず、キーは安全に保管してください。次の手順では、easy-rsa スクリプトをダウンロードし、最初の VPN クライアントを認証するための認証局とキーを作成します。
+ 初期証明書を作成するには、ターミナルを開き、次の操作を行います。
  + `git clone` [https://github.com/OpenVPN/easy-rsa](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 fileb://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 コンポーネントの設定
<a name="configure-vpn-components"></a>

**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]**: メモリ DB クラスターの VPC を選択します。
  + MemoryDB クラスターのネットワークの 1 つを選択します。不確かな場合は、MemoryDB ダッシュボードの **[サブネットグループ]** でネットワークを確認します。
  + **関連付け** を選択します。必要に応じて、残りのネットワークについても同じ手順を繰り返します。

** の使用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 のデフォルトのセキュリティグループを自動的に採用します。インバウンドルールとアウトバウンドルールを確認し、セキュリティグループがサービスポート（デフォルトではRedisの6379）でVPNネットワーク（VPNエンドポイント設定で定義）からMemoryDBネットワークへのトラフィックを許可しているかどうかを確認します。

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" ] } `

**注記**  
MemoryDBセキュリティグループは、VPNクライアントからのトラフィックも許可する必要がある。クライアントのアドレスは、VPC ネットワークに従って VPN エンドポイントアドレスでマスクされます。したがって、MemoryDBセキュリティグループの受信ルールを作成する際は、VPCネットワーク（VPNクライアントのネットワークではない）を考慮してください。

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

**[認証]** タブで、**[受信の承認]**を選択し、以下を指定します。
+ アクセスを許可する宛先ネットワーク： 0.0.0.0/0を使用してあらゆるネットワーク（インターネットを含む）へのアクセスを許可するか、MemoryDBのネットワーク/ホストを制限する。
+ **アクセスを付与する対象** で、**すべてのユーザーにアクセスを許可する** を選択します。
+ **[認可ルールの追加]** を選択します。

** の使用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 クライアントの設定
<a name="configure-vpn-client"></a>

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 } `