Amazon Elasticsearch Service
開発者ガイド (API バージョン 2015-01-01)

Kibana の Amazon Cognito 認証

Amazon Elasticsearch Service は、Amazon Cognito を使用して Kibana のユーザー名とパスワードの保護を提供します。この認証機能はオプションであり、Elasticsearch 5.1 以降を使用しているドメインでのみ使用できます。Amazon Cognito 認証を設定しない場合でも、IP ベースのアクセスポリシープロキシサーバーを使用して Kibana を保護することができます。

認証プロセスの多くは Amazon Cognito で発生しますが、この章では、Amazon Cognito リソースを Amazon ES ドメインで使用するように設定するためのガイドラインと要件を示します。すべての Amazon Cognito リソースに標準の料金が適用されます。

ヒント

Kibana の Amazon Cognito 認証を使用するようにドメインを初めて設定するときは、コンソールを使用することをお勧めします。Amazon Cognito​ リソースは高度にカスタマイズ可能であり、コンソールにより、該当する機能を識別して理解しやすくなります。

前提条件

Kibana の Amazon Cognito 認証を設定する前に、いくつかの前提条件を満たす必要があります。Amazon ES コンソールは、これらのリソースの作成の効率化を支援しますが、各リソースの目的を理解すると、設定およびトラブルシューティングに役立ちます。Kibana の Amazon Cognito​ 認証では、次のリソースが必要になります。

注記

ユーザープールと ID プールは、同じ AWS リージョンに存在している必要があります。同じユーザープール、ID プール、および IAM ロールを使用して、Kibana の Amazon Cognito 認証を複数の Amazon ES ドメインに追加できます。詳細については、「制限」を参照してください。

ユーザープールについて

ユーザープールには、次の 2 つの主要な機能があります。それらは、ユーザーのディレクトリを作成および管理する機能と、ユーザーによるサインアップとログインを許可する機能です。ユーザープールを作成する手順については、Amazon Cognito 開発者ガイド の「ユーザープールを作成する」を参照してください。

Amazon ES で使用するユーザープールを作成するときは、以下の点を考慮します。

  • Amazon Cognito​ ユーザープールにはドメイン名が必要です。Amazon ES​ はこのドメイン名を使用して、Kibana にアクセスするためのログインページにユーザーをリダイレクトします。ユーザープールには、ドメイン名以外に、デフォルト以外の設定は必要ありません。

  • プールの必須の標準属性—(名前、誕生日、E メールアドレス、電話番号など) を指定する必要があります。ユーザープールの作成後にこれらの属性を変更することはできないため、この時点で関連するものを選択します。

  • ユーザープールを作成する際に、ユーザーが自分のアカウントを作成できるかどうか、アカウントのパスワードの最低強度、多要素認証を有効にするかどうかを選択します。外部 ID プロバイダを使用する予定がある場合、これらの設定は重要ではありません。技術的には、ID プロバイダとしてユーザープールを有効にし、さらに外部 ID プロバイダを有効にすることができますが、ほとんどのユーザーはどちらか一方を希望します。

ユーザープール ID の形式は region_ID です。AWS CLI または AWS SDK を使用して Amazon ES を設定する計画の場合は、ID をメモしておきます。

ID プールについて

ID プールにより、ユーザーのログイン後に、権限の制限された一時的なロールをユーザーに割り当てることができます。ID プールを作成する手順については、Amazon Cognito 開発者ガイド の「ID プール」を参照してください。Amazon ES で使用する ID プールを作成するときは、以下の点を考慮します。

  • Amazon Cognito コンソールを使用する場合は、[認証されていない ID に対してアクセスを有効にする] チェックボックスをオンにして、ID プールを作成する必要があります。ID プールを作成し、Amazon ES ドメインを設定すると、Amazon Cognito によりこの設定は無効になります。

  • ID プールに外部 ID プロバイダを追加する必要はありません。Amazon Cognito 認証を使用するように Amazon ES を設定すると、先ほど作成したユーザープールを使用するように ID プールが設定されます。

  • ID プールを作成した後、認証されていない IAM ロールと認証された IAM ロールを選択する必要があります。これらのロールにより、ログイン前およびログイン後にユーザーに与えられるアクセスポリシーが指定されます。Amazon Cognito コンソールを使用する場合は、これらのロールを自動的に作成できます。認証されたロールを作成した後に、ARN を書き留めます。この形式は arn:aws:iam::123456789012:role/Cognito_identitypoolAuth_Role です。

