PKI認証APIの委任
X509CertificateチェーンをElasticsearchアクセストークンに交換する機能を実装します。
リクエスト
POST /_security/delegate_pki
前提条件
- このAPIを呼び出すには、(プロキシ)ユーザーが
delegate_pki
またはall
クラスター特権を持っている必要があります。kibana_system
ビルトインロールはすでにこの特権を付与しています。詳細はセキュリティ特権を参照してください。
説明
このAPIは、ElasticsearchアクセストークンのためにX509Certificateチェーンを交換する機能を実装します。証明書チェーンは、RFC 5280に従って、delegation.enabled
がtrue
に設定されているすべてのインストールされたPKIレルムの信頼構成を順次考慮することによって検証されます(デフォルトはfalse
です)。成功裏に信頼されたクライアント証明書は、該当するレルムusername_pattern
に従って、主題の識別名の検証の対象にもなります。
このAPIは、ユーザーのTLSセッションを終了させるが、PKIレルムを使用してユーザーを認証したいスマートで信頼されたプロキシ(Kibanaなど)によって呼び出されます。これは、ユーザーがElasticsearchに直接接続したかのように行われます。詳細については、Kibanaに接続するクライアントのPKI認証を参照してください。
ターゲット証明書の主題公開鍵と対応する秘密鍵との関連は検証されません。これはTLS認証プロセスの一部であり、このAPIを呼び出すプロキシに委任されます。プロキシはTLS認証を実行したと信頼されており、このAPIはその認証をElasticsearchアクセストークンに変換します。
リクエストボディ
x509_certificate_chain
- (必須、文字列のリスト)X509Certificateチェーンは、順序付きの文字列配列として表されます。配列内の各文字列は、証明書のDERエンコーディングのbase64エンコード(RFC4648のセクション4 - base64urlエンコードではない)です。
最初の要素は、アクセスを要求している主題識別名を含むターゲット証明書です。これに続いて追加の証明書が続く場合があります。各後続の証明書は、前の証明書を認証するために使用されます。
レスポンスボディ
access_token
- (文字列)クライアントの証明書の主題識別名に関連付けられたアクセストークン。
expires_in
- (時間単位)トークンが有効期限切れになるまでの時間(秒単位)。
type
- (文字列)トークンのタイプ。
例
コンソール
POST /_security/delegate_pki
{
"x509_certificate_chain": ["MIIDeDCCAmCgAwIBAgIUBzj/nGGKxP2iXawsSquHmQjCJmMwDQYJKoZIhvcNAQELBQAwUzErMCkGA1UEAxMiRWxhc3RpY3NlYXJjaCBUZXN0IEludGVybWVkaWF0ZSBDQTEWMBQGA1UECxMNRWxhc3RpY3NlYXJjaDEMMAoGA1UEChMDb3JnMB4XDTIzMDcxODE5MjkwNloXDTQzMDcxMzE5MjkwNlowSjEiMCAGA1UEAxMZRWxhc3RpY3NlYXJjaCBUZXN0IENsaWVudDEWMBQGA1UECxMNRWxhc3RpY3NlYXJjaDEMMAoGA1UEChMDb3JnMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAllHL4pQkkfwAm/oLkxYYO+r950DEy1bjH+4viCHzNADLCTWO+lOZJVlNx7QEzJE3QGMdif9CCBBxQFMapA7oUFCLq84fPSQQu5AnvvbltVD9nwVtCs+9ZGDjMKsz98RhSLMFIkxdxi6HkQ3Lfa4ZSI4lvba4oo+T/GveazBDS+NgmKyq00EOXt3tWi1G9vEVItommzXWfv0agJWzVnLMldwkPqsw0W7zrpyT7FZS4iLbQADGceOW8fiauOGMkscu9zAnDR/SbWl/chYioQOdw6ndFLn1YIFPd37xL0WsdsldTpn0vH3YfzgLMffT/3P6YlwBegWzsx6FnM/93Ecb4wIDAQABo00wSzAJBgNVHRMEAjAAMB0GA1UdDgQWBBQKNRwjW+Ad/FN1Rpoqme/5+jrFWzAfBgNVHSMEGDAWgBRcya0c0x/PaI7MbmJVIylWgLqXNjANBgkqhkiG9w0BAQsFAAOCAQEACZ3PF7Uqu47lplXHP6YlzYL2jL0D28hpj5lGtdha4Muw1m/BjDb0Pu8l0NQ1z3AP6AVcvjNDkQq6Y5jeSz0bwQlealQpYfo7EMXjOidrft1GbqOMFmTBLpLA9SvwYGobSTXWTkJzonqVaTcf80HpMgM2uEhodwTcvz6v1WEfeT/HMjmdIsq4ImrOL9RNrcZG6nWfw0HR3JNOgrbfyEztEI471jHznZ336OEcyX7gQuvHE8tOv5+oD1d7s3Xg1yuFp+Ynh+FfOi3hPCuaHA+7F6fLmzMDLVUBAllugst1C3U+L/paD7tqIa4ka+KNPCbSfwazmJrt4XNiivPR4hwH5g=="]
}
一要素の証明書チェーン。 |
コンソール-結果
{
"access_token" : "dGhpcyBpcyBub3QgYSByZWFsIHRva2VuIGJ1dCBpdCBpcyBvbmx5IHRlc3QgZGF0YS4gZG8gbm90IHRyeSB0byByZWFkIHRva2VuIQ==",
"type" : "Bearer",
"expires_in" : 1200,
"authentication" : {
"username" : "Elasticsearch Test Client",
"roles" : [ ],
"full_name" : null,
"email" : null,
"metadata" : {
"pki_dn" : "O=org, OU=Elasticsearch, CN=Elasticsearch Test Client",
"pki_delegated_by_user" : "test_admin",
"pki_delegated_by_realm" : "file"
},
"enabled" : true,
"authentication_realm" : {
"name" : "pki1",
"type" : "pki"
},
"lookup_realm" : {
"name" : "pki1",
"type" : "pki"
},
"authentication_type" : "realm"
}
}