Kibana の Amazon Cognito 認証を設定する - Amazon Elasticsearch Service

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

Kibana の Amazon Cognito 認証を設定する

Kibana の Amazon Elasticsearch Service (Amazon ES) のデフォルトインストールを認証して保護するには、Amazon Cognito。Amazon Cognito 認証はオプションであり、Elasticsearch 5.1 以降を使用しているドメインでのみ使用できます。Amazon Cognito 認証を設定しない場合でも、Kibana のIP ベースのアクセスポリシープロキシサーバー、HTTP 基本認証、またはSAML

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

ヒント

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

Prerequisites

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

  • Amazon Cognitoユーザープール

  • Amazon CognitoID プール

  • を持つ IAM ロールAmazonESCognitoAccessポリシーをアタッチします (CognitoAccessForAmazonES)

注記

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

ユーザープールについて

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

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

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

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

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

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

ID プールについて

ID プールにより、ユーザーのログイン後に、権限の制限された一時的なロールをユーザーに割り当てることができます。ID プールを作成する手順については、」ID プール()Amazon Cognito 開発者ガイド。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 をメモしておきます。

CognitoAccessForAmazonES ロールについて

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

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

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

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

Amazon ES ドメインの設定

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

注記

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

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

コンソールによって CognitoAccessForAmazonES ロールが作成されるため、コンソールの設定エクスペリエンスが最もシンプルです。コンソールを使用して、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": "*" } ] }

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

{ "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. 選択アクション認証の変更

  5. [Amazon Cognito authentication (Amazon Cognito 認証)] で、[Enable Amazon Cognito authentication (Amazon Cognito 認証の有効化)] を選択します。

  6. を使用する場合リージョンで、Amazon Cognito ユーザープールと ID プールが含まれているリージョンを選択します。

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

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

    注記

    -新規ユーザープールを作成します。および新しい ID プールの作成リンクから Amazon Cognito コンソールに移動したら、これらのリソースを手動で作成する必要があります。このプロセスは自動的には行われません。詳細については、「Prerequisites」を参照してください。

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

  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"

次の例では、ドメインを作成します。us-east-1Kibana の Amazon Cognito 認証を有効にするリージョンCognitoAccessForAmazonESロールにドメインアクセスを提供し、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 にアクセスするために必要な権限がありません。追加のアクセス権限を持つロールを提供する必要があります。

重要

きめ細かなアクセスコントロールを設定し、「オープン」または IP ベースのアクセスポリシーを使用している場合は、この手順をスキップできます。

これらの権限は、アイデンティティベースポリシーを使用できますが、認証されたユーザーがすべての 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 ユーザープール] を無効にします。

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

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

デフォルトの ID プール設定により、同じ IAM ロール (Cognito_identitypoolAuth_Role) が、ログインするすべてのユーザーが割り当てられることにお気づきかもしれません。これは、すべてのユーザーが同じ AWS リソースにアクセスできることを意味します。使用する場合きめ細かなアクセス制御Amazon Cognito で — たとえば、組織のアナリストは、いくつかのインデックスに対する読み取り専用のアクセス権を持つようにするが、開発者はすべてのインデックスに対する書き込みアクセス権を持つようにする — 次の 2 つのオプションがあります。

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

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

これらのオプションは、ID プールの編集[Amazon Cognito コンソール] ページで (次のスクリーンショットを参照)。きめ細かなアクセスコントロールを含むチュートリアルについては、「チュートリアル: IAM マスターユーザーと Amazon Cognito」を参照してください。


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

デフォルトロールと同様に、Amazon Cognito は追加の各ロールの信頼関係に含まれている必要があります。詳細については、 を参照してください。ロールマッピング用のロールの作成()Amazon Cognito 開発者ガイド

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

ユーザーグループを作成するときは、グループのメンバー用の IAM ロールを選択します。グループを作成する方法については、」ユーザーグループ()Amazon Cognito 開発者ガイド

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

Rules

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

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

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

-UI のカスタマイズページでは、カスタムロゴをアップロードし、サインインページで CSS の変更を行うことができます。CSS プロパティの手順および完全なリストについては、ユーザープールのアプリ UI カスタマイズ設定の指定()Amazon Cognito 開発者ガイド

(オプション) アドバンスドセキュリティを設定する

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

Testing

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

Kibana にアクセスするには

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

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

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

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

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

Limits

Amazon Cognito には、そのリソースの多くでソフト制限があります。多数の Amazon ES ドメインに対して Kibana 認証を有効にする場合は、Amazon Cognito の制限およびリクエスト制限の増加必要に応じて。

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

一般的な設定上の問題

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

Amazon ES を設定する
問題 ソリューション

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

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

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

[iam:PassRoleのアクセス許可CognitoAccessForAmazonESロール。次のポリシーをアカウントにアタッチします:
{ "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 は、の信頼関係で指定されていません。CognitoAccessForAmazonESロール。ロールで、「CognitoAccessForAmazonES ロールについて」で指定された信頼関係が使用されていることを確認します。または、コンソールを使用して 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 プロバイダがログインページに表示されない。

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

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

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

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

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

ID プロバイダとしてユーザープールを使用する場合は、アカウントが存在していること、および [ユーザーとグループAmazon Cognito コンソールのページを開きます。

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

Amazon Cognito 認証ロールには、es:ESHttp*のアクセス許可 (/*) に Kibana にアクセスして使用してください。「認証されたロールの許可」で指定したように、アクセスポリシーを追加したことを確認します。

Invalid identity pool configuration. Check assigned IAM roles for this pool. Amazon Cognito には、認証されたユーザーに代わって IAM ロールを引き受けるアクセス権限がありません。ロールの信頼関係を変更して、以下を含めます。
{ "Version": "2012-10-17", "Statement": [{ "Effect": "Allow", "Principal": { "Federated": "cognito-identity.amazonaws.com" }, "Action": "sts:AssumeRoleWithWebIdentity", "Condition": { "StringEquals": { "cognito-identity.amazonaws.com:aud": "identity-pool-id" }, "ForAnyValue:StringLike": { "cognito-identity.amazonaws.com:amr": "authenticated" } } }] }
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. 選択アクション認証の変更

  5. [Amazon Cognito authentication (Amazon Cognito 認証)] で、[Enable Amazon Cognito authentication (Amazon Cognito 認証の有効化)] チェックボックスをオフにします。

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

重要

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

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

Kibana の Amazon Cognito 認証を使用するドメインが設定状態でスタックしないようにするにはProcessing、Amazon ES ドメインを削除する関連付けられている Amazon Cognito ユーザープールと ID プールを削除します。