ID プール ID の形式は region:ID-ID-ID-ID-ID です。AWS CLI または AWS SDK を使用して Amazon ES を設定する計画の場合は、ID をメモしておきます。

IAM ロールについて

Amazon ES には、Amazon Cognito ユーザーおよび ID プールを設定し、認証のためにそれらを使用するためのアクセス権限が必要です。AmazonESCognitoAccess を使用できます。これは、この目的のための AWS 管理ポリシーです。コンソールを使用して Amazon ES ドメインを作成または設定する場合、IAM ロールが作成され、このポリシーがロールにアタッチされます。

AWS CLI またはいずれかの AWS SDK を使用する場合は、独自のロールを作成し、ポリシーをアタッチして、Amazon ES ドメインを設定するときに、このロールの ARN を指定する必要があります。ロールには、次の信頼関係が必要です。

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": "es.amazonaws.com" }, "Action": "sts:AssumeRole" } ] }

手順については、IAM ユーザーガイド の「AWS のサービスにアクセス許可を委任するロールの作成」および「IAM ポリシーをアタッチおよびデタッチする」を参照してください。

Amazon ES ドメインの設定

前提条件を完了したら、Kibana に Amazon Cognito を使用するように Amazon ES ドメインを設定できます。

注記

Amazon Cognito は、一部の AWS リージョンでは使用できません。サポートされるリージョンのリストについては、「AWS のリージョンとエンドポイント」を参照してください。Amazon Cognito に使用する Amazon ES に対して同じリージョンを使用する必要はありません。

Amazon Cognito 認証の設定 (コンソール)

コンソールによって IAM ロールが作成されるため、コンソールの設定は最もシンプルになっています。コンソールを使用して、Kibana で Amazon Cognito 認証を使用するドメインを作成するには、標準の Amazon ES アクセス許可に加えて、次のアクセス許可セットが必要です。

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "iam:GetRole", "iam:PassRole", "iam:CreateRole", "iam:AttachRolePolicy", "ec2:DescribeVpcs", "cognito-identity:ListIdentityPools", "cognito-idp:ListUserPools" ], "Resource": "*" } ] }

IAM ロールがすでに存在する場合、必要なアクセス許可は少なくなります。

{ "Version": "2012-10-17", "Statement": [{ "Effect": "Allow", "Action": [ "ec2:DescribeVpcs", "cognito-identity:ListIdentityPools", "cognito-idp:ListUserPools" ], "Resource": "*" }, { "Effect": "Allow", "Action": [ "iam:GetRole", "iam:PassRole" ], "Resource": "arn:aws:iam::123456789012:role/CognitoAccessForAmazonES" } ] }

Kibana の Amazon Cognito 認証を設定するには (コンソール)

  1. https://aws.amazon.com にアクセスし、[Sign In to the Console] を選択します。

  2. [分析] で、[Elasticsearch Service] を選択します。

  3. ナビゲーションペインの [My domains (マイドメイン)] で、設定するドメインを選択します。

  4. [Configure cluster (クラスターの設定)] を選択します。

  5. Kibana 認証の場合は、[認証用に Amazon Cognito を有効化] を選択します。

  6. [リージョン] で、Amazon Cognito ユーザープールと ID プールが含まれているリージョンを参照します。

  7. [Cognito ユーザープール] で、ユーザープールを選択または作成します。ガイダンスについては、「ユーザープールについて」を参照してください。

  8. [Cognito ID プール] で、ID プールを選択または作成します。ガイダンスについては、「ID プールについて」を参照してください。

    注記

    [新しいユーザープールの作成] および [新しい ID プールの作成] リンクから Amazon Cognito コンソールに移動したら、これらのリソースを手動で作成します。このプロセスは自動的には行われません。詳細については、「前提条件」を参照してください。

  9. [IAM ロール] で、デフォルト値を使用するか (推奨)、新しい名前を入力します。このロールの目的の詳細については、「IAM ロールについて」を参照してください。

  10. [Submit] を選択します。

