

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

# Amazon Verified Permissions 示例策略
<a name="policies-examples"></a>

此处包含的一些策略示例是基本的 Cedar 策略示例，有些则是特定于已验证权限的策略示例。基本内容链接到Cedar政策语言参考指南，并包含在那里。有关 Cedar 策略语法的更多信息，请参阅《Cedar 策略语言参考指南》中的 [Cedar 中的基本策略构造](https://docs.cedarpolicy.com/policies/syntax-policy.html)。

**策略示例**
+ [允许访问单个实体](https://docs.cedarpolicy.com/policies/policy-examples.html#allow-acces-indivuals)
+ [允许访问实体组](https://docs.cedarpolicy.com/policies/policy-examples.html#allow-acces-groups)
+ [允许任何实体进行访问](https://docs.cedarpolicy.com/policies/policy-examples.html#allow-any)
+ [允许访问实体的属性 (ABAC)](https://docs.cedarpolicy.com/policies/policy-examples.html#allow-abac)
+ [拒绝访问](https://docs.cedarpolicy.com/policies/policy-examples.html#deny-access)
+ [使用方括号表示法来引用代币属性](#policies-examples-brackets)
+ [使用点符号来引用属性](#policies-examples-dot)
+ [反映 Amazon Cognito ID 令牌属性](#policies-examples-cognito-id)
+ [反映 OIDC ID 令牌属性](#policies-examples-oidc-id)
+ [反映 Amazon Cognito 访问令牌属性](#policies-examples-cognito-access)
+ [反映 OIDC 访问令牌属性](#policies-examples-oidc-access)

## 使用方括号表示法来引用代币属性
<a name="policies-examples-brackets"></a>

以下示例说明如何创建使用方括号表示法来引用令牌属性的策略。

有关在已验证权限的策略中使用令牌属性的更多信息，请参阅[将 Amazon Cognito 令牌映射到架构](cognito-map-token-to-schema.md)和将 [OIDC 令牌映射到](oidc-map-token-to-schema.md)架构。

```
permit (
    principal in MyCorp::UserGroup::"us-west-2_EXAMPLE|MyUserGroup",
    action,
    resource
) when {
    principal["cognito:username"] == "alice" &&
    principal["custom:employmentStoreCode"] == "petstore-dallas" &&
    principal has email && principal.email == "alice@example.com" &&
    context["ip-address"] like "192.0.2.*"
};
```

## 使用点符号来引用属性
<a name="policies-examples-dot"></a>

以下示例说明如何创建使用点符号来引用属性的策略。

有关在已验证权限的策略中使用令牌属性的更多信息，请参阅[将 Amazon Cognito 令牌映射到架构](cognito-map-token-to-schema.md)和将 [OIDC 令牌映射到](oidc-map-token-to-schema.md)架构。

```
permit(principal, action, resource)
when {
    principal.cognito.username == "alice" &&
    principal.custom.employmentStoreCode == "petstore-dallas" &&
    principal.tenant == "x11app-tenant-1" &&
    principal has email && principal.email == "alice@example.com"
};
```

## 反映 Amazon Cognito ID 令牌属性
<a name="policies-examples-cognito-id"></a>

以下示例说明如何创建引用 ID 令牌属性的策略 Amazon Cognito。

有关在已验证权限的策略中使用令牌属性的更多信息，请参阅[将 Amazon Cognito 令牌映射到架构](cognito-map-token-to-schema.md)和将 [OIDC 令牌映射到](oidc-map-token-to-schema.md)架构。

```
permit (
    principal in MyCorp::UserGroup::"us-west-2_EXAMPLE|MyUserGroup",
    action,
    resource
) when {
    principal["cognito:username"] == "alice" &&
    principal["custom:employmentStoreCode"] == "petstore-dallas" &&
    principal.tenant == "x11app-tenant-1" &&
    principal has email && principal.email == "alice@example.com"
};
```

## 反映 OIDC ID 令牌属性
<a name="policies-examples-oidc-id"></a>

以下示例说明如何创建引用 OIDC 提供商的 ID 令牌属性的策略。

有关在已验证权限的策略中使用令牌属性的更多信息，请参阅[将 Amazon Cognito 令牌映射到架构](cognito-map-token-to-schema.md)和将 [OIDC 令牌映射到](oidc-map-token-to-schema.md)架构。

```
permit (
    principal in MyCorp::UserGroup::"MyOIDCProvider|MyUserGroup",
    action,
    resource
) when {
    principal.email_verified == true && principal.email == "alice@example.com" &&
    principal.phone_number_verified == true && principal.phone_number like "+1206*"
};
```

## 反映 Amazon Cognito 访问令牌属性
<a name="policies-examples-cognito-access"></a>

以下示例说明如何创建引用访问令牌属性的策略 Amazon Cognito。

有关在已验证权限的策略中使用令牌属性的更多信息，请参阅[将 Amazon Cognito 令牌映射到架构](cognito-map-token-to-schema.md)和将 [OIDC 令牌映射到](oidc-map-token-to-schema.md)架构。

```
permit(principal, action in [MyApplication::Action::"Read", MyApplication::Action::"GetStoreInventory"], resource)
when { 
    context.token.client_id == "52n97d5afhfiu1c4di1k5m8f60" &&
    context.token.scope.contains("MyAPI/mydata.write")
};
```

## 反映 OIDC 访问令牌属性
<a name="policies-examples-oidc-access"></a>

以下示例说明如何创建引用 OIDC 提供商的访问令牌属性的策略。

有关在已验证权限的策略中使用令牌属性的更多信息，请参阅[将 Amazon Cognito 令牌映射到架构](cognito-map-token-to-schema.md)和将 [OIDC 令牌映射到](oidc-map-token-to-schema.md)架构。

```
permit(
    principal, 
    action in [MyApplication::Action::"Read", MyApplication::Action::"GetStoreInventory"],
    resource
)
when { 
    context.token.client_id == "52n97d5afhfiu1c4di1k5m8f60" &&
    context.token.scope.contains("MyAPI-read")
};
```