

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

# 管理策略和策略引擎
<a name="manage-policies-engines"></a>

使用这些操作来管理您的策略引擎和策略。

 Amazon CLI 和 Amazon SDK 可以对您账户中的任何策略引擎执行操作。 AgentCore CLI 的作用域仅限于单个 AgentCore 项目：它可以删除项目管理的引擎和策略，并`agentcore status`显示其已部署状态，但它没有等效项来读取或更新未创建的资源。使用 Amazon CLI 或 SDK 来解决这些问题。

**Topics**
+ [列出策略引擎](#list-policy-engines)
+ [无需解密即可列出摘要](#list-summaries)
+ [获取策略引擎](#get-policy-engine)
+ [在策略引擎中列出策略](#list-policies-in-engine)
+ [获取政策](#get-policy)
+ [更新现有政策](#update-existing-policies)
+ [删除策略](#delete-policies)
+ [删除策略引擎](#delete-policy-engine)

## 列出策略引擎
<a name="list-policy-engines"></a>

查看您账户中的所有策略引擎。

选择以下方法之一：

**Example**  

1. 

   ```
   aws bedrock-agentcore-control list-policy-engines
   ```

1. 

   ```
   import boto3
   
   client = boto3.client('bedrock-agentcore-control')
   
   response = client.list_policy_engines()
   for engine in response['policyEngines']:
       print(f"Policy Engine: {engine['name']} (ID: {engine['policyEngineId']})")
       print(f"Status: {engine['status']}")
       print(f"Created: {engine['createdAt']}")
       print(f"ARN: {engine['policyEngineArn']}")
   ```

## 无需解密即可列出摘要
<a name="list-summaries"></a>

除`ListPolicyEngines`和外`ListPolicies`，该服务还提供摘要，这些摘要返回标识符、姓名和状态，但省略了加密内容。策略引擎的摘要没有描述，策略的摘要没有描述`definition`。

```
aws bedrock-agentcore-control list-policy-engine-summaries

aws bedrock-agentcore-control list-policy-summaries \
  --policy-engine-id my_policy_engine-a1b2c3d4e5
```

当您需要清单而不是报表本身时，请使用它们。当客户管理的密钥不可用时，您还可以使用它们来枚举存在的内容。完整列表和获取操作会在返回之前验证密钥并进行解密，因此当密钥被禁用、删除或撤销其授权时，它们会失败。摘要两者都没有。有关更多信息，请参阅[密钥不可用：您无法列出或阅读您的政策](policy-encryption.md#policy-encryption-error-key-unavailable)。

## 获取策略引擎
<a name="get-policy-engine"></a>

检索有关特定策略引擎的详细信息：

**Example**  

1. 

   ```
   aws bedrock-agentcore-control get-policy-engine --policy-engine-id my_policy_engine-a1b2c3d4e5
   ```

1. 

   ```
   import boto3
   
   client = boto3.client('bedrock-agentcore-control')
   
   response = client.get_policy_engine(
       policyEngineId='my_policy_engine-a1b2c3d4e5'
   )
   
   print(f"Policy Engine: {response['name']}")
   print(f"ID: {response['policyEngineId']}")
   print(f"ARN: {response['policyEngineArn']}")
   print(f"Status: {response['status']}")
   print(f"Created: {response['createdAt']}")
   print(f"Updated: {response['updatedAt']}")
   ```

## 在策略引擎中列出策略
<a name="list-policies-in-engine"></a>

查看特定策略引擎中的所有策略：

**Example**  

1. 

   ```
   aws bedrock-agentcore-control list-policies --policy-engine-id my_policy_engine-a1b2c3d4e5
   ```

1. 

   ```
   import boto3
   
   client = boto3.client('bedrock-agentcore-control')
   
   response = client.list_policies(
       policyEngineId='my_policy_engine-a1b2c3d4e5'
   )
   
   for policy in response['policies']:
       print(f"Policy: {policy['name']} (ID: {policy['policyId']})")
       print(f"Status: {policy['status']}")
       print(f"Description: {policy.get('description', 'No description')}")
       print(f"Created: {policy['createdAt']}")
   ```

## 获取政策
<a name="get-policy"></a>

检索有关特定策略的详细信息：

**Example**  

1. 

   ```
   aws bedrock-agentcore-control get-policy --policy-engine-id my_policy_engine-a1b2c3d4e5 --policy-id my_policy-a1b2c3d4e5
   ```

1. 

   ```
   import boto3
   
   client = boto3.client('bedrock-agentcore-control')
   
   response = client.get_policy(
       policyId='my_policy-a1b2c3d4e5',
       policyEngineId='my_policy_engine-a1b2c3d4e5'
   )
   
   print(f"Policy: {response['name']}")
   print(f"ID: {response['policyId']}")
   print(f"ARN: {response['policyArn']}")
   print(f"Status: {response['status']}")
   print(f"Created: {response['createdAt']}")
   print(f"Updated: {response['updatedAt']}")
   print(f"Cedar Statement: {response['definition']['policy']['statement']}")
   ```

## 更新现有政策
<a name="update-existing-policies"></a>

 `UpdatePolicy`是就地替代品，因此请发送您想要的完整对账单。

验证分两个阶段进行。格式错误的语句在呼叫时会被拒绝。`ValidationException`不受约束的原`resource`因之一：要么将其限制在特定的网关上`resource ==`，要么限制到带有的类型。`resource is AgentCore::Gateway`解析但不进行类型检查的语句返回 HTTP 202 并结算为`UPDATE_FAILED`，因此请等待`ACTIVE`而不是将响应视为成功。

**注意**  
如果更新的策略是临时策略，或者更新添加或删除了时态表达式，则对其进行更新会使引擎的活动临时策略会话失效。 In-flight 会话返回 HTTP 409`ConflictException`，必须重新启动。有关更多信息，请参阅[会话失效](policy-temporal.md#policy-temporal-session-invalidation)。

**Example**  

1. 

   ```
   aws bedrock-agentcore-control update-policy \
     --policy-id my_policy-a1b2c3d4e5 \
     --policy-engine-id my_policy_engine-a1b2c3d4e5 \
     --definition '{
       "policy": {
         "statement": "permit (principal, action == AgentCore::Action::\"RefundTool___process_refund\", resource == AgentCore::Gateway::\"arn:aws:bedrock-agentcore:us-west-2:123456789012:gateway/my-gateway-a1b2c3d4e5\");"
       }
     }'
   ```

1. 

   ```
   import boto3
   
   client = boto3.client('bedrock-agentcore-control')
   
   client.update_policy(
       policyId='my_policy-a1b2c3d4e5',
       policyEngineId='my_policy_engine-a1b2c3d4e5',
       definition={
           'policy': {
               'statement': (
                   'permit (principal, '
                   'action == AgentCore::Action::"RefundTool___process_refund", '
                   'resource == AgentCore::Gateway::"arn:aws:bedrock-agentcore:us-west-2:123456789012:gateway/my-gateway-a1b2c3d4e5");'
               )
           }
       }
   )
   
   waiter = client.get_waiter('policy_active')
   waiter.wait(policyEngineId='my_policy_engine-a1b2c3d4e5', policyId='my_policy-a1b2c3d4e5')
   ```

## 删除策略
<a name="delete-policies"></a>

从策略引擎中删除策略。

**Example**  

1. 对于您的 AgentCore 项目管理的策略，请将其从项目中移除并部署：

   ```
   agentcore remove policy --name my_policy --engine my_policy_engine --yes
   agentcore deploy --yes
   ```

    `agentcore remove`仅编辑项目配置；下次该策略将从您的账户中删除`agentcore deploy`。

1. 

   ```
   aws bedrock-agentcore-control delete-policy --policy-engine-id my_policy_engine-a1b2c3d4e5 --policy-id my_policy-a1b2c3d4e5
   ```

1. 

   ```
   import boto3
   
   client = boto3.client('bedrock-agentcore-control')
   
   client.delete_policy(policyId='my_policy-a1b2c3d4e5', policyEngineId='my_policy_engine-a1b2c3d4e5')
   waiter = client.get_waiter('policy_deleted')
   waiter.wait(policyEngineId='my_policy_engine-a1b2c3d4e5', policyId='my_policy-a1b2c3d4e5')
   ```

## 删除策略引擎
<a name="delete-policy-engine"></a>

删除整个策略引擎及其所有策略。

**注意**  
您无法删除当前连接到网关的策略引擎。首先通过更新网关配置将其分离；请参阅[使用策略引擎更新现有网关](update-gateway-with-policy.md)。
您无法删除仍包含策略的策略引擎。先删除所有策略，然后删除引擎。

**Example**  

1. 对于您的 AgentCore 项目管理的引擎，请将其从项目中移除并部署：

   ```
   agentcore remove policy-engine --name my_policy_engine --yes
   agentcore deploy --yes
   ```

   移除网关不会移除与其连接的策略引擎；请单独移除该引擎。

1. 

   ```
   aws bedrock-agentcore-control delete-policy-engine --policy-engine-id my_policy_engine-a1b2c3d4e5
   ```

1. 

   ```
   import boto3
   
   client = boto3.client('bedrock-agentcore-control')
   
   client.delete_policy_engine(policyEngineId='my_policy_engine-a1b2c3d4e5')
   ```