
新鈦雲服已累計為您分享828篇技術乾貨


在本文中,我們將探討如何透過引入 IAM 賬戶來提升 Ceph 的多租戶功能。Ceph 是一個開源的分散式儲存系統,廣泛用於大規模資料儲存,提供高效能和高可靠性。隨著多租戶需求的增加,在 Ceph Squid 版本中,Ceph 透過 IAM 賬戶的引入,進一步增強了其在多租戶環境中的管理。
Ceph 透過 IAM 賬戶的引入,提供了更精細的訪問控制和資源管理。管理員可以為每個租戶建立獨立的 IAM 賬戶,並根據需要分配相應的許可權。這種機制確保了資源的隔離,避免了租戶之間的衝突和安全風險。
IAM API 與 AWS S3 完全相容,並透過物件閘道器 API 端點提供。這樣,IAM 帳戶管理員(根帳戶)不需要訪問 Ceph 內部 radosgw-cli 或 adminOPS API 的許可權,從而在保持安全性的同時增強訪問能力。
隨著 IAM 賬戶的引入,我們新增了一個使用者角色,代表租戶管理員,即 IAM 根賬戶使用者。
-
Ceph 物件儲存管理員:負責系統範圍的管理和建立 IAM 賬戶。
-
IAM 根賬戶使用者:賬戶管理員。管理特定租戶/IAM 賬戶內的資源,使用透過 RGW 端點提供的 IAM API。
-
S3 終端使用者:在 root 賬戶使用者授予的許可權範圍內進行操作。

