SSH トンネルを使用して Amazon Cognito 認証で VPC の外部から Kibana にアクセスするにはどうすればよいですか?

最終更新日: 2021 年 3 月 4 日

Amazon Elasticsearch Service クラスターは仮想プライベートクラウド (VPC) にあります。SSH トンネルを使用して Amazon Cognito 認証で VPC の外部から Kibana にアクセスする必要があります。

簡単な説明

デフォルトでは、Amazon Cognito は Kibana へのアクセスを VPC の AWS Identity and Access Management (IAM) ユーザーに制限します。ただし、SSH トンネルを使用して VPC の外部から Kibana にアクセスすることができます。

重要: VPC の外部から Kibana (サードパーティー製ツール) にアクセスする場合は、組織のセキュリティ要件に準拠していることを確認してください。

SSH トンネルを使用して VPC の外部から Kibana にアクセスするには、次の手順を実行します。

1.    Amazon Cognito ユーザープールと ID プールを作成します。

2.    Elasticsearch ドメインが存在するのと同じ VPC にあるパブリックサブネットに Amazon Elastic Compute Cloud(Amazon EC2) インスタンスを作成します。

3.    FoxyProxy などのブラウザアドオンを使用して、SOCKS プロキシを設定します。

4.    ローカルマシンから EC2 インスタンスへの SSH トンネルを作成します。

: Amazon Cognito 認証で VPC の外部から Kibana にアクセスするために、NGINX プロキシまたはクライアント VPN を使用することもできます。詳細については、「Amazon Cognito 認証を使用して VPC の外部から Kibana にアクセスする方法」をご参照ください。

5.    (オプション) きめ細かなアクセスコントロール (FGAC) が有効になっている場合は、Amazon Cognito 認証ロールを追加します。

解決方法

Amazon Cognito ユーザープールと ID プールを作成します。

1.    Amazon Cognito のユーザープールを作成します

2.    ホストされたユーザープールドメインを設定します

3.    Amazon Cognito コンソールのナビゲーションペインで、ユーザーとグループを選択します。

4.    [Create user] を選択し、フィールドに入力します。E メールアドレスを入力していることを確認してください。次に、[Mark email as verified] チェックボックスをオンにします。

5.    [Groups] タブを選択し、[Create group] を選択します。[Precedence] について、0 を入力します。詳細については、「AWS マネジメントコンソールでの新しいグループの作成」を参照してください。

6.    Amazon Cognito コンソール を開きます。

7.    [Manage Identity Pools] を選択し、続いて [Create new identity pool] を選択します。

8.    ID プールの名前を入力し、[Enable access to unauthenticated identities] チェックボックスをオンにしてから、[Create Pool] を選択します。

9.    プロンプトが表示されたら、AWS リソースにアクセスし、[Allow] を選択して ID プールに関連付けられた 2 つのデフォルト ロールを作成します。1 つは未認証ユーザーのためのもので、もう 1 つは認証ユーザーのためのものです。

10.    Kibana に対して Amazon Cognito 認証を使用して Amazon ES ドメインを設定します
[Cognito User Pool] で、ステップ 1 で作成したユーザープールを選択します。
Cognito Identity Pool を選択し、ステップ 8 で作成した ID プールを選択します。

11.    Amazon ES ドメインを設定するには、次のようなアクセスポリシーを使用します。これらの値を置き換えます。
account-id を、お客様の AWS アカウント IDで置き換えます
ID-name を、Amazon Cognito ID プールの名前で置き換えます
ES-name を、Amazon ES ドメインの名前で置き換えます
Regionus-east-1 などの Amazon ES ドメインがあるリージョンで置き換えます

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Principal": {
        "AWS": "arn:aws:sts::account-id:assumed-role/Cognito_identity-nameAuth_Role/CognitoIdentityCredentials"
      },
      "Action": "es:*",
      "Resource": "arn:aws:es:Region:account-id:domain/ES-name/*"
    }
  ]
}

たとえば、次のアクセスポリシーでは、以下の値を使用します。

