

# 了解 Cedar 的政策
<a name="policy-understanding-cedar"></a>

中的策略 AgentCore 使用 Cedar 策略来控制对 AgentCore 网关工具的访问权限。本节介绍了 Cedar 的策略结构、评估语义和关键概念。

**Topics**
+ [策略示例](#policy-example)
+ [策略结构](#policy-structure)
+ [政策影响](#policy-effects)
+ [默认拒绝](#policy-default-deny)
+ [授权评估](#policy-authorization-evaluation)
+ [政策独立性](#policy-independence)
+ [策略评估算法](#policy-evaluation-algorithm)

## 策略示例
<a name="policy-example"></a>

考虑使用具有以下要求的退款处理工具：
+ 只有用户 “John” 可以处理退款
+ 退款上限为 500 美元或以下

强制执行这些要求的 Cedar 政策：

```
permit(
  principal is AgentCore::OAuthUser,
  action == AgentCore::Action::"RefundTool___process_refund",
  resource == AgentCore::Gateway::"arn:aws:bedrock-agentcore:your-region:your-account-id:gateway/refund-gateway"
)
when {
  principal.hasTag("username") &&
  principal.getTag("username") == "John" &&
  context.input.amount < 500
};
```

只有当用户是 “John” 且退款金额低于 500 美元时，此政策才允许处理退款。

## 策略结构
<a name="policy-structure"></a>

Cedar 政策由三个主要部分组成：

1.  **效果**-决定是允许还是拒绝访问（`permit`或`forbid`）

1.  **范围**-指定策略适用的委托人、操作和资源

1.  **条件**-定义必须满足（`when`或`unless`）的其他逻辑，并且可以引用工具参数（通过上下文）和 OAuth 令牌（通过标签）

## 政策影响
<a name="policy-effects"></a>

Cedar 策略使用两种效果来控制访问权限：
+  `permit`-允许操作继续
+  `forbid`-否认该操作

## 默认拒绝
<a name="policy-default-deny"></a>

默认情况下，所有操作均被拒绝。如果没有任何策略与请求相匹配，Cedar 将返回 “拒绝”。您必须明确写出允许操作的许可策略。

## 授权评估
<a name="policy-authorization-evaluation"></a>

Cedar 使用了禁止超越许可证的评估模型：

1. Cedar 会评估适用于该请求的所有政策

1. 如果有任何禁令政策匹配，则结果为 “拒绝”

1. 如果至少有一个许可策略匹配且没有禁止策略匹配，则结果为 ALLOW

1. 如果没有匹配的策略，则结果为拒绝（默认拒绝）

## 政策独立性
<a name="policy-independence"></a>

Cedar 的每份政策都是独立评估的。政策的评估仅取决于：
+ 范围（委托人、行动、资源）
+ 上下文和标签

策略不引用或依赖其他政策。

## 策略评估算法
<a name="policy-evaluation-algorithm"></a>

评估请求时，策略引擎使用以下算法确定授权决策：

1. 如果有任何`forbid`策略与请求匹配，则决定为 “拒绝”。

1. 如果没有`forbid`策略与请求匹配，并且至少有一个`permit`策略匹配，则决定为 “允许”。

1. 如果两个`permit`策略`forbid`都与请求不匹配，则决定为拒绝。

此评估模型强制**使用默认的拒绝**状态。

`forbid`策略永远不会导致 “允许” 决定。**策略上的`unless`条款规定了该`forbid``forbid`政策不适用的条件；它不授予权限，也不会优先于匹配的`permit`策略。**