策略¶
警告
自 Glance 22.0.0 (Wallaby) 起,JSON 格式的策略文件已被弃用。此 oslopolicy-convert-json-to-yaml 工具将以向后兼容的方式将现有的 JSON 格式策略文件迁移到 YAML。
Glance 的公共 API 调用可以通过策略配置文件限制为特定用户集。本文档详细说明了如何配置策略以及它们适用于哪些内容。
策略由一组规则组成,这些规则由策略“大脑”用于确定授权租户是否可以执行特定操作。
构建策略配置文件¶
策略配置文件是一个简单的 JSON 对象,其中包含一组规则。每个顶级键是规则的名称。每个规则都是一个字符串,描述了 Glance API 中可以执行的操作。
可以对其强制执行规则的操作包括
get_images- 列出可用的镜像实体GET /v1/imagesGET /v1/images/detailGET /v2/images
get_image- 获取特定的镜像实体HEAD /v1/images/<IMAGE_ID>GET /v1/images/<IMAGE_ID>GET /v2/images/<IMAGE_ID>
download_image- 下载二进制镜像数据GET /v1/images/<IMAGE_ID>GET /v2/images/<IMAGE_ID>/file
upload_image- 上传二进制镜像数据POST /v1/imagesPUT /v1/images/<IMAGE_ID>PUT /v2/images/<IMAGE_ID>/file
copy_from- 从 URL 复制二进制镜像数据POST /v1/imagesPUT /v1/images/<IMAGE_ID>
add_image- 创建镜像实体POST /v1/imagesPOST /v2/images
modify_image- 更新镜像实体PUT /v1/images/<IMAGE_ID>PUT /v2/images/<IMAGE_ID>
publicize_image- 创建或更新公共镜像POST /v1/images具有属性is_public=truePUT /v1/images/<IMAGE_ID>具有属性is_public=truePOST /v2/images具有属性visibility=publicPUT /v2/images/<IMAGE_ID>具有属性visibility=public
communitize_image- 创建或更新社区镜像POST /v2/images具有属性visibility=communityPUT /v2/images/<IMAGE_ID>具有属性visibility=community
delete_image- 删除镜像实体和关联的二进制数据DELETE /v1/images/<IMAGE_ID>DELETE /v2/images/<IMAGE_ID>
add_member- 向镜像的成员仓库添加成员资格POST /v2/images/<IMAGE_ID>/members
get_members- 列出镜像的成员GET /v1/images/<IMAGE_ID>/membersGET /v2/images/<IMAGE_ID>/members
delete_member- 删除镜像的成员资格DELETE /v1/images/<IMAGE_ID>/members/<MEMBER_ID>DELETE /v2/images/<IMAGE_ID>/members/<MEMBER_ID>
modify_member- 创建或更新镜像的成员资格PUT /v1/images/<IMAGE_ID>/members/<MEMBER_ID>PUT /v1/images/<IMAGE_ID>/membersPOST /v2/images/<IMAGE_ID>/membersPUT /v2/images/<IMAGE_ID>/members/<MEMBER_ID>
manage_image_cache- 允许使用镜像缓存管理 API
要将操作限制为特定的角色或角色,您可以像这样列出角色
{
"delete_image": ["role:admin", "role:superuser"]
}
以上将添加一个规则,仅允许具有“admin”或“superuser”角色的用户删除镜像。
编写规则¶
角色检查将继续像以前一样工作。如果检查中定义的角色是用户拥有的角色,则该检查将通过,例如 role:admin。
要编写通用规则,您需要知道 Glance 提供三个可以在规则左侧冒号 (:) 中使用的值。这些值是当前用户的凭据,形式如下
role
tenant
owner
冒号左侧还可以包含 Python 可以理解的任何值,例如
TrueFalse"一个字符串"&c。
使用 tenant 和 owner 仅适用于镜像。考虑以下规则
tenant:%(owner)s
这将使用当前经过身份验证用户的 tenant 值。它还将使用它正在操作的镜像的 owner。如果这两个值相等,则检查将通过。镜像上的所有属性(以及额外的镜像属性)都可用于在冒号右侧使用。最有用的如下
ownerprotectedis_public
因此,您可以构建如下规则集
{
"not_protected": "False:%(protected)s",
"is_owner": "tenant:%(owner)s",
"is_owner_or_admin": "rule:is_owner or role:admin",
"not_protected_and_is_owner": "rule:not_protected and rule:is_owner",
"get_image": "rule:is_owner_or_admin",
"delete_image": "rule:not_protected_and_is_owner",
"add_member": "rule:not_protected_and_is_owner"
}
示例¶
示例 1.(默认策略配置)
{
"default": ""
}
请注意,空的 JSON 列表意味着 Glance API 的所有方法都可以被任何人调用。
示例 2. 禁止非管理员修改调用
{
"default": "",
"add_image": "role:admin",
"modify_image": "role:admin",
"delete_image": "role:admin"
}