Elasticsearch學(xué)習(xí)筆記(12)

目錄

配置一個文件域

您可以使用內(nèi)置的file內(nèi)部域管理和驗證用戶。關(guān)于file領(lǐng)域用戶的所有數(shù)據(jù)存儲在集群中每個節(jié)點上的兩個文件中:usersusers_roles。這兩個文件都位于ES_PATH_CONF中,并在啟動時讀取。

重要:usersusers_roles文件由節(jié)點本地管理,而不是由集群全局管理。這意味著對于一個典型的多節(jié)點集群,需要對集群中的每個節(jié)點應(yīng)用完全相同的更改。

更安全的方法是將更改應(yīng)用于其中一個節(jié)點,并將文件分發(fā)或復(fù)制到集群中的所有其他節(jié)點(手動或使用配置管理系統(tǒng)(如Puppet或Chef)。

默認(rèn)情況下,file域被添加到域鏈中。您不需要顯式地配置file域。

更多關(guān)于文件域的信息,參見 File-based user authentication。

1、(可選)在elasticsearch.yml文件中在xpack.security.authc.realms命名空間下增加一個域配置其類型是file。在最低限度上,你必須設(shè)置域的type屬性為file。如果要配置多個領(lǐng)域,還應(yīng)該顯式設(shè)置order屬性。

例如, 下面的代碼片段顯示了一個文件領(lǐng)域配置,該配置將順序設(shè)置為0,以便首先檢查領(lǐng)域:

xpack:
 security:
  authc:
   realms:
    file1:
     type: file
     order: 0

2、重啟Elasticsearch

3、將用戶信息添加到集群中每個節(jié)點上的ES_PATH_CONF/users文件中。

users文件存儲所有用戶及其密碼。文件中的每一行表示一個用戶條目,該條目由用戶名和散列和加鹽的密碼組成。

rdeniro:$2a$10$BBJ/ILiyJ1eBTYoRKxkqbuDEdYECplvxnqQ47uiowE7yGqvCEgj9W
alpacino:$2a$10$cNwHnElYiMYZ/T3K4PvzGeJ1KbpXZp2PfoQD.gfaVdImnHOwIuBKS
jacknich:{PBKDF2}50000$z1CLJt0MEFjkIK5iEfgvfnA6xq7lF25uasspsTKSo5Q=$XxCVLbaKDimOdyWgLCLJiyoiWpA/XDMe/xtVgn1r5Sg=

注意:為了限制憑證被盜的風(fēng)險,減少憑證被盜的危害,文件域根據(jù)安全最佳實踐存儲密碼和緩存用戶憑據(jù)。默認(rèn)情況下,散列版本的用戶憑證存儲在內(nèi)存中,使用一個加鹽的sha-256哈希算法和一個散列版本的密碼存儲在磁盤上,使用bcrypt哈希算法進(jìn)行加鹽和散列。使用不同的哈希算法,參見 User cache and password hash algorithmsedit.

雖然可以使用任何標(biāo)準(zhǔn)文本編輯器直接修改用戶文件,我們強烈建議使用elasticsearch-users工具應(yīng)用所需的更改。

重要:作為集群的管理員,您有責(zé)任確保在集群中的每個節(jié)點上定義相同的用戶。Elasticsearch的安全特性沒有提供任何機制來保證這一點。

4、將角色信息添加到集群中每個節(jié)點上的ES_PATH_CONF/users_roles文件中。users_roles文件存儲與用戶關(guān)聯(lián)的角色。例如:

admin:rdeniro
power_user:alpacino,jacknich
user:jacknich

每一行將一個角色映射到與該角色關(guān)聯(lián)的所有用戶的逗號分隔列表。

您可以使用elasticsearch-users工具更新該文件。您必須確保對集群中的每個節(jié)點進(jìn)行相同的更改。

5、(可選)修改users文件和users_roles文件的檢查頻次。
默認(rèn)情況下,Elasticsearch每5秒檢查這些文件的更改。您可以通過更改elasticsearch.yml文件中的resource.reload.interval.high設(shè)置來更改此默認(rèn)行為(由于這是彈性搜索中的常見設(shè)置,更改其值可能會影響系統(tǒng)中的其他調(diào)度)。

配置一個LDAP域

您可以通過與輕量級目錄訪問協(xié)議(LDAP)服務(wù)器通信來配置Elasticsearch來驗證用戶。要與LDAP集成,需要配置ldap域并將LDAP組映射到用戶角色。

更多關(guān)于LDAP域的信息,參見LDAP User Authentication

1、確定要使用哪種模式。ldap域支持兩種操作方式,用戶搜索模式和帶有用戶DNs特定模板的模式。

LDAP用戶搜索是最常見的操作模式。在這個模式中,具有搜索LDAP目錄權(quán)限的特定用戶用于根據(jù)提供的用戶名和LDAP屬性搜索身份驗證用戶的DN。一旦找到,將通過使用找到的DN和提供的密碼嘗試綁定到LDAP服務(wù)器來驗證用戶。

如果LDAP環(huán)境為用戶使用一些特定的標(biāo)準(zhǔn)命名條件,則可以使用用戶DN模板來配置域。這種方法的優(yōu)點是,不需要執(zhí)行搜索就可以找到用戶DN。但是,可能需要多個綁定操作來找到正確的用戶DN。

2、使用用戶搜索配置一個ldap域:
  a.在elasticsearch.yml文件中在xpack.security.authc.realms命名空間下增加一個類型為ldap的域配置。至少,你必須設(shè)置域的typeldap,指定LDAP服務(wù)的url,并且設(shè)置user_search.base_dn到用戶搜索容器DN。如果你正在配置多個領(lǐng)域,您還應(yīng)該顯式地設(shè)置order屬性,以控制在身份驗證期間查詢領(lǐng)域的順序。有關(guān)可以為LDAP領(lǐng)域設(shè)置的所有選項,請參見LDAP領(lǐng)域設(shè)置。

例如,下面的代碼片段顯示了配置了用戶搜索的LDAP域:

xpack:
  security:
    authc:
      realms:
        ldap1:
          type: ldap
          order: 0
          url: "ldaps://ldap.example.com:636"
          bind_dn: "cn=ldapuser, ou=users, o=services, dc=example, dc=com"
          user_search:
            base_dn: "dc=example,dc=com"
            filter: "(cn={0})"
          group_search:
            base_dn: "dc=example,dc=com"
          files:
            role_mapping: "ES_PATH_CONF/role_mapping.yml"
          unmapped_groups_as_roles: false

bind_dn用戶的密碼應(yīng)該通過向Elasticsearch密鑰存儲區(qū)添加適當(dāng)?shù)?strong>secure_bind_password設(shè)置來配置。例如,下面的命令為上面的示例域添加密碼:

bin/elasticsearch-keystore add
xpack.security.authc.realms.ldap1.secure_bind_password

重要:當(dāng)你在elasticsearch.yml文件中配置域時,只有您指定的領(lǐng)域用于身份驗證。如果你也想使用nativefile域,你必須在域鏈里包含它們。

3、使用用戶DN模板配置ldap域:
  a.在elasticsearch.yml文件中在xpack.security.authc.realms命名空間下增加一個類型為ldap的域配置。至少,你必須設(shè)置域的typeldap,并使用user_dn_templates選項指定至少一個模板。如果你正在配置多個領(lǐng)域,您還應(yīng)該顯式地設(shè)置order屬性,以控制在身份驗證期間查詢領(lǐng)域的順序。有關(guān)可以為LDAP領(lǐng)域設(shè)置的所有選項,請參見LDAP領(lǐng)域設(shè)置。

例如,下面的代碼片段顯示了使用用戶DN模板配置的LDAP域:

xpack:
  security:
    authc:
      realms:
        ldap1:
          type: ldap
          order: 0
          url: "ldaps://ldap.example.com:636"
          user_dn_templates:
            - "cn={0}, ou=users, o=marketing, dc=example, dc=com"
            - "cn={0}, ou=users, o=engineering, dc=example, dc=com"
          group_search:
            base_dn: "dc=example,dc=com"
          files:
            role_mapping: "/mnt/elasticsearch/group_to_role_mapping.yml"
          unmapped_groups_as_roles: false

重要:bind_dn設(shè)置在模板模式中不被使用。所有LDAP操作都作為身份驗證用戶運行。

4、(可選)配置安全特性如何與多個LDAP服務(wù)器交互。load_balance.type設(shè)置可以在領(lǐng)域級別使用。Elasticsearch安全特性支持故障轉(zhuǎn)移和負(fù)載平衡操作模式。參見 LDAP realm settingsedit。

5、(可選)為了保護(hù)密碼,加密Elasticsearch和LDAP服務(wù)器之間的通信(encrypt communications between Elasticsearch and the LDAP server)

6、重啟elasticsearch

7、將LDAP組映射到角色。

ldap域允許您通過ldap組或其他元數(shù)據(jù)將ldap用戶映射到角色??梢酝ㄟ^添加角色映射API或使用存儲在每個節(jié)點上的文件來配置此角色映射。當(dāng)用戶使用LDAP進(jìn)行身份驗證時,該用戶的特權(quán)是由用戶映射到的角色定義的所有特權(quán)的聯(lián)合。

在映射定義中,可以使用組的專有名稱指定組。例如,下面的映射配置將LDAPadmins組映射到monitoringusers角色,并將users組映射到user角色。

通過權(quán)限映射API配置:

curl -X PUT "localhost:9200/_xpack/security/role_mapping/admins" -H 'Content-Type: application/json' -d'
{
 "roles" : [ "monitoring" , "user" ],
 "rules" : { "field" : {
  "groups" : "cn=admins,dc=example,dc=com"   #1
 } },
 "enabled": true
}
'

#1admins組的LDAP專有名稱(DN)

curl -X PUT "localhost:9200/_xpack/security/role_mapping/basic_users" -H 'Content-Type: application/json' -d'
{
 "roles" : [ "user" ],
 "rules" : { "field" : {
  "groups" : "cn=users,dc=example,dc=com"   #1
 } },
 "enabled": true
}
'

#1users組的LDAP專有名稱(DN)

或者,也可以通過角色映射文件配置:

monitoring: #1
 - "cn=admins,dc=example,dc=com" #2
user:
 - "cn=users,dc=example,dc=com" #3
 - "cn=admins,dc=example,dc=com"

#1:映射角色的名稱。
#2admins組的LDAP專有名稱(DN)。
#3users組的LDAP專有名稱(DN)。

更多信息,參見 Mapping LDAP Groups to RolesMapping Users and Groups to Roles

注意:LDAP領(lǐng)域支持授權(quán)領(lǐng)域作為角色映射的替代

8、(可選)在LDAP域中配置metadata設(shè)置,以便在用戶的元數(shù)據(jù)中包含額外的字段。

默認(rèn)情況下,ldap_dnldap_groups在用戶的元數(shù)據(jù)中填充了。更多信息, 參見 User Metadata in LDAP Realms

下面的示例將用戶的公共名稱(cn)作為元數(shù)據(jù)中的附加字段。

xpack:
  security:
    authc:
      realms:
        ldap1:
          type: ldap
          metadata: cn

配置一個本地域

管理和驗證用戶的最簡單方法是使用內(nèi)部的native領(lǐng)域。

默認(rèn)情況下,當(dāng)沒有配置其他領(lǐng)域時,本地領(lǐng)域是可用的。如果已經(jīng)在elasticsearch.yml文件中配置了其他領(lǐng)域設(shè)置。您必須將本機領(lǐng)域添加到領(lǐng)域鏈。

你可以在elasticsearch.yml文件中在xpack.security.authc.realms命名空間下為native域配置其他選項。顯式配置本地領(lǐng)域使您能夠設(shè)置它在領(lǐng)域鏈中出現(xiàn)的順序,暫時禁用該領(lǐng)域,并控制其緩存選項。

1、增加一個類型為native的域配置到elasticsearch.yml文件下的xpack.security.authc.realms命名空間下。至少,你必須設(shè)置域的typenative。如果你配置了多個域,你還應(yīng)該顯示地設(shè)置order屬性。

參見 Native realm settings查看你可以為native域設(shè)置的所有選項。例如,例如,下面的代碼片段顯示了一個native領(lǐng)域配置,它將order設(shè)置為0,以便首先檢查該領(lǐng)域:

xpack:
 security:
  authc:
   realms:
    native1:
     type: native
     order: 0

注意:為了限制憑證盜竊的暴露并減輕憑證的危害,本機領(lǐng)域根據(jù)安全最佳實踐存儲密碼并緩存用戶憑證。默認(rèn)情況下,散列版本的用戶憑證存儲在內(nèi)存中,使用一個加鹽的sha-256哈希算法和一個哈希版本的密碼存儲在用bcrypt哈希算法加鹽和散列的磁盤上。要使用不同的哈希算法,參見 User cache and password hash algorithms。

2、重啟elasticsearch

3、在Kibana中在Management/Security/Users頁面管理你的用戶?;蛘?,使用User Management APIs

配置一個PKI域

你可以配置Elasticsearch使用公鑰設(shè)置(PKI)證書來驗證用戶。這要求客戶端提供X.509證書。

注意:不能再Kibana中使用PKI證書來認(rèn)證用戶。

要在ELasticsearch中使用PKI,你要配置一個PKI域,以使客戶端在所需的網(wǎng)絡(luò)層(運輸層或者網(wǎng)絡(luò)層)上身份驗證,并將用戶證書中的專有名稱(DNs)映射到role-mapping API或角色映射文件中的角色。

您還可以使用PKI和用戶名/密碼身份驗證的組合。例如,你可以在運輸層啟用SSL/TLS,并定義一個KPI域來要求運輸客戶端使用X.509證書認(rèn)證,同時仍然使用用戶名和密碼憑證驗證HTTP流量。你還可以設(shè)置xpack.security.transport.ssl.client_authenticationoptional來允許沒有證書的客戶端使用其他憑證進(jìn)行身份驗證。

重要:你必須啟用SSL/TLS并且啟用客戶端認(rèn)證以便使用PKI。

更多信息,參見 PKI User Authentication

1、在elasticsearch.yml文件的xpack.security.authc.realms命名空間下增加一個類型為pki的域設(shè)置。至少,你必須設(shè)置域的typepki。如果你正在配置多個域,你還應(yīng)該顯示地設(shè)置order屬性。參見PKI realm settings查看所有你可以為一個pki域設(shè)置的所有選項。

例如, 下面的代碼片段顯示了最基本的pki領(lǐng)域配置:

xpack:
 security:
  authc:
   realms:
    pki1:
     type: pki

>使用此配置,SSL/TLS層信任的任何證書都可以接受身份驗證。用戶名是從證書的DN中提取的公共名稱(CN)。

重要:當(dāng)你在elasticsearch.yml文件中配置域時,只有你指定的域被用來認(rèn)證。如果你還想使用nativefile域,你必須在域鏈中包含它們。

如果希望使用DN的CN以外的其他東西作為用戶名,可以指定regex提取所需的用戶名。例如,下面配置中的regex從DN提取電子郵件地址:

xpack:
 security:
  authc:
   realms:
    pki1:
     type: pki
     username_pattern: "EMAILADDRESS=(.*?)(?:,|$)"

2、重啟Elasticsearch

3、啟用SSL/TLS

4、在所需的網(wǎng)絡(luò)層上啟用客戶機身份驗證(傳輸或http)。

PKI領(lǐng)域依賴于節(jié)點網(wǎng)絡(luò)接口的TLS設(shè)置。可以將領(lǐng)域配置為比底層網(wǎng)絡(luò)連接更具限制性——這也就是說,可以對節(jié)點進(jìn)行配置,使某些連接被網(wǎng)絡(luò)接口接受,但隨后無法通過PKI領(lǐng)域的身份驗證。然而,反過來是不可能的。PKI域無法驗證被網(wǎng)絡(luò)接口拒絕的連接。

特別是這意味著:

  • 傳輸或http接口必須通過將client_authentication設(shè)置為optionalrequired來請求客戶機證書。
  • 接口必須信任通過配置truststore或者certificate_authorities路徑,或者通過設(shè)置verification_modenone的客戶端提供的證書。參見xpack.ssl.verification_mode查看關(guān)于這個設(shè)置的解釋。
  • 接口支持的協(xié)議必須與客戶機使用的協(xié)議兼容。

必須將相關(guān)的網(wǎng)絡(luò)接口(傳輸或http)配置為信任將在PKI領(lǐng)域內(nèi)使用的任何證書。但是,可以配置PKI領(lǐng)域,只信任網(wǎng)絡(luò)接口接受的證書的子集。當(dāng)SSL/TLS層信任帶有由一個不同CA簽名而不是某個你自己的簽名的客戶機提供的證書時,這一點非常有用。

要使用自己的信任存儲區(qū)配置PKI領(lǐng)域,請指定truststore.path選項。例如:

xpack:
security:
 authc:
  realms:
   pki1:
    type: pki
    truststore:
     path: "/path/to/pki_truststore.jks"
     password: "x-pack-test-password"

certificate_authorities選項用作為truststore.path設(shè)置的一種替代。

5、映射pki用戶權(quán)限
你可以通過role mapping APIs或者使用一個存儲在每個節(jié)點上的文件映射PKI用戶的權(quán)限。當(dāng)一個用戶對PKI域進(jìn)行身份驗證時,該用戶的特權(quán)是由用戶映射到的角色定義的所有特權(quán)的聯(lián)合。

您通過用戶證書中的專有名稱來標(biāo)識用戶。例如,下面的映射配置映射John Doesuser權(quán)限:
使用role-mappingAPI:

curl -X PUT "localhost:9200/_xpack/security/role_mapping/users" -H 'Content-Type: application/json' -d'
{
  "roles" : [ "user" ],
  "rules" : { "field" : {
    "dn" : "cn=John Doe,ou=example,o=com"   #1
  } },
  "enabled": true
}
'

#1:PKI用戶的專有名稱(DN)

或者,二選一地,在一個role-mapping文件中配置:

user: #1
 - "cn=John Doe,ou=example,o=com" #2

#1:權(quán)限的名稱
#2:PKI用戶的專有名稱(DN)。

PKI用戶的分離名稱遵循X.500命名約定,其中將最特定的字段(如cn或uid)放在名稱的開頭,將最一般的字段(如o或dc)放在名稱的末尾。一些工具,例如openssl,可能會以不同的格式打印出主題名。

確定證書正確DN的一種方法是使用authenticate API(使用相關(guān)的PKI證書作為身份驗證的手段)并檢查結(jié)果中的元數(shù)據(jù)字段。用戶的專有名稱將在pki_dn鍵下填充。您還可以使用authenticate API來驗證角色映射。

更多信息,參見Mapping Users and Groups to Roles

注意:PKI領(lǐng)域支持授權(quán)領(lǐng)域作為角色映射的替代。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容