ドメインによる処理が終了したら、追加の設定ステップについて「認証されたロールの許可」および「ID プロバイダの設定」を参照してください。

Amazon Cognito 認証の設定 (AWS CLI)

--cognito-options パラメータを使用して、Amazon ES ドメインを設定します。create-elasticsearch-domain コマンドと update-elasticsearch-domain-config コマンドの両方で次の構文が使用されます。

--cognito-options Enabled=true,UserPoolId="user-pool-id",IdentityPoolId="identity-pool-id",RoleArn="arn:aws:iam::123456789012:role/CognitoAccessForAmazonES"

次の例では、CognitoAccessForAmazonES ロールを使用して、Kibana で Amazon Cognito 認証を有効にするドメインを us-east-1 リージョンで作成し、Cognito_Auth_Role へのドメインアクセスを提供します。

aws es create-elasticsearch-domain --domain-name my-domain --region us-east-1 --access-policies '{ "Version":"2012-10-17", "Statement":[{"Effect":"Allow","Principal":{"AWS": ["arn:aws:iam::123456789012:role/Cognito_Auth_Role"]},"Action":"es:ESHttp*","Resource":"arn:aws:es:us-east-1:123456789012:domain/*" }]}' --elasticsearch-version "6.0" --elasticsearch-cluster-config InstanceType=m4.xlarge.elasticsearch,InstanceCount=1 --ebs-options EBSEnabled=true,VolumeSize=10 --cognito-options Enabled=true,UserPoolId="us-east-1_123456789",IdentityPoolId="us-east-1:12345678-1234-1234-1234-123456789012",RoleArn="arn:aws:iam::123456789012:role/CognitoAccessForAmazonES"

ドメインによる処理が終了したら、追加の設定ステップについて「認証されたロールの許可」および「ID プロバイダの設定」を参照してください。

Amazon Cognito 認証の設定 (AWS SDK)

AWS SDK では (Android および iOS SDK を除く)、Amazon Elasticsearch Service 設定 API リファレンス および CognitoOptions オペレーションの CreateElasticsearchDomain パラメータも含めて、「UpdateElasticsearchDomainConfig」で定義されたすべてのオペレーションがサポートされています。AWS SDK のインストールと使用の詳細については、「AWS Software Development Kits」を参照してください。

ドメインによる処理が終了したら、追加の設定ステップについて「認証されたロールの許可」および「ID プロバイダの設定」を参照してください。

認証されたロールの許可

デフォルトでは、「ID プールについて」のガイドラインに従って設定された、認証された IAM ロールには、Kibana にアクセスするために必要な権限がありません。追加のアクセス権限を持つロールを提供する必要があります。

これらのアクセス権限はアイデンティティベースのポリシーに含めることができますが、認証されたユーザーによるすべての Amazon ES ドメインへのアクセスを許可する場合を除いて、単一のドメインにアタッチされたリソースベースのポリシーが、より一般的なアプローチとなります。

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "AWS": [ "arn:aws:iam::123456789012:role/Cognito_identitypoolAuth_Role" ] }, "Action": [ "es:ESHttp*" ], "Resource": "arn:aws:es:region:123456789012:domain/domain-name/*" } ] }

リソースベースのポリシーを Amazon ES ドメインに追加する手順については、「アクセス ポリシーの設定」を参照してください。

ID プロバイダの設定

