You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

将Rego权限策略转换为AWS Cedar策略的技术咨询

问题分析与修正方案

原Rego逻辑是:资源归指定团队所有,团队为不同权限配置了允许的用户列表,仅当请求用户在对应权限的允许列表中,且资源归该团队所有时,才允许访问。下面是转换为Cedar时的问题修正方案:

原尝试的核心问题

  1. 成员存储格式错误:团队实体的permissions中,members存储的是字符串用户名(如"alice"),但Cedar中需要通过实体引用匹配主体,字符串无法与PhotoApp::User类型的主体实体匹配。
  2. 动作引用方式错误:策略中直接用action实体作为字典键,Cedar中需通过action.id获取动作的标识字符串(如"write")来匹配权限字典的键。
  3. 缺少动作实体定义:请求中使用的PhotoApp::Action write未在实体列表中定义,导致策略无法识别动作。

修正后的Cedar实体

[
    {
        "uid": {"type": "PhotoApp::User", "id": "alice"},
        "attrs": {},
        "parents": []
    },
    {
        "uid": {"type": "PhotoApp::User", "id": "bob"},
        "attrs": {},
        "parents": []
    },
    {
        "uid": {"type": "PhotoApp::Owner", "id": "a-team"},
        "attrs": {
            "permissions": {
                "read": {
                    "members": [
                        {"type": "PhotoApp::User", "id": "alice"},
                        {"type": "PhotoApp::User", "id": "bob"}
                    ]
                },
                "write": {
                    "members": [
                        {"type": "PhotoApp::User", "id": "alice"}
                    ]
                }
            }
        },
        "parents": []
    },
    {
        "uid": {"type": "PhotoApp::Resource", "id": "db1"},
        "attrs": {
            "owner": {"type": "PhotoApp::Owner", "id": "a-team"}
        },
        "parents": []
    },
    {
        "uid": {"type": "PhotoApp::Action", "id": "read"},
        "attrs": {},
        "parents": []
    },
    {
        "uid": {"type": "PhotoApp::Action", "id": "write"},
        "attrs": {},
        "parents": []
    }
]

修正后的Cedar策略

permit (
    principal,
    action,
    resource
)
when {
    # 确保资源有所有者,且所有者的权限字典中包含当前动作对应的条目
    exists resource.owner,
    exists resource.owner.permissions[action.id],
    # 检查主体是否在该权限的允许成员列表中
    principal in resource.owner.permissions[action.id].members
};

验证逻辑

  • 允许场景:主体PhotoApp::User alice,动作PhotoApp::Action write,资源PhotoApp::Resource db1 → 策略返回允许(alice在a-team的write权限成员列表中)
  • 拒绝场景1:主体PhotoApp::User bob,动作PhotoApp::Action write,资源PhotoApp::Resource db1 → 策略返回拒绝(bob不在write权限列表中)
  • 允许场景2:主体PhotoApp::User bob,动作PhotoApp::Action read,资源PhotoApp::Resource db1 → 策略返回允许(bob在read权限列表中)

内容的提问来源于stack exchange,提问作者shays10

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.16 17:15:19