サービスアカウント
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 EnterpriseやElastic Cloud on Kubernetesなど)がある場合に意図されています。
これらの2つの方法(APIとCLI)は、22
の保証された秘密文字列の長さを持つサービストークンを作成します。サービストークンの秘密文字列の最小許容長は10
です。この最小長に満たない場合、Elasticsearchとの認証は失敗し、サービストークンの値を確認することすらありません。
サービストークンは決して期限切れになりません。不要になった場合は、積極的に削除する必要があります。
サービストークンでの認証
サービスアカウントは現在、基本認証をサポートしていません。
サービスアカウントトークンを使用するには、生成されたトークン値をAuthorization: Bearer
ヘッダーを含むリクエストに含めます:
シェル
curl -H "Authorization: Bearer AAEAAWVsYXN0aWM...vZmxlZXQtc2VydmVyL3Rva2VuMTo3TFdaSDZ" http://localhost:9200/_security/_authenticate
成功した認証応答には、token
フィールドが含まれ、サービストークンの名前のためのname
フィールドとサービストークンのタイプのためのtype
フィールドが含まれます:
Js
{
"username": "elastic/fleet-server",
"roles": [],
"full_name": "Service account - elastic/fleet-server",
"email": null,
"token": {
"name": "token1",
"type": "_service_account_index"
},
"metadata": {
"_elastic_service_account": true
},
"enabled": true,
"authentication_realm": {
"name": "_service_account",
"type": "_service_account"
},
"lookup_realm": {
"name": "_service_account",
"type": "_service_account"
},
"authentication_type": "token"
}
サービスアカウントトークンの名前。 | |
サービスアカウントトークンのタイプ。値は常に_service_account_ で始まり、使用中のサービストークンバックエンドを示す文字列( file またはindex のいずれか)に続きます。 |