Kibana で Amazon Cognito 認証を使用するようにドメインを設定すると、Amazon ES はユーザープールにアプリクライアントを追加し、認証されたプロバイダとして ID プールにユーザープールを追加します。次のスクリーンショットは、Amazon Cognito コンソールの [アプリクライアントの設定] ページを示しています。


                アプリクライアントの設定が表示された Amazon Cognito コンソール

警告

アプリクライアントを名前変更または削除しないでください。

ユーザープールの設定方法に応じて、ユーザーアカウントを手動で作成する必要がある場合や、ユーザーが自分のアカウントを作成できる場合があります。これらの設定で問題ない場合は、それ以上アクションを実行する必要はありません。ただし、多くのユーザーが、外部 ID プロバイダの使用を希望します。

SAML 2.0 ID プロバイダを有効にするには、SAML メタデータドキュメントを提供する必要があります。Login with Amazon、Facebook、Google などのソーシャル ID プロバイダを有効にするには、これらのプロバイダからのアプリ ID とアプリシークレットが必要です。ID プロバイダの任意の組み合わせを有効にすることができます。次のスクリーンショットに示すように、ログインページでは、プロバイダを追加するときにオプションが追加されます。


                複数のオプションがあるログインページ

ユーザープールを設定する最も簡単な方法は、Amazon Cognito コンソールを使用することです。[ID プロバイダ] ページを使用して外部 ID プロバイダを追加し、[アプリクライアントの設定] ページを使用して Amazon ES ドメインのアプリクライアントの ID プロバイダを有効または無効にします。たとえば、独自の SAML ID プロバイダを有効にし、ID プロバイダとして [Cognito ユーザープール] を無効にします。

手順については、Amazon Cognito 開発者ガイド の「ユーザープールのフェデレーションを使用する」および「ユーザープールアプリの ID プロバイダ設定を指定する」を参照してください。

(オプション) きめ細かなアクセスの設定

デフォルトの ID プール設定により、同じ IAM ロール (Cognito_identitypoolAuth_Role) が、ログインするすべてのユーザーが割り当てられることにお気づきかもしれません。これは、すべてのユーザーが同じ AWS リソースにアクセスできることを意味します。より詳細なアクセス制御が必要な場合 (たとえば、組織のアナリストは 8 個すべての Amazon ES ドメインにアクセスできるようにするが、他のすべてのユーザーはその 5 個のみにしかアクセスできないようにする) は、次の 2 つのオプションがあります。

  • ユーザーグループを作成し、ユーザーの認証トークンに基づいて IAM ロールを選択するように ID プロバイダを設定する。

  • 1 つ以上のルールに基づいて IAM ロールを選択するように ID プロバイダを設定する。

これらのオプションを設定するには、次のスクリーンショットに示すように、Amazon Cognito コンソールの [ID プールの編集] ページを使用します。


                認証プロバイダのロールオプション

ユーザーグループとトークン

ユーザーグループを作成するときは、グループのメンバー用の IAM ロールを選択します。グループ作成の詳細については、Amazon Cognito 開発者ガイド の「ユーザーグループ」を参照してください。

1 つ以上のユーザーグループを作成した後、ID プールのデフォルトロールではなく、グループのロールをユーザーに割り当てるように認証プロバイダを設定できます。[トークンからロールを選択する] オプションを選択します。次に、[デフォルトの認証されたロールを使用する] または [拒否] を選択して、ID プールでのグループの一部ではないユーザーの処理方法を指定します。

ルール

基本的に、ルールは Amazon Cognito が順番に評価する一連の if ステートメントです。たとえば、ユーザーの E メールアドレスに @corporate が含まれる場合、Amazon Cognito はそのユーザーに Role_A を割り当てます。ユーザーの E メールアドレスに @subsidiary が含まれる場合、そのユーザーに Role_B が割り当てられます。それ以外の場合は、デフォルトの認証されたロールがユーザーに割り当てられます。

詳細については、Amazon Cognito 開発者ガイド の「ルールベースのマッピングを使用してユーザーにロールを割り当てる」を参照してください。

