サービスアカウント

Elastic Stackのセキュリティ機能は、FleetサーバーなどのElasticsearchに接続する外部サービスとの統合のためにサービスアカウントを提供します。サービスアカウントには固定の特権セットがあり、サービスアカウントトークンを作成するまで認証できません。さらに、サービスアカウントはコード内で事前定義されており、常に有効です。

サービスアカウントは特定の外部サービスに対応しています。サービスアカウントのためにサービスアカウントトークンを作成します。サービスはそのトークンを使用して認証し、関連するアクションを実行できます。たとえば、Fleetサーバーはそのサービストークンを使用してElasticsearchに認証し、その後自分のAPIキーを管理できます。

同じサービスアカウントに対して複数のサービストークンを作成できるため、同じ外部サービスの複数のインスタンス間での資格情報の共有を防ぎます。各インスタンスは、独自のサービストークンを使用して認証しながら、同じアイデンティティを引き受けることができます。

サービスアカウントは、組み込みユーザーに対して柔軟性を提供します。なぜなら、

  • 内部 native レルムに依存せず、.security インデックスに依存する必要がない場合があるからです。
  • 従来のロールの代わりに、サービスアカウントのプリンシパルにちなんで名付けられたロール記述子を使用します。
  • サービスアカウントトークンを通じて複数の資格情報をサポートします。

サービスアカウントは、ユーザー取得APIの応答には含まれません。サービスアカウントを取得するには、サービスアカウント取得APIを使用します。サービスアカウント資格情報取得APIを使用して、サービスアカウントのすべてのサービス資格情報を取得します。

サービスアカウントの使用

サービスアカウントには、<namespace>/<service>の形式を持つユニークなプリンシパルがあります。ここで、namespaceはサービスアカウントのトップレベルのグループ化であり、serviceはサービスの名前であり、その名前は名前空間内で一意でなければなりません。

サービスアカウントはコード内で事前定義されています。以下のサービスアカウントが利用可能です:

  • elastic/fleet-server
  • FleetサーバーがElasticsearchと通信するために使用するサービスアカウント。
  • elastic/kibana
  • KibanaがElasticsearchと通信するために使用するサービスアカウント。
  • elastic/enterprise-search-server
  • Enterprise SearchがElasticsearchと通信するために使用するサービスアカウント。

個々のユーザーの認証にサービスアカウントを使用しないでください。サービスアカウントはサービストークンでのみ認証でき、通常のユーザーには適用されません。

サービスアカウントトークン

サービスアカウントトークン、またはサービストークンは、サービスがElasticsearchに認証するために使用するユニークな文字列です。特定のサービスアカウントに対して、各トークンはユニークな名前を持たなければなりません。トークンにはアクセス資格情報が含まれているため、それを使用するクライアントによって常に秘密に保たれるべきです。

サービストークンは、.securityインデックス(推奨)またはservice_tokensファイルのいずれかでバックアップできます。単一のサービスアカウントに対して複数のサービストークンを作成できるため、同じサービスの複数のインスタンスが異なる資格情報で実行できます。

サービスアカウントを使用するには、サービストークンを作成する必要があります。サービストークンは次のいずれかを使用して作成できます:

  • サービスアカウントトークン作成APIを使用すると、新しいサービストークンが.securityインデックスに保存され、HTTP応答にベアラートークンが返されます。
  • elasticsearch-service-tokens CLIツールを使用すると、新しいサービストークンが$ES_HOME/config/service_tokensファイルに保存され、ベアラートークンがターミナルに出力されます。

REST APIを介してサービストークンを作成することをお勧めします。APIはサービストークンを.securityインデックス内に保存するため、トークンはすべてのノードで認証に利用可能であり、クラスターのスナップショット内でバックアップされます。CLIの使用は、service_tokensファイルの作成と配布を管理する外部オーケストレーションプロセス(Elastic Cloud EnterpriseElastic Cloud on Kubernetesなど)がある場合に意図されています。

これらの2つの方法(APIとCLI)は、22の保証された秘密文字列の長さを持つサービストークンを作成します。サービストークンの秘密文字列の最小許容長は10です。この最小長に満たない場合、Elasticsearchとの認証は失敗し、サービストークンの値を確認することすらありません。

サービストークンは決して期限切れになりません。不要になった場合は、積極的に削除する必要があります。

サービストークンでの認証

サービスアカウントは現在、基本認証をサポートしていません。

サービスアカウントトークンを使用するには、生成されたトークン値をAuthorization: Bearerヘッダーを含むリクエストに含めます:

シェル

  1. curl -H "Authorization: Bearer AAEAAWVsYXN0aWM...vZmxlZXQtc2VydmVyL3Rva2VuMTo3TFdaSDZ" http://localhost:9200/_security/_authenticate

成功した認証応答には、tokenフィールドが含まれ、サービストークンの名前のためのnameフィールドとサービストークンのタイプのためのtypeフィールドが含まれます:

Js

  1. {
  2. "username": "elastic/fleet-server",
  3. "roles": [],
  4. "full_name": "Service account - elastic/fleet-server",
  5. "email": null,
  6. "token": {
  7. "name": "token1",
  8. "type": "_service_account_index"
  9. },
  10. "metadata": {
  11. "_elastic_service_account": true
  12. },
  13. "enabled": true,
  14. "authentication_realm": {
  15. "name": "_service_account",
  16. "type": "_service_account"
  17. },
  18. "lookup_realm": {
  19. "name": "_service_account",
  20. "type": "_service_account"
  21. },
  22. "authentication_type": "token"
  23. }
サービスアカウントトークンの名前。
サービスアカウントトークンのタイプ。値は常に
_service_account_で始まり、使用中のサービス
トークンバックエンドを示す文字列(fileまたはindexのいずれか)に続きます。