拓冰建站拓冰建站
首页 / 资讯中心 / 正文

Ceph Object Gateway IAM API 完全指南:账号、用户、角色与策略的 REST 管理

存储分布式文件系统对象存储后端高可用【免费下载链接】cephCeph is a distributed object, block, and file storage platform项目地址https://gitcode.com/gh_mirrors/ce/ceph点击查看免费下载Ceph Object GatewayRADOS Gateway在 Squid 版本引入了对 Amazon IAM API 子集的支持允许通过 REST 接口管理账号Account、用户User、组Group、角色Role以及关联的权限策略Policy。本文以官方文档 doc/radosgw/iam.rst 为主体结合 src/rgw/rgw_rest_iam.cc 等源码实现与 s3-tests 测试用例系统梳理 IAM API 的授权模型、支持的动作清单、托管策略并给出基于 AWS CLI 的端到端实操示例。读完本文你将掌握如何为 RGW 对象存储搭建与 AWS IAM 兼容的身份与访问管理体系。IAM API 概览Ceph Object Gateway 的 IAM API 是 Amazon IAM API 的一个子集专门用于通过 RESTful 方式管理账号下的用户、角色及关联策略。它与 S3 数据面 API 共享同一个 HTTP 端点即 radosgw s3 所描述的服务端点也就是说你不需要为身份管理单独开启一个新的端口或服务直接用访问 S3 的同一套端点即可发起 IAM 请求。从源码结构看IAM 请求的入口由RGWRESTMgr_IAM与RGWHandler_REST_IAM承载见 src/rgw/rgw_rest_iam.h。请求通过 URL 查询参数中的Action字段进行分发RGWHandler_REST_IAM::op_post()在收到带Action参数的请求后从op_generators哈希表中查找对应的操作处理器并构造RGWOp实例见 src/rgw/rgw_rest_iam.cc。RGWHandler_REST_IAM::init()中会设置s-dialect iam与s-prot_flags RGW_REST_IAM用于在认证与日志层面区分 IAM 与普通 S3 请求。典型 IAM 请求的形态与 AWS 一致例如创建一个角色POST /?ActionCreateRoleRoleNameS3AccessPath/application_abc/component_xyz/AssumeRolePolicyDocument...授权模型Account Root User默认情况下只有**账号根用户Account Root User**被授权使用 IAM API并且只能看到自己账号Account下的资源。这意味着 IAM 的管理能力天然被限定在账号边界内不同账号之间的用户、角色、策略彼此隔离。账号根用户可以通过策略Policy把这些权限委派给账号内的其他用户或角色从而形成「根用户集中管控 子用户按需授权」的典型管理形态账号与账号根用户由管理员创建创建命令详见 doc/radosgw/account.rstradosgw-admin user create --uid{userid} --display-name{name} --account-id{accountid} --account-root --gen-secret --gen-access-key账号根用户对其账号下的所有资源拥有默认权限其凭据Access Key / Secret Key可用于解锁 IAM API 与账号内管理操作。从源码实现看用户是否具有账号根用户身份会影响其 ARN 的生成方式src/rgw/rgw_rest_iam.cc 中的iam_user_arn()对TYPE_ROOT类型的用户生成arn:aws:iam::{account_id}:root形式的 ARN而对普通用户则生成arn:aws:iam::{account_id}:user{path}{name}。这印证了「根用户是账号的管理者」这一语义在实现层面的落地。使用 AWS CLI 配置账号根用户 Profile 的步骤如下完整示例见 doc/radosgw/account.rst$ aws --profile rgwroot configure set endpoint_url http://localhost:8000 $ aws --profile rgwroot configure AWS Access Key ID [None]: {root access key} AWS Secret Access Key [None]: {root secret key} Default region name [None]: default Default output format [None]:随后即可用该 Profile 调用aws iam系列命令完成用户、密钥、策略的创建与绑定。功能支持当前可用的 IAM 动作以下表格完整列出 Ceph Object Gateway IAM API 当前支持的动作即 doc/radosgw/iam.rst 中声明的功能范围。这些动作与 src/rgw/rgw_rest_iam.cc 中op_generators表的注册项一一对应可作为判断「该动作是否可用」的权威依据。用户UsersAction说明CreateUser在账号下创建 IAM 用户GetUser获取指定用户的详细信息UpdateUser更新用户信息如 Path、显示名等DeleteUser删除用户ListUsers列出账号下的用户CreateAccessKey为用户创建访问密钥Access KeyUpdateAccessKey更新访问密钥状态Active/InactiveDeleteAccessKey删除访问密钥ListAccessKeys列出用户的访问密钥PutUserPolicy为用户附加内联策略GetUserPolicy获取用户内联策略DeleteUserPolicy删除用户内联策略ListUserPolicies列出用户内联策略AttachUserPolicies为用户附加托管策略Managed PolicyDetachUserPolicy解除用户的托管策略ListAttachedUserPolicies列出用户已附加的托管策略用户操作的工厂函数声明在 src/rgw/rgw_rest_iam_user.h 中如make_iam_create_user_op、make_iam_create_access_key_op等实际实现位于 src/rgw/rgw_rest_iam_user.cc。组GroupsAction说明CreateGroup创建组GetGroup获取组信息UpdateGroup更新组信息DeleteGroup删除组ListGroups列出组AddUserToGroup将用户加入组RemoveUserFromGroup将用户移出组ListGroupsForUser列出用户所属的组PutGroupPolicy为组附加内联策略GetGroupPolicy获取组内联策略DeleteGroupPolicy删除组内联策略ListGroupPolicies列出组内联策略AttachGroupPolicies为组附加托管策略DetachGroupPolicy解除组的托管策略ListAttachedGroupPolicies列出组已附加的托管策略组操作由 src/rgw/rgw_rest_iam_group.h 与 src/rgw/rgw_rest_iam_group.cc 实现。角色RolesAction说明CreateRole创建角色GetRole获取角色信息UpdateRole更新角色UpdateAssumeRolePolicy更新角色的信任策略Assume Role PolicyDeleteRole删除角色ListRoles列出角色TagRole为角色打标签UntagRole移除角色标签ListRoleTags列出角色标签PutRolePolicy为角色附加内联策略GetRolePolicy获取角色内联策略DeleteRolePolicy删除角色内联策略ListRolePolicies列出角色内联策略AttachRolePolicies为角色附加托管策略DetachRolePolicy解除角色的托管策略ListAttachedRolePolicies列出角色已附加的托管策略角色的创建、信任策略、标签等细节在 doc/radosgw/role.rst 中有专门阐述角色可被任何需要它的身份所扮演assume扮演成功后获得一组临时凭据与 STS 服务联动典型动作如sts:AssumeRole、sts:AssumeRoleWithWebIdentity。例如通过radosgw-admin创建带信任策略的角色radosgw-admin role create --role-nameS3Access1 --path/application_abc/component_xyz/ \ --assume-role-policy-doc\{\Version\:\2012-10-17\,\Statement\:\[\{\Effect\:\Allow\,\Principal\:\{\AWS\:\[\arn:aws:iam:::user/TESTER\\]\},\Action\:\[\sts:AssumeRole\\]\}\]\}OpenID Connect ProviderAction说明CreateOpenIDConnectProvider创建 OIDC 身份提供商GetOpenIDConnectProvider获取 OIDC 提供商信息DeleteOpenIDConnectProvider删除 OIDC 提供商ListOpenIDConnectProviders列出 OIDC 提供商OIDC Provider 主要用于 Web Identity Federation角色信任策略可以声明Principal为某个oidc-provider配合sts:AssumeRoleWithWebIdentity实现基于 OIDC 令牌的角色扮演参见 doc/radosgw/role.rst 中的示例。相关实现位于 src/rgw/rgw_rest_oidc_provider.cc。账号AccountsAction说明GetAccountSummary获取账号资源使用摘要如用户数、组数、角色数等配额信息托管策略Managed Policies以下托管策略可用于AttachGroupPolicy、AttachRolePolicy与AttachUserPolicy三个动作便于为身份直接赋予常用权限而不必手写策略文档策略名ARN默认版本IAMFullAccessarn:aws:iam::aws:policy/IAMFullAccessv2IAMReadOnlyAccessarn:aws:iam::aws:policy/IAMReadOnlyAccessv4AmazonSNSFullAccessarn:aws:iam::aws:policy/AmazonSNSFullAccessv1AmazonSNSReadOnlyAccessarn:aws:iam::aws:policy/AmazonSNSReadOnlyAccessv1AmazonS3FullAccessarn:aws:iam::aws:policy/AmazonS3FullAccessv2AmazonS3ReadOnlyAccessarn:aws:iam::aws:policy/AmazonS3ReadOnlyAccessv3这些托管策略的真实内容内嵌在源码 src/rgw/rgw_iam_managed_policy.cc 中。例如IAMFullAccess的策略文档版本 v2为{ Version: 2012-10-17, Statement: [ { Effect: Allow, Action: [ iam:*, organizations:DescribeAccount, organizations:DescribeOrganization, organizations:DescribeOrganizationalUnit, organizations:DescribePolicy, organizations:ListChildren, organizations:ListParents, organizations:ListPoliciesForTarget, organizations:ListRoots, organizations:ListPolicies, organizations:ListTargetsForPolicy ], Resource: * } ] }rgw_iam_managed_policy.cc中的匹配逻辑src/rgw/rgw_iam_managed_policy.cc通过arn:aws:iam::aws:policy/...精确比对 ARN 来返回对应策略文档因此附加策略时必须使用上表中的完整 ARN。参数校验规则源码级IAM 请求的参数并非无约束。从 src/rgw/rgw_rest_iam.cc 的校验函数可以看出 Ceph 对 IAM 标识符施加的限制这些限制与 AWS 保持一致策略名PolicyName非空、最长 128 字符仅允许[A-Za-z0-9:,.-]字符validate_iam_policy_name。策略 ARNPolicyArn长度须在 202048 字符之间validate_iam_policy_arn。用户名UserName非空、最长 64 字符仅允许[\w,.-]字符validate_iam_user_name。角色名RoleName非空、不超过RGWRole::MAX_ROLE_NAME_LEN字符集同用户名validate_iam_role_name。组名GroupName非空、最长 128 字符字符集同上validate_iam_group_name。路径Path最长 512 字符必须匹配(/[!-~]/)|(/)即要么是单个/要么是以/开头和结尾的分层路径validate_iam_path。一旦违反上述规则RGW 会返回对应的Missing required element ...、... too long、... contains invalid characters等错误消息。s3-tests 中也包含对参数边界的验证用例例如 src/test/rgw/s3-tests/s3tests/functional/test_iam.py 的test_put_user_policy_parameter_limit会断言超长策略名与超大策略文档返回 HTTP 400。多站点Multisite下的请求转发在 multisite多站点/多 zonegroup部署中IAM 元数据请求必须落在元数据主 zonemeta master zone上才能被正确持久化。为此 RGW 提供了forward_iam_request_to_master()机制见 src/rgw/rgw_rest_iam.cc非 multisite 部署period为空或当前 zone 本身就是 meta master 时直接本地处理不转发否则从当前 period 的period_map中查找 master zonegroup 与 master zone使用请求用户的访问密钥构造RGWRESTConn将 IAM 请求转发到 master zone 的端点若 master 返回 4xx/5xxRGW 会解析响应体中的ErrorResponseparse_aws_error_response提取Code与Message回传给客户端。这意味着在 multisite 架构中任意 zone 的 IAM 客户端请求都会被透明地路由到 master zone保证账号、用户、角色、策略等元数据的一致性。端到端实操用 AWS CLI 管理用户并授权 S3 访问以下示例演示完整的「创建 IAM 用户 → 生成访问密钥 → 附加 S3 托管策略 → 用新用户操作 S3」流程出自 doc/radosgw/account.rst 的 Account Root Example命令可直接复制运行。使用账号根用户 Profile 创建 IAM 用户Alice$ aws --profile rgwroot iam create-user --user-name Alice { User: { Path: /, UserName: Alice, UserId: b580aa8e-14c7-4b6a-9dac-a30c640244b6, Arn: arn:aws:iam::RGW63136524507535818:user/Alice, CreateDate: 2024-02-07T00:15:45.16278600:00 } }为用户创建访问密钥并附加AmazonS3FullAccess托管策略$ aws --profile rgwroot iam create-access-key --user-name Alice { AccessKey: { UserName: Alice, AccessKeyId: JBNLYD5BDNRVV64J02E8, Status: Active, SecretAccessKey: SnHoE700kdNuT22K8Bhy2iL3DwZU0sUSDI1gUXHr, CreateDate: 2024-02-07T00:16:34.67931600:00 } } $ aws --profile rgwroot iam attach-user-policy --user-name Alice \ --policy-arn arn:aws:iam::aws:policy/AmazonS3FullAccess配置 S3 用户的 CLI Profile$ aws --profile rgws3 configure set endpoint_url http://localhost:8000 $ aws --profile rgws3 configure AWS Access Key ID [None]: JBNLYD5BDNRVV64J02E8 AWS Secret Access Key [None]: SnHoE700kdNuT22K8Bhy2iL3DwZU0sUSDI1gUXHr Default region name [None]: default Default output format [None]:用 S3 用户 Profile 创建存储桶$ aws --profile rgws3 s3 mb s3://testbucket make_bucket: testbucket至此Alice用户已具备通过 S3 API 操作自己账号下存储桶的权限而其权限边界完全由账号根用户通过 IAM 策略定义。测试与验证Ceph 为 IAM API 提供了成体系的 s3-tests 覆盖代码位于 src/test/rgw/s3-tests/s3tests/functional/test_iam.py3000 余行涵盖用户、组、角色、OIDC Provider 的增删改查内联策略put/get/delete/list_user_policy等与托管策略attach/detach/list_attached_*_policy的完整生命周期错误路径验证如对不存在的用户执行put_user_policy应返回 404test_put_user_policy_invalid_user参数边界超长策略名/策略文档应返回 400清理工具函数见 src/test/rgw/s3-tests/s3tests/functional/iam.py如nuke_user、nuke_users在用例间删除密钥、内联策略、附加策略与用户本身。这些测试通过 botocore 客户端get_iam_root_client、get_iam_client等直接以标准 AWS SDK 方式访问 RGW 的 IAM 端点验证了「RGW IAM API 与 AWS 客户端生态兼容」这一事实。运行时可用pytest按标记如--user_policy挑选对应用例执行。小结Ceph Object Gateway IAM API 为对象存储集群补齐了与 AWS 兼容的身份与访问管理能力以账号根用户为管理起点通过用户、组、角色三类身份主体叠加内联策略与六种内置托管策略实现了细粒度的权限委派与控制同时借助 OIDC Provider 与 STS 联动为 Web 身份联合与临时凭据场景提供了通路。无论是单站点还是 multisite 部署该 API 都与 S3 共享同一端点、遵循同样的参数约束并有成熟的 s3-tests 保障兼容性。对需要「多云兼容」或「从 AWS 迁移」的存储使用者而言这套 IAM 接口是通往统一身份模型的关键路径。赞分享存储分布式文件系统对象存储后端高可用【免费下载链接】cephCeph is a distributed object, block, and file storage platform项目地址https://gitcode.com/gh_mirrors/ce/ceph点击查看免费下载相关推荐如何用 tiny11builder 制作精简版 Windows 11 镜像如何用 tiny11builder 制作精简版 Windows 11 镜像 tiny11builder 是一组 PowerShell 脚本用于从官方 Wind存储分布式文件系统对象存储后端高可用eksctl权限管理终极指南IAM角色、服务账户和访问控制完全解析eksctl权限管理终极指南IAM角色、服务账户和访问控制完全解析 在AWS EKS集群管理中 eksctl权限管理 是确保集群安全的关键环节。eksctl云原生容器编排DevOpsMLflow Authentication REST API 完整指南用户、权限与角色管理实战解析MLflow Authentication REST API 完整指南用户、权限与角色管理实战解析 本文基于 MLflow 官方文档 docs/api_refMLOpsLLMOps人工智能大模型模型评测LLM 网关可观测性上一篇如何快速使用Python音乐下载器新手完整指南下一篇Angular-Meteor 开源项目入门指南创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
分享:

看完干货,该让你的企业上线了

免费需求沟通 · 48 小时内出具建站方案 · 河南本地可上门