(オプション) ログインページのカスタマイズ

Amazon Cognito コンソールの [UI のカスタマイズ] ページでは、カスタムロゴをアップロードし、ログインページで CSS の変更を行うことができます。手順および CSS プロパティの一覧については、Amazon Cognito 開発者ガイド の「ユーザープールのアプリ UI カスタマイズ設定の指定」を参照してください。

(省略可能) アドバンスドセキュリティを設定する

Amazon Cognito ユーザープールでは、多要素認証、侵害された認証情報の確認、およびアダプティブ認証などの高度なセキュリティ機能がサポートされています。詳細については、Amazon Cognito 開発者ガイド の「セキュリティの管理」を参照してください。

テスト

設定に問題がなければ、ユーザーエクスペリエンスが期待どおりであることを確認します。

Kibana にアクセスするには

  1. ウェブブラウザで https://elasticsearch-domain/_plugin/kibana/ にアクセスします。

  2. 任意の認証情報を使用してログインします。

  3. Kibana がロードされたら、少なくとも 1 つのインデックスパターンを設定します。Kibana は、そのパターンを使用して、どのインデックスを分析するかを特定します。「*」と入力し、[次のステップ]、[Create index pattern (インデックスパターンの作成)] の順に選択します。

  4. データを検索または調査するには、[検出] を選択します。

このプロセスのいずれかのステップが失敗した場合は、トラブルシューティング情報について、「一般的な設定の問題」を参照してください。

制限

Amazon Cognito には、そのリソースの多くでソフト制限があります。多数の Amazon ES ドメインに対して Kibana 認証を有効にする場合は、必要に応じて Amazon Cognito における制限制限の引き上げの申請について確認してください。

各 Amazon ES ドメインでは、アプリクライアントがユーザープールに追加されます。これにより、認証プロバイダが ID プールに追加されます。10 を超えるドメインに対して Kibana 認証を有効にすると、「ID プールあたりの Amazon Cognito の最大ユーザープールプロバイダ数」の制限が適用されることがあります。制限を超えた場合、Kibana の Amazon Cognito 認証を使用する設定を試みている Amazon ES ドメインが、[処理中] の設定状態でスタックする可能性があります。

一般的な設定の問題

一般的な設定の問題と解決策を、以下の表に示します。

Amazon ES の設定

問題 解答

Amazon ES can't create the role (コンソール)

適切な IAM アクセス許可がありません。「Amazon Cognito 認証の設定 (コンソール)」で指定されたアクセス許可を追加します。

User is not authorized to perform: iam:PassRole on resource CognitoAccessForAmazonES (コンソール)

IAM ロール用の iam:PassRole アクセス許可がありません。次のポリシーをアカウントにアタッチします:
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "iam:PassRole" ], "Resource": "arn:aws:iam::123456789012:role/service-role/CognitoAccessForAmazonES" } ] }

または、IAMFullAccess ポリシーをアタッチできます。

User is not authorized to perform: cognito-identity:ListIdentityPools on resource

Amazon Cognito の読み取りアクセス許可がありません。AmazonCognitoReadOnly ポリシーをアカウントにアタッチします。

An error occurred (ValidationException) when calling the CreateElasticsearchDomain operation: Amazon Elasticsearch must be allowed to use the passed role

Amazon ES が IAM ロールの信頼関係で指定されていません。ロールで、「IAM ロールについて」で指定された信頼関係が使用されていることを確認します。または、コンソールを使用して Amazon Cognito 認証を設定します。コンソールによってロールが作成されます。

An error occurred (ValidationException) when calling the CreateElasticsearchDomain operation: User is not authorized to perform: cognito-idp:action on resource: user pool

--cognito-options で指定されたロールに、Amazon Cognito にアクセスする権限がありません。このロールに、AWS が管理する AmazonESCognitoAccess ポリシーがアタッチされていることを確認します。または、コンソールを使用して Amazon Cognito 認証を設定します。コンソールによってロールが作成されます。
An error occurred (ValidationException) when calling the CreateElasticsearchDomain operation: User pool does not exist