前提條件:Ceph Squid 或更高版本,並執行 RGW/物件儲存服務。
下面提供了一個 RGW 配置的案例檔案,用於為 RGW 設定 RGW 服務和 Ingres 服務(負載均衡)。
# cat << EOF > /root/rgw-ha.spec
---
service_type: ingress
service_id: rgw.rgwsrv
service_name: ingress.rgw.rgwsrv
placement:
count: 2
hosts:
ceph-node-02.cephlab.com
ceph-node-03.cephlab.com
spec:
backend_service: rgw.rgwsrv
first_virtual_router_id: 50
frontend_port: 80
monitor_port: 1497
virtual_ip: 192.168.122.100
---
service_type: rgw
service_id: rgwsrv
service_name: rgw.rgwsrv
placement:
count: 3
hosts:
ceph-node-03.cephlab.com
ceph-node-00.cephlab.com
ceph-node-01.cephlab.com
spec:
rgw_frontend_port: 8080
rgw_realm: realm1
rgw_zone: zone1
rgw_zonegroup: zonegroup1
EOF
# ceph orch apply -i /root/rgw-ha.spec
此處使用了
192.168.122.100
作為訪問 IP ,該IP解析的域名為s3.zone1.cephlab.com
。下面將逐步完成配置 IAM 賬戶、建立使用者和應用許可權的步驟。
建立 IAM 賬戶
我們將會使用
radosgw-admin
命令列工具來建立一個 IAM 賬戶,用於分析 Web 應用程式;當然也可以使用 AdminOPS API。在這個案例中,我們首先建立 IAM 賬戶,然後定義這個特定 IAM 賬戶可以從全域性 RGW/物件儲存系統中訪問的資源。
# radosgw-admin account create --account-name=analytic_app
該命令建立一個名為`analytic_app`的賬戶。該賬戶使用預設配額和限制進行初始化,之後可能會進行調整。使用 IAM 賬戶時,會建立一個 RGW 賬戶 ID,當我們需要引用它時,它將成為主體 ARN 的一部分,
例如:arn:aws:iam::RGW00889737169837717:user/name。
輸出:
{
"id": "RGW00889737169837717",
"tenant": "analytics",
"name": "analytic_app",
"max_users": 1000,
...
}
修改 IAM 賬戶限制
作為 RGW 管理員,在此示例中,我們調整賬戶的最大使用者數:
# radosgw-admin account modify --max-users 10 --account-name=analytic_app
這可確保 IAM 賬戶最多可以建立十個使用者。根據我們需求,還可以管理組、金鑰、策略、儲存桶等的最大數量。
設定 IAM 賬戶配額
作為建立 IAM 賬戶的一部分,我們可以啟用並定義賬戶配額來控制資源使用。在本例中,我們將賬戶的最大儲存使用量配置為 20GB,我們還可以配置與每個儲存桶的物件計數相關的其他配額:
set --quota-scope=account --account-name=analytic_app --max-size=20G radosgw-admin quota
enable --quota-scope=account --account-id=RGW00889737169837717 radosgw-admin quota
為新 IAM 賬戶建立賬戶根使用者
每個 IAM 賬戶均由 root 使用者管理,該使用者對賬戶內的所有資源擁有預設許可權。與普通使用者和角色一樣,帳戶和帳戶 root 使用者必須由管理員使用 radosgw-admin 或 Admin Ops API 建立。
要為analytic_app帳戶建立帳戶根使用者,執行以下命令:
# radosgw-admin user create --uid=root_analytics_web --display-name=root_analytics_web --account-id=RGW00889737169837717 --account-root --gen-secret --gen-access-key
輸出示例:
{
"user_id": "root_analytics_web",
"access_key": "1EHAKZAXKPV6LU65QS2R",
"secret_key": "AgXK1BqPOP25pt0HvERDts2yZtFNfF4Mm8mCnoJX",
...
}
根賬戶使用者現在已準備好在 IAM 賬戶內建立和管理使用者、組、角色和許可權。這些資源可以透過 RGW 提供的 IAM API 進行管理和管理。此時,RGW 管理員可以將 IAM 帳戶的根使用者的憑證提供給負責該帳戶的人員。該人員可以使用 RGW 提供的 IAM API 執行與其賬戶相關的所有管理操作,這完全由 RGW 管理員操作。
以下是 IAM 根賬戶無需 RGW 管理員許可權即可執行的一些操作:
-
建立、修改和刪除使用者
-
管理賬戶使用者訪問和ak,sk金鑰
-
管理 IAM 策略
-
管理 IAM 使用者策略
-
管理 IAM 組
-
建立、修改和刪除 OIDC providers
-
建立、修改和刪除 Notification Topics
在 IAM 賬戶中建立新的 IAM 使用者
現在,我們將使用上一步中生成的 IAM 根賬戶的訪問金鑰來配置 AWS CLI。預設情況下,IAM API 在 Ceph 物件閘道器 (RGW) 端點上可用。在此示例中,
我們將s3.zone1.cephlab.com作為訪問域名,提供對 API 的訪問。
# dnf install awscli -y
# aws configure
AWS Access Key ID [****************dmin]: 1EHAKZAXKPV6LU65QS2R
AWS Secret Access Key [****************dmin]: AgXK1BqPOP25pt0HvERDts2yZtFNfF4Mm8mCnoJX
Default region name [multizg]: zonegroup1
Default output format [json]: json
# aws configure set endpoint_url http://s3.zone1.cephlab.com
將analytics_frontend作為新的 IAM 使用者新增到分析 IAM 賬戶:
# aws iam create-user --user-name analytics_frontend
為新使用者分配訪問的ak與sk金鑰:
# aws iam create-access-key --user-name analytics_frontend
此時使用者無法訪問S3資源。下一步,我們將使使用者能夠訪問資源。以下是嘗試以analytics_frontend使用者身份訪問 S3 名稱空間而不附加策略的示例:
# aws --profile analytics_backend s3 ls
argument of type 'NoneType'isnot iterable
# aws --profile analytics_backend s3 ls s3://staticfront/
argument of type 'NoneType'isnot iterable
有多種方法來授予新 IAM 使用者訪問賬戶中可用的各種資源的許可權,例如 IAM、S3 和 SNS 資源:
-
附加預定義的託管策略;託管 IAM 策略可以附加到多個 IAM 實體(使用者、組、角色)並且可以在多個AWS賬戶中重複使用。
-
建立自定義內聯使用者或組策略(使使用者成為附加策略的組的一部分)
-
承擔現有的 IAM 角色以獲取授予該角色的許可權