AWS アカウント ID: 111122223333
Amazon Cognito ID プール名:MyIdentityPool
Amazon ES ドメイン名:MyES
リージョン: us-east-1

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Principal": {
        "AWS": "arn:aws:sts::111122223333:assumed-role/Cognito_MyIdentityPoolAuth_Role/CognitoIdentityCredentials"
      },
      "Action": "es:*",
      "Resource": "arn:aws:es:us-east-1:111122223333:domain/MyES/*"
    }
  ]
}

EC2 インスタンスを作成して、セキュリティグループルールを設定する

1.    Elasticsearch ドメインがある VPC の パブリックサブネットの EC2 インスタンスを起動します。[Configure Instance Details] (インスタンスの詳細の設定) ページで、[Auto-assign Public IP] (自動割り当てパブリック IP) が [Enable] (有効) に設定されていることを確認します。
注: 以下の手順では、EC2 インスタンスが tunnel_ec2 として参照されます。

2.    tunnel_ec2 インスタンスに関連付けられたセキュリティグループにインバウンドルールを追加します。これらのルールは、Kibana ダッシュボードにアクセスするために使用するローカルマシンの IP アドレスからポート 8157 および 22 へのトラフィックを許可する必要があります。

3.    Elasticsearch ドメインに関連して、セキュリティグループにインバウンドルールを追加します。このルールは、tunnel_ec2 インスタンスのプライベート IP アドレスからのトラフィックを許可する必要があります。

SOCKS プロキシを設定する

1.     Google Chrome で FoxyProxy Standard を追加します。

2.    FoxyProxy を開き、[Options] を選択します。

3.    Proxy mode ドロップダウンリストで、[Use proxies based on their pre-defined patterns and priorities] (事前定義されたパターンと優先順位に基づいてプロキシを使用) を選択します。

4.    [Add New Proxy] を選択します。

5.    [General] タブを選択し、「Kibana Proxy」などを [Proxy Name] に入力します。

6.    [Proxy Details] (プロキシの詳細) タブで [Manual Proxy Configuration] (手動のプロキシ設定) が選択されていることを確認し、次のフィールドに入力します。
[Host or IP Address] (ホストまたは IP アドレス) で、localhost を入力します。
ポートには 8157 と入力します。
SOCKS プロキシを選択します。
SOCKS v5を選択します。

7.    [URL Patterns] (URL パターン) タブを選択します。

8.    [Add new pattern] を選択し、次のフィールドに入力します。
パターン名には、「VPC エンドポイント」など、わかりやすい名前を入力します。
[URL pattern] (URL パターン) で、Kibana の VPC エンドポイントを入力します。[Whitelist URLs] (ホワイトリスト URL) が選択されていることを確認してください。[Wildcards] (ワイルドカード) が選択されていることを確認してください。

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

SSH トンネルを作成します。

1.    Kibana ダッシュボードにアクセスするために使用するローカルマシンから次のコマンドを実行します。次を置き換えます。
mykeypair.pem: tunnel_ec2 EC2 インスタンスを起動したときに指定したキーペアの .pem ファイルの名前。
public_dns_name: tunnel_ec2 EC2 インスタンスのパブリック DNS。詳細については、「EC2 インスタンスの DNS ホスト名を確認する」をご参照ください。

ssh -i "mykeypair.pem"  ec2-user@public_dns_name -ND 8157

2.    ブラウザで Kibana エンドポイントを入力します。Kibana に対する Amazon Cognito のログインページが表示されます。

(オプション) きめ細かなアクセスコントロール (FGAC) が有効になっている場合は、Amazon Cognito 認証ロールを追加します

Elasticsearch クラスターできめ細かなアクセスコントロール (FGAC) が有効になっている場合、「missing role」エラーが発生する可能性があります。「missing role」エラーを解決するには、次の手順に従います。

1.    AWS マネジメントコンソールにサインインします。

2.    [アナリティクス] で [Elasticsearch サービス] を選択します。

3.    [アクション] をクリックします。

4.    [マスターユーザーの変更] を選択します。

5.    [Set IAM ARN as your master user] (マスターユーザーとして IAM ARN を設定する) を選択します。

6.    [IAM ARN] フィールドに、Amazon Cognito 認証済み ARN ロールを追加します。

7.    [送信] を選択します。

きめ細かなアクセスコントロールの詳細については、「チュートリアル: IAM マスターユーザーと Amazon Cognito」を参照してください。