

本文属于机器翻译版本。若本译文内容与英语原文存在差异，则一律以英文原文为准。

# Verified Access 策略声明结构
<a name="auth-policies-policy-statement-struct"></a>

下表展示了 Verified Access 策略的结构。


| 组件 | 语法 | 
| --- | --- | 
| 效果 | `permit \| forbid` | 
| 范围 | `(principal, action, resource)` | 
| 条件子句 | <pre>when {<br />    context.{{policy-reference-name}}.{{attribute-name}}             <br />};</pre>  | 

## 策略组件
<a name="auth-policies-policy-components"></a>

Verified Access 策略包含以下组件：
+ **效果** – `permit`（允许）或 `forbid`（拒绝）访问。
+ **范围** – 指定效果适用于哪些主体、操作和资源。您可以通过不标识特定主体、操作或资源来使 Cedar 中的范围保持未定义状态。在这种情况下，策略适用于所有可能的主体、操作和资源。
+ **条件子句** – 应用效果的上下文。

**重要**  
对于 Verified Access，通过在条件子句中引用信任数据来完全表达策略。**策略范围必须始终保持未定义状态**。然后，您可以在条件子句中使用身份和设备信任上下文指定访问权限。

## 评论
<a name="auth-policies-policy-comments"></a>

您可以在 AWS Verified Access 政策中加入评论。注释被定义为以 `//` 开头、以换行符结尾的一行。

以下示例显示了策略中的注释。

```
// grants access to users in a specific domain using trusted devices
permit(principal, action, resource)
when {
  // the user's email address is in the @example.com domain
  context.idc.user.email.address.contains("@example.com")
  // Jamf thinks the user's computer is low risk or secure.
  && ["LOW", "SECURE"].contains(context.jamf.risk)
};
```

## 多子句
<a name="auth-policies-multiple-clauses"></a>

您可以利用 `&&` 运算符，在一个策略声明中使用多个条件子句。

```
permit(principal,action,resource)
when{
 context.{{policy-reference-name}}.{{attribute1}} &&
 context.{{policy-reference-name}}.{{attribute2}}
};
```

有关其他示例，请参阅 [Verified Access 策略示例](trust-data-iam-add-pol.md)。

## 预留字符
<a name="auth-policies-semicolon"></a>

以下示例说明当上下文属性使用 `:`（分号）时如何编写策略，该符号是策略语言中的保留字符。

```
permit(principal, action, resource) 
when {
    context.{{policy-reference-name}}["namespace:groups"].contains("finance")
};
```