示例 1. 將託管策略附加到新 IAM 使用者
在第一個示例中,我們將使用託管策略
policy/AmazonS3FullAccess
來允許analytics_frontend
使用者完全訪問 IAM 賬戶 S3 資源:# aws iam attach-user-policy --user-name analytics_frontend --policy-arn arn:aws:iam::aws:policy/AmazonS3FullAccess
附加託管策略後,我們可以建立 IAM 賬戶的 S3 資源,例如:
make_bucket: staticfront
示例 2. 將託管策略附加到組並將 IAM 使用者新增到該組
首先建立一個 IAM 組來管理需要類似角色的使用者的許可權。在這種情況下,我們正在為前端監控團隊建立一個組。
# aws iam create-group --group-name frontend-monitoring
將策略附加到組:在本示例中,我們將向組附加 S3 只讀訪問策略,以便所有使用者繼承許可權並可以以只讀模式訪問 S3 資源。不允許對 S3 資料集進行修改。
# aws iam attach-group-policy --group-name frontend-monitoring --policy-arn arn:aws:iam::aws:policy/AmazonS3ReadOnlyAccess
檢查策略是否已成功附加到組:
# aws iam list-attached-group-policies --group-name frontend-monitoring
{
"AttachedPolicies": [
{
"PolicyName": "AmazonS3ReadOnlyAccess",
"PolicyArn": "arn:aws:iam::aws:policy/AmazonS3ReadOnlyAccess"
}
]
}
使用其金鑰建立將成為組成員的單獨 IAM 使用者。
# aws iam create-user --user-name mon_user1
# aws iam create-user --user-name mon_user2
# aws iam create-access-key --user-name mon_user1
# aws iam create-access-key --user-name mon_user2
將上一步中建立的使用者新增到`frontend-monitoring`組,以便他們繼承許可權。
# aws iam get-group --group-name frontend-monitoring
{
"Users": [
{
"Path": "/",
"UserName": "mon_user1",
"UserId": "fe09d373-08e8-4b61-bffa-6f65eaf11e56",
"Arn": "arn:aws:iam::RGW60952341557974488:user/mon_user1"
},
{
"Path": "/",
"UserName": "mon_user2",
"UserId": "29c57263-1293-4bdf-90e4-a784859f12ef",
"Arn": "arn:aws:iam::RGW60952341557974488:user/mon_user2"
}
],
"Group": {
"Path": "/",
"GroupName": "frontend-monitoring",
"GroupId": "a453d5af-4e25-401c-be76-b4075419cc94",
"Arn": "arn:aws:iam::RGW60952341557974488:group/frontend-monitoring"
}
}
確認兩個使用者都是該組的一部分:
# aws iam create-user --user-name static_ro
# aws iam create-access-key --user-name static_ro
示例 3. 建立自定義內聯策略並將其附加到特定使用者
此示例演示了建立內聯策略並將其附加到 IAM 中的特定使用者。內聯策略定義單個使用者的許可權並直接嵌入到他們的身份中。雖然此示例重點介紹
PutUserPolicy
操作,但如果您需要管理這些實體的許可權,則相同的方法也適用於組 (PutGroupPolicy) 和角色 (PutRolePolicy)。我們首先建立一個將被分配自定義內聯策略的使用者。
# aws iam create-user --user-name static_ro
# aws iam create-access-key --user-name static_ro
我們建立一個包含策略文件的 JSON 檔案來定義自定義內聯策略。此策略允許使用者對特定 S3 儲存桶及其物件執行只讀操作。
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"s3:GetObject",
"s3:ListBucket",
"s3:ListBucketMultipartUploads"
],
"Resource": [
"arn:aws:s3:::staticfront/*",
"arn:aws:s3:::staticfront"
]
}
]
}
EOF
策略欄位說明:
-
Effect:允許指定該策略授予許可權。
-
Action:包括 s3:GetObject、s3:ListBucket 和 s3:ListBucketMultipartUploads,允許使用者讀取資料並列出 S3 儲存桶中的物件。
-
Resource:指定 S3 儲存桶 (analytics:staticfront) 及其物件。
使用 put-user-policy 命令將策略附加到使用者。
# aws iam put-user-policy --user-name static_ro --policy-name analytics-static-ro --policy-document file://analytics_policy_web_ro.json
列出附加到使用者的內聯策略以確認策略已成功應用。
# aws iam list-user-policies --user-name static_ro
{
"PolicyNames": [
"analytics-static-ro"
]
}
在Ceph Squid 版本,IAM賬戶的引入將極大地提升Ceph在多租戶環境中的表現。未來,社群計劃進一步最佳化IAM賬戶的功能,提供更多的自定義選項和自動化工具,以滿足不同使用者的需求。
透過引入IAM賬戶,Ceph在多租戶環境中的靈活性和安全性得到了顯著提升。我們期待這一新功能能夠為使用者帶來更好的體驗,並幫助使用者在複雜的多租戶環境中更高效地管理儲存資源。
如有相關問題,請在文章後面給小編留言,小編安排作者第一時間和您聯絡,為您答疑解惑。
推薦閱讀


推薦影片