Amazon ES はユーザープールを見つけることができません。ユーザープールを作成し、正しい ID が設定されていることを確認します。ID を見つけるには、Amazon Cognito コンソールまたは次の AWS CLI コマンドを使用できます。

aws cognito-idp list-user-pools --max-results 60 --region region

An error occurred (ValidationException) when calling the CreateElasticsearchDomain operation: IdentityPool not found

Amazon ES は ID プールを見つけることができません。ユーザープールを作成し、正しい ID が設定されていることを確認します。ID を見つけるには、Amazon Cognito コンソールまたは次の AWS CLI コマンドを使用できます。

aws cognito-identity list-identity-pools --max-results 60 --region region

An error occurred (ValidationException) when calling the CreateElasticsearchDomain operation: Domain needs to be specified for user pool

ユーザープールにドメイン名がありません。Amazon Cognito コンソールまたは次の AWS CLI コマンドを使用して、ドメイン名を設定できます。
aws cognito-idp create-user-pool-domain --domain name --user-pool-id id

Kibana へのアクセス

問題 ソリューション
目的の ID プロバイダがログインページに表示されない。

ID プロバイダの設定」で指定したように、Amazon ES アプリクライアントで ID プロバイダが有効になっていることを確認します。

ログインページが、組織に関連付けられているように見えない。

(オプション) ログインページのカスタマイズ」を参照してください。

ログイン認証情報が受け入れられない。

ID プロバイダの設定」で指定したように ID プロバイダを設定したことを確認します。

ID プロバイダとしてユーザープールを使用している場合は、アカウントが存在していること、および Amazon Cognito コンソールの [User and groups (ユーザーとグループ)] ページで確認されていることを確かめます。

Kibana がまったくロードされないか、正しく動作しない。

Amazon Cognito の認証されたロールでは、ドメイン (/*) が Kibana にアクセスして使用するためには、es:ESHttp* アクセス権限が必要です。「認証されたロールの許可」で指定したように、アクセスポリシーを追加したことを確認します。

Invalid identity pool configuration. Check assigned IAM roles for this pool. Amazon Cognito が認証されたロールを引き受けることができない。ID プール用に新しいロールを作成する代わりに、既存のロールを使用した場合は、認証されたロールの信頼関係を変更します。
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Federated": "cognito-identity.amazonaws.com" }, "Action": "sts:AssumeRoleWithWebIdentity" } ] }
または、Amazon Cognito コンソールを使って新しいロールを作成することもできます。
Token is not from a supported provider of this identity pool. ユーザープールからアプリクライアントを削除すると、この一般的でないエラーが発生する可能性があります。新しいブラウザセッションで Kibana を開いてみます。

Kibana の Amazon Cognito 認証の無効化

Kibana の Amazon Cognito 認証を無効にするには、次の手順を使用します。

Kibana の Amazon Cognito 認証を無効にするには (コンソール)

  1. https://aws.amazon.com にアクセスし、[Sign In to the Console] を選択します。

  2. [分析] で、[Elasticsearch Service] を選択します。

  3. ナビゲーションペインの [My domains (マイドメイン)] で、設定するドメインを選択します。

  4. [Configure cluster (クラスターの設定)] を選択します。

  5. Kibana 認証の場合は、[認証用に Amazon Cognito を有効化] チェックボックスをオフにします。

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

重要

Amazon Cognito ユーザープールと ID プールが不要になった場合は、それらを削除します。削除しなかった場合は、利用料金が引き続き発生します。

Kibana に Amazon Cognito 認証を使用するドメインの削除

Kibana に Amazon Cognito 認証を使用するドメインが設定状態 [Processing (処理中)] で止まらないようにするには、関連する Amazon Cognito ユーザープールと ID プールを削除する前に Amazon ES ドメインを削除します。