前文我們瞭解了Ceph叢集儲存池操作相關話題,回顧請參考https://www.cnblogs.com/qiuhom-1874/p/16743611.html;今天我們來聊一聊在ceph上認證和授權的相關話題;
我們知道ceph作為一個分散式儲存系統,使用者想要在其上面儲存資料,首先得通過認證以後,才能正常使用ceph;那麼對於ceph來講,它是怎麼認證使用者的呢?除了認證,我們知道不是所有使用者都能在ceph上建立儲存池,刪除儲存池等;這也意味著每個使用者都有一定的許可權,在自己的許可權範圍內操作,ceph才算得上是一個安全的儲存系統;那麼ceph的認證和授權到底是怎麼做的呢?
CephX認證機制
Ceph使用cephx協定對使用者端進行身份認證,其過程大致是這樣的;每個mon都可以對使用者端進行身份驗證並分發金鑰;這意味著認證靠mon節點完成,不會存在單點和效能瓶頸;mon會返回用於身份驗證的資料結構,其中包含獲取Ceph服務時用到的session key;所謂session key就是使用者端用來向mon請求所需服務的憑證;session key是通過使用者端的金鑰進行加密傳輸;當mon收到使用者端認證請求後,首先生成session key,然後用使用者端的金鑰加密session key,然後傳送給使用者端,使用者端用自己的金鑰將其解密,拿到session key;使用者端有了session key以後,它就可以用這個session key向mon請求服務,mon收到使用者端的請求(攜帶session key),此時mon會向用戶端提供一個ticket(入場卷,票據)然後用session key加密後傳送給使用者端;隨後使用者端用session key解密,拿著這個憑證到對應osd完成認證;
以上過程,我們需要注意,使用者端的金鑰是通過mon節點在建立使用者帳號時就會生成,所以mon節點有對應使用者端的金鑰,所以通過使用者端的金鑰加密,使用者端可以用自己的金鑰解密;其次mon節點生成的session key 是有記錄的,所以對於不同使用者端來說,都有不同的記錄;並且該session key是有時間限制的;過期即便是對應使用者端,也沒法正常使用;所以使用者端拿著對應session key向mon請求服務,對應mon都是認可的,所以mon會發放ticket;最後我們要知道,MON和OSD都是共用使用者端的金鑰和session key,以及mon發放的ticket,所以使用者端拿著mon發放的ticket,對應osd是認可的;這也意味著不管是那個mon節點發放的ticket,對應所有mon節點和osd都是知道的;簡單講就是叢集元件之間共用同一個secret;
CephX身份驗證MDS和OSD
提示:簡要過程是使用者端請求建立使用者,mon建立使用者並返回與共用金鑰給使用者端;使用者端向mon發起認證,認證成功,mon會返回一個session key;在規定時效範圍內,使用者端拿著session key向mon請求ticket,mon生成ticket並用對應session加密,使用者端收到對應mon返回的資料用session key解密,拿到ticket;隨後使用者端拿著對應當ticket去mds或者osd進行資料存取操作,對應元件會被認證通過,因為mon和mds、osd之間都是共用secret;
這裡需要注意,CephX身份驗正功能僅限制Ceph的各元件之間,它不能擴充套件到其它非Ceph元件;其次它並不解決資料傳輸加密的問題;什麼意思呢?我們知道ceph的使用者端介面有rbd、cephfs和radosgw;對於ceph來講,它並不關心什麼樣的使用者端通過rbd、cephfs、radosgw介面量存取資料;它只關心rbd、cephfs、radosgw這些使用者端介面程式能夠正常認證通過;簡單講就是資料最後「一公里」它不負責,至於用rbd、cephfs、radosgw這些介面的使用者端是誰,怎麼傳輸資料它管不著;
認證與授權相關術語
無論Ceph使用者端是何型別,Ceph都會在儲存池中將所有資料儲存為物件;Ceph使用者需要擁有儲存池存取許可權才能讀取和寫入資料;Ceph使用者必須擁有執行許可權才能使用Ceph的管理命令;
使用者:所謂使用者是指個人或系統參與者(例如應用);通過建立使用者,可以控制誰(或哪個參與者)能夠存取Ceph儲存叢集、以及可存取的儲存池及儲存池中的資料;Ceph支援多種型別的使用者,但可管理的使用者都屬於Client型別;區分使用者型別的原因在於,MON、OSD和MDS等系統元件也使用cephx協定,但它們非人為使用者端;通過點號來分隔使用者型別和使用者名稱,格式為TYPE.ID,例如client.admin等
授權和使能:Ceph基於「使能(caps)」來描述使用者可針對MON、OSD或MDS使用的許可權範圍或級別;通用語法格式:daemon-type 'allow caps' [...];MON使能,包括r、w、x和allow profile cap,例如:mon 'allow rwx',以及mon 'allow profile osd'等;OSD使能包括r、w、x、class-read、class-write和profile osd;此外,OSD 使能還允許進行儲存池和名稱空間設定;MDS使能只需要allow,或留空;
使能的意義
allow:需先於守護行程的存取設定指定,僅對MDS表示rw之意,其它的表示字面意義;
r:讀取許可權,存取MON以檢索CRUSH時依賴此使能;
w:物件寫入許可權;
x:呼叫類方法(讀取和寫入)的能力,以及在MON上執行auth操作的能力;
class-read:x能力的子集,授予使用者呼叫類讀取方法的能力;
class-write:x的子集,授予使用者呼叫類寫入方法的能力;
*:授予使用者對特定守護行程/儲存池的讀取、寫入和執行許可權,以及執行管理命令的能力;
profile osd:授予使用者以某個OSD身份連線到其他OSD或監視器的許可權,授予OSD許可權,使OSD能夠處理複製檢測訊號流量和狀態報告;
profile mds: 授予使用者以某個MDS身份連線到其他MDS或監視器的許可權;
profile bootstrap-osd: 授予使用者引導OSD的許可權,授權給部署工具,使其在引導OSD時有權新增金鑰;
profile bootstrap-mds:授予使用者引導後設資料伺服器的許可權,授權給部署工具,使其在引導後設資料伺服器時有權新增金鑰;
Ceph使用者管理
Ceph叢集管理員能夠直接在Ceph叢集中建立、更新和刪除使用者;建立使用者時,可能需要將金鑰分發到使用者端,以便將金鑰新增到金鑰環;所謂金鑰環,我們就可以理解為存放金鑰的一個檔案,該檔案可以同時存放一個或多個使用者的金鑰資訊;有點類似我們生活中的鑰匙環,我們可以在上面掛一個或多個鑰匙;
列出使用者命令:ceph auth list
[root@ceph-admin ~]# ceph auth list installed auth entries: mds.ceph-mon02 key: AQDT1y9jaMUZDRAA79b3XSXqBbXUlNsT0RLeiw== caps: [mds] allow caps: [mon] allow profile mds caps: [osd] allow rwx osd.0 key: AQD3+i1j5IJQCxAAOjQdvckg8TskXu7c4MbPAA== caps: [mgr] allow profile osd caps: [mon] allow profile osd caps: [osd] allow * osd.1 key: AQAo7C1j+dEDEBAAAA47bD+nZQZuV4kJjnqACA== caps: [mgr] allow profile osd caps: [mon] allow profile osd caps: [osd] allow * osd.2 key: AQA77C1j5ot+DhAAJ+Y1KwgI2zsxRHmTUkfing== caps: [mgr] allow profile osd caps: [mon] allow profile osd caps: [osd] allow * osd.3 key: AQBM7C1jdIuHEhAAYBA9gzC4J+kZUxkMzhjq4g== caps: [mgr] allow profile osd caps: [mon] allow profile osd caps: [osd] allow * osd.4 key: AQBq7C1jZrNZKhAAK+TvnPgK0jAWIwz0PYFT/g== caps: [mgr] allow profile osd caps: [mon] allow profile osd caps: [osd] allow * osd.5 key: AQB57C1jVcczERAAxJ3iqvKS/2kfE4HlFQHIWQ== caps: [mgr] allow profile osd caps: [mon] allow profile osd caps: [osd] allow * osd.6 key: AQCP7C1jB80KGhAA9iXzAg+9ANWjgPb2ZdWdhw== caps: [mgr] allow profile osd caps: [mon] allow profile osd caps: [osd] allow * osd.7 key: AQCe7C1jbx4rNxAANOB3PPLxRXi/st1UYiTWqQ== caps: [mgr] allow profile osd caps: [mon] allow profile osd caps: [osd] allow * osd.8 key: AQCz7C1jUGzQIhAAj6aTVM6rNsTO3Lp08rePzg== caps: [mgr] allow profile osd caps: [mon] allow profile osd caps: [osd] allow * osd.9 key: AQDA7C1jwXTrEBAATszxwOKepUHzZ5WKwIMu7w== caps: [mgr] allow profile osd caps: [mon] allow profile osd caps: [osd] allow * client.admin key: AQB94C1jTO8jJhAAY4Zhy40wduyIONnRqxtkEA== caps: [mds] allow * caps: [mgr] allow * caps: [mon] allow * caps: [osd] allow * client.bootstrap-mds key: AQB94C1jRPwjJhAAZsfgne6whasyCmSCgefocw== caps: [mon] allow profile bootstrap-mds client.bootstrap-mgr key: AQB94C1jvQQkJhAA9y2LmEvBTG0Mjew8k0ecdw== caps: [mon] allow profile bootstrap-mgr client.bootstrap-osd key: AQB94C1jDg4kJhAAhQPCebi6JfF9HZo4q39WGA== caps: [mon] allow profile bootstrap-osd client.bootstrap-rbd key: AQB94C1jkxYkJhAAEUjId8hdDCA67PX+SQXAYw== caps: [mon] allow profile bootstrap-rbd client.bootstrap-rgw key: AQB94C1jPx4kJhAAXIwArGEkQ76tQG1NnJ0Wmw== caps: [mon] allow profile bootstrap-rgw client.rgw.ceph-mon01 key: AQD0zS9jI7e4BRAA7fvC/02D6j2YoGHZwveQCQ== caps: [mon] allow rw caps: [osd] allow rwx mgr.ceph-mgr01 key: AQDi5S1jgpYLHRAAWHJeiwwD86AVg0YzUOPCmQ== caps: [mds] allow * caps: [mon] allow profile mgr caps: [osd] allow * mgr.ceph-mgr02 key: AQDk5S1jY6tkBhAAXPIK4N+bia3W6IoqlJRehw== caps: [mds] allow * caps: [mon] allow profile mgr caps: [osd] allow * mgr.ceph-mon01 key: AQDD9C1ja0vhOBAAnUkp5RcLBkZl8qfb4qXXLw== caps: [mds] allow * caps: [mon] allow profile mgr caps: [osd] allow * [root@ceph-admin ~]#
提示:該命令是列出叢集上所有使用者資訊,即非人為使用者和普通使用者;也可以是ceph auth ls命令來列出所有使用者資訊;
檢索特定使用者命令格式:ceph auth get TYPE.ID或者ceph auth export TYPE.ID
[root@ceph-admin ~]# ceph auth get client.admin exported keyring for client.admin [client.admin] key = AQB94C1jTO8jJhAAY4Zhy40wduyIONnRqxtkEA== caps mds = "allow *" caps mgr = "allow *" caps mon = "allow *" caps osd = "allow *" [root@ceph-admin ~]# ceph auth export client.admin export auth(auid = 18446744073709551615 key=AQB94C1jTO8jJhAAY4Zhy40wduyIONnRqxtkEA== with 4 caps) [client.admin] key = AQB94C1jTO8jJhAAY4Zhy40wduyIONnRqxtkEA== caps mds = "allow *" caps mgr = "allow *" caps mon = "allow *" caps osd = "allow *" [root@ceph-admin ~]#
提示:如果我們需要將上述資訊匯出到檔案,可以使用-o來指定檔案,或者輸出重定向到方式;
[root@ceph-admin ~]# ceph auth get client.admin -o client.admin.keyring exported keyring for client.admin [root@ceph-admin ~]# ls ceph-deploy-ceph.log client.admin.keyring [root@ceph-admin ~]# cat client.admin.keyring [client.admin] key = AQB94C1jTO8jJhAAY4Zhy40wduyIONnRqxtkEA== caps mds = "allow *" caps mgr = "allow *" caps mon = "allow *" caps osd = "allow *" [root@ceph-admin ~]# ceph auth export client.admin > client.admin.cluster.keyring export auth(auid = 18446744073709551615 key=AQB94C1jTO8jJhAAY4Zhy40wduyIONnRqxtkEA== with 4 caps) [root@ceph-admin ~]# ls ceph-deploy-ceph.log client.admin.cluster.keyring client.admin.keyring [root@ceph-admin ~]# cat client.admin.cluster.keyring [client.admin] key = AQB94C1jTO8jJhAAY4Zhy40wduyIONnRqxtkEA== caps mds = "allow *" caps mgr = "allow *" caps mon = "allow *" caps osd = "allow *" [root@ceph-admin ~]#
新增使用者命令格式:auth add <entity> {<caps> [<caps>...]}
[root@ceph-admin ~]# ceph auth add client.testuser mon 'allow r' osd 'allow rw' added key for client.testuser [root@ceph-admin ~]# ceph auth get client.testuser exported keyring for client.testuser [client.testuser] key = AQAoaThjCJLsBhAA8gwl/UQkjjSF+DwB6oB/wg== caps mon = "allow r" caps osd = "allow rw" [root@ceph-admin ~]#
提示:ceph add 是新增使用者的規範方法,它能夠建立使用者、生成金鑰並新增指定的caps;這裡需要注意我指定的使用者是有type.id組成,一般普通使用者都是client型別,後面的ID就是使用者名稱稱;
ceph auth get-or-create:簡便方法,建立使用者並返回金鑰檔案格式的金鑰資訊,或者在使用者存在時返回使用者名稱及金鑰檔案格式的金鑰資訊;
[root@ceph-admin ~]# ceph auth get-or-create client.testuser mon 'allow *' osd 'allow rw pool=rbdpool' Error EINVAL: key for client.testuser exists but cap mon does not match [root@ceph-admin ~]# ceph auth get-or-create client.testuser mon 'allow r' osd 'allow rw' [client.testuser] key = AQAoaThjCJLsBhAA8gwl/UQkjjSF+DwB6oB/wg== [root@ceph-admin ~]# ceph auth get-or-create client.tom mon 'allow *' osd 'allow rw pool=rbdpool' [client.tom] key = AQBcajhj8INfChAAKKFCESxmbHFJqAwiRE4ufg== [root@ceph-admin ~]# ceph auth get client.tom exported keyring for client.tom [client.tom] key = AQBcajhj8INfChAAKKFCESxmbHFJqAwiRE4ufg== caps mon = "allow *" caps osd = "allow rw pool=rbdpool" [root@ceph-admin ~]#
提示:使用ceph auth get-or-create命令新增使用者,如果使用者存在,但授權不匹配,它會提示我們使用者存在,但是許可權不匹配;如果使用者存在,許可權資訊也都匹配,則返回對應使用者的key;如果使用者不存在,則建立對應用並返回使用者的key;
ceph auth get-or-create-key:簡便方法,建立使用者並返回金鑰資訊,或者在使用者存在時返回金鑰資訊;
[root@ceph-admin ~]# ceph auth get-or-create-key client.testuser mon 'allow r' osd 'allow *' Error EINVAL: key for client.testuser exists but cap osd does not match [root@ceph-admin ~]# ceph auth get-or-create-key client.testuser mon 'allow r' osd 'allow rw' AQAoaThjCJLsBhAA8gwl/UQkjjSF+DwB6oB/wg== [root@ceph-admin ~]# ceph auth get-or-create-key client.jerry mon 'allow r' osd 'allow rw' AQDDazhjLbMTIhAADsXyBkPS079vU7dqGs2E+A== [root@ceph-admin ~]# ceph auth get client.jerry exported keyring for client.jerry [client.jerry] key = AQDDazhjLbMTIhAADsXyBkPS079vU7dqGs2E+A== caps mon = "allow r" caps osd = "allow rw" [root@ceph-admin ~]#
提示:該命令和上面的get-or-create類似,都是使用者存在,如果許可權匹配則返回對應使用者的key,如果不匹配則告訴我們使用者存在,但許可權不匹配;如果不存在則建立,並返回對應使用者的key;不同的是返回key的格式不同;get-or-create是返回keyring檔案中的格式;而get-or-create-key則返回key的值,沒有key = ;
注意:典型的使用者至少對 Ceph monitor 具有讀取功能,並對 Ceph OSD 具有讀取和寫入功能;另外,使用者的 OSD 許可權通常應該限制為只能存取特定的儲存池,否則,他將具有存取叢集中所有儲存池的許可權;
列出使用者的金鑰格式 命令:ceph auth print-key TYPE.ID
[root@ceph-admin ~]# ceph auth print-key client.jerry AQDDazhjLbMTIhAADsXyBkPS079vU7dqGs2E+A==[root@ceph-admin ~]#
匯入使用者命令:ceph auth import
[root@ceph-admin ~]# ll total 16 -rw-r--r-- 1 root root 1568 Sep 25 11:40 ceph-deploy-ceph.log -rw-r--r-- 1 root root 151 Oct 2 00:14 client.admin.cluster.keyring -rw-r--r-- 1 root root 151 Oct 2 00:14 client.admin.keyring -rw-r--r-- 1 root root 164 Oct 2 00:43 client.test.keyring [root@ceph-admin ~]# cat client.test.keyring [client.test] key = AQB94C1jTO8jJhAAY4Zhy40wduyIONnRqxtkEA== caps mds = "allow *" caps mgr = "allow *" caps mon = "allow r" caps osd = "allow rw pool=rbdpool" [root@ceph-admin ~]# ceph auth get client.test Error ENOENT: failed to find client.test in keyring [root@ceph-admin ~]# ceph auth import -i client.test.keyring imported keyring [root@ceph-admin ~]# ceph auth get client.test exported keyring for client.test [client.test] key = AQB94C1jTO8jJhAAY4Zhy40wduyIONnRqxtkEA== caps mds = "allow *" caps mgr = "allow *" caps mon = "allow r" caps osd = "allow rw pool=rbdpool" [root@ceph-admin ~]#
提示:從keyring檔案匯入使用者需要用到-i選項來指定對應匯入的keyring檔案;
修改使用者caps命令:ceph auth caps TYPE.ID daemon 'allow [r|w|x|*|...] [pool=pool-name] [namespace=namespace-name]' ...
[root@ceph-admin ~]# ceph auth get client.test exported keyring for client.test [client.test] key = AQB94C1jTO8jJhAAY4Zhy40wduyIONnRqxtkEA== caps mds = "allow *" caps mgr = "allow *" caps mon = "allow r" caps osd = "allow rw pool=rbdpool" [root@ceph-admin ~]# ceph auth caps client.test mds 'allow rw' mgr 'allow r' mon 'allow rw' updated caps for client.test [root@ceph-admin ~]# ceph auth get client.test exported keyring for client.test [client.test] key = AQB94C1jTO8jJhAAY4Zhy40wduyIONnRqxtkEA== caps mds = "allow rw" caps mgr = "allow r" caps mon = "allow rw" [root@ceph-admin ~]# ceph auth caps client.test mds 'allow rw' mgr 'allow r' mon 'allow rw' osd 'allow rw pool=rbdpool' updated caps for client.test [root@ceph-admin ~]# ceph auth get client.test exported keyring for client.test [client.test] key = AQB94C1jTO8jJhAAY4Zhy40wduyIONnRqxtkEA== caps mds = "allow rw" caps mgr = "allow r" caps mon = "allow rw" caps osd = "allow rw pool=rbdpool" [root@ceph-admin ~]#
提示:該命令會覆蓋使用者現有許可權因此建立事先使用ceph auth get TYPE.ID命令檢視使用者的caps;若是為新增caps,則需要先指定現有的caps;若為刪除某些許可權,則對應許可權不指定即可;
刪除使用者命令:ceph auth del TYPE.ID
[root@ceph-admin ~]# ceph auth del client.test updated [root@ceph-admin ~]# ceph auth del client.tom updated [root@ceph-admin ~]# ceph auth del client.jerry updated [root@ceph-admin ~]# ceph auth del client.testuser updated [root@ceph-admin ~]# ceph auth get client.testuser Error ENOENT: failed to find client.testuser in keyring [root@ceph-admin ~]#
Keyring
使用者端存取Ceph叢集時,使用者端會於本地查詢金鑰環, 預設情況下,Ceph會使用以下四個金鑰環名稱預設金鑰環;
• /etc/ceph/cluster-name.user-name.keyring:儲存單個使用者的keyring
• /etc/ceph/cluster.keyring:儲存多個使用者的keyring
• /etc/ceph/keyring
• /etc/ceph/keyring.bin
cluster-name是為叢集名稱,user-name是為使用者標識(TYPE.ID), client.admin使用者的在名為ceph的叢集上的金鑰環檔名為ceph.client.admin.keyring;
管理keyring
建立keyring命令:ceph-authtool --create-keyring /path/to/kerying
[root@ceph-admin ~]# ceph-authtool --create-keyring ./client.abc.keyring creating ./client.abc.keyring [root@ceph-admin ~]# cat ./client.abc.keyring [root@ceph-admin ~]#
提示:建立keyring檔案,裡面沒有任何內容,我們需要用ceph auth add 新增使用者,然後通過ceph auth get或export命令將對應使用者資訊匯入到對應keyring檔案即可;這裡說一下keyring檔案的命名規則,keyring檔案一般應該儲存於/etc/ceph目錄中,以便使用者端能自動查詢;建立包含多個使用者的keyring檔案時,應該使用cluster-name.keyring作為檔名;建立僅包含單個使用者的kerying檔案時,應該使用cluster-name.user-name.keyring作為檔名;這個是規範的keyring命名方式;
將使用者的keyring合併至一個統一的keyring檔案中命令:ceph-authtool /etc/ceph/cluster-name.keyring --import-key /etc/ceph/cluster-name.user-name.keyring
[root@ceph-admin ~]# ll total 16 -rw-r--r-- 1 root root 1568 Sep 25 11:40 ceph-deploy-ceph.log -rw------- 1 root root 0 Oct 2 00:57 client.abc.keyring -rw-r--r-- 1 root root 151 Oct 2 00:14 client.admin.cluster.keyring -rw-r--r-- 1 root root 151 Oct 2 00:14 client.admin.keyring -rw-r--r-- 1 root root 164 Oct 2 00:43 client.test.keyring [root@ceph-admin ~]# cat client.test.keyring [client.test] key = AQB94C1jTO8jJhAAY4Zhy40wduyIONnRqxtkEA== caps mds = "allow *" caps mgr = "allow *" caps mon = "allow r" caps osd = "allow rw pool=rbdpool" [root@ceph-admin ~]# ceph-authtool ./client.test.keyring --import-keyring ./client.admin.keyring importing contents of ./client.admin.keyring into ./client.test.keyring [root@ceph-admin ~]# cat client.test.keyring [client.admin] key = AQB94C1jTO8jJhAAY4Zhy40wduyIONnRqxtkEA== caps mds = "allow *" caps mgr = "allow *" caps mon = "allow *" caps osd = "allow *" [client.test] key = AQB94C1jTO8jJhAAY4Zhy40wduyIONnRqxtkEA== caps mds = "allow *" caps mgr = "allow *" caps mon = "allow r" caps osd = "allow rw pool=rbdpool" [root@ceph-admin ~]#
使用ceph-authtool命令管理使用者
ceph-authtool命令可直接建立使用者、授予caps並建立keyring
命令使用幫助
[root@ceph-admin ~]# ceph-authtool -h usage: ceph-authtool keyringfile [OPTIONS]... where the options are: -l, --list will list all keys and capabilities present in the keyring -p, --print-key will print an encoded key for the specified entityname. This is suitable for the 'mount -o secret=..' argument -C, --create-keyring will create a new keyring, overwriting any existing keyringfile -g, --gen-key will generate a new secret key for the specified entityname --gen-print-key will generate a new secret key without set it to the keyringfile, prints the secret to stdout --import-keyring FILE will import the content of a given keyring into the keyringfile -n NAME, --name NAME specify entityname to operate on -u AUID, --set-uid AUID sets the auid (authenticated user id) for the specified entityname -a BASE64, --add-key BASE64 will add an encoded key to the keyring --cap SUBSYSTEM CAPABILITY will set the capability for given subsystem --caps CAPSFILE will set all of capabilities associated with a given key, for all subsystems --mode MODE will set the desired file mode to the keyring e.g: '0644', defaults to '0600' [root@ceph-admin ~]#
提示:-l或--list表示列出所有使用者資訊;-p表示列印對應使用者的key資訊,-C表示keyring檔案,-g表示給指定使用者生成key;-n用於指定使用者名稱稱;--cap 用於指定許可權資訊;--mode用於指定keyring檔案的許可權資訊,預設是0600,即只有root或對應宿主擁有讀寫許可權;
[root@ceph-admin ~]# ceph-authtool -C client.usera.keyring -n client.usera --gen-key --cap mon 'allow r' --cap osd 'allow rw pool=rbdpool' creating client.usera.keyring [root@ceph-admin ~]# ll total 20 -rw-r--r-- 1 root root 1568 Sep 25 11:40 ceph-deploy-ceph.log -rw------- 1 root root 0 Oct 2 00:57 client.abc.keyring -rw-r--r-- 1 root root 151 Oct 2 00:14 client.admin.cluster.keyring -rw-r--r-- 1 root root 151 Oct 2 00:14 client.admin.keyring -rw-r--r-- 1 root root 315 Oct 2 01:03 client.test.keyring -rw------- 1 root root 121 Oct 2 01:25 client.usera.keyring [root@ceph-admin ~]# ceph auth get client.usera Error ENOENT: failed to find client.usera in keyring [root@ceph-admin ~]# cat client.usera.keyring [client.usera] key = AQAIeDhjTnmLGhAAWgL3GqtJsPwmOD6CPbJO8Q== caps mon = "allow r" caps osd = "allow rw pool=rbdpool" [root@ceph-admin ~]#
提示:使用這種方式新增使用者,對應資訊之存在於keyring檔案中,並沒有存在ceph叢集,我們還需要將對應keyring檔案中的使用者資訊匯入到叢集上;
[root@ceph-admin ~]# ceph auth add client.usera -i client.usera.keyring added key for client.usera [root@ceph-admin ~]# ceph auth get client.usera exported keyring for client.usera [client.usera] key = AQAIeDhjTnmLGhAAWgL3GqtJsPwmOD6CPbJO8Q== caps mon = "allow r" caps osd = "allow rw pool=rbdpool" [root@ceph-admin ~]#
提示:上述命令等同ceph auth import;