

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

# 在 AgentCore 中使用 AgentCore Gateway 搭配 政策
<a name="use-gateway-with-policy"></a>

遵循閘道授權和身分驗證指南，取得閘道存取所需的登入資料。

**僅限 MCP 工具**  
政策評估僅適用於 MCP 工具。無論政策評估模式為何，閘道一律允許 MCP 提示 (`prompts/list`、`prompts/get`) 和資源 (`resources/list`、`resources/read`、`resources/templates/list`)。

**Topics**
+ [在 AgentCore 中列出具有政策的 AgentCore 閘道工具](#list-gateway-tools)
+ [使用政策呼叫閘道工具](#call-gateway-tools)
+ [傳遞暫時政策的政策工作階段 ID](#use-gateway-policy-session-id)
+ [政策回應](#policy-responses)

## 在 AgentCore 中列出具有政策的 AgentCore 閘道工具
<a name="list-gateway-tools"></a>

工具清單會視為**中繼動作** 。當委託人列出可用的工具時，政策引擎不會評估特定工具調用的完整內容 （例如輸入參數）。

委託人只能查看清單中允許依政策呼叫的工具。由於工具呼叫的完整內容在列出期間不可用，這表示**如果存在允許對該工具進行呼叫的任何一組情況，則允許委託人列出工具**。

因此，清單中出現的工具不保證對該工具的後續呼叫會獲得授權。實際工具調用的授權決策會使用完整的請求內容分別評估，包括輸入參數。

選取下列其中一種方法：

**Example**  

1. 

   ```
   curl -X POST \
     https://mygateway-abcdefghij.gateway.bedrock-agentcore.us-west-2.amazonaws.com/mcp \
     -H "Content-Type: application/json" \
     -H "Authorization: Bearer YOUR_ACCESS_TOKEN" \
     -d '{
       "jsonrpc": "2.0",
       "id": "list-tools-request",
       "method": "tools/list"
     }'
   ```

1. 

   ```
   import requests
   import json
   
   def list_tools(gateway_url, access_token):
       headers = {
           "Content-Type": "application/json",
           "Authorization": f"Bearer {access_token}"
       }
   
       payload = {
           "jsonrpc": "2.0",
           "id": "list-tools-request",
           "method": "tools/list"
       }
   
       response = requests.post(gateway_url, headers=headers, json=payload)
       return response.json()
   
   # Example usage
   gateway_url = "https://mygateway-abcdefghij.gateway.bedrock-agentcore.us-west-2.amazonaws.com/mcp"
   access_token = "YOUR_ACCESS_TOKEN"
   tools = list_tools(gateway_url, access_token)
   print(json.dumps(tools, indent=2))
   ```

   回應只會傳回政策允許您查看的工具。政策拒絕的工具不會出現在清單中。

## 使用政策呼叫閘道工具
<a name="call-gateway-tools"></a>

對閘道進行工具呼叫。政策評估會決定是否允許或拒絕呼叫。

選取下列其中一種方法：

**Example**  

1. 

   ```
   # Call a tool to test policy enforcement
   curl -X POST \
     https://mygateway-abcdefghij.gateway.bedrock-agentcore.us-west-2.amazonaws.com/mcp \
     -H "Content-Type: application/json" \
     -H "Authorization: Bearer YOUR_ACCESS_TOKEN" \
     -d '{
       "jsonrpc": "2.0",
       "id": "test-policy",
       "method": "tools/call",
       "params": {
         "name": "tool_name",
         "arguments": {arguments}
       }
     }'
   ```

1. 

   ```
   import requests
   import json
   
   def call_gateway_tool(gateway_url, access_token, tool_name, arguments):
       headers = {
           "Content-Type": "application/json",
           "Authorization": f"Bearer {access_token}"
       }
   
       payload = {
           "jsonrpc": "2.0",
           "id": "test-policy",
           "method": "tools/call",
           "params": {
               "name": tool_name,
               "arguments": arguments
           }
       }
   
       response = requests.post(gateway_url, headers=headers, json=payload)
       return response.json()
   
   # Example usage
   gateway_url = "https://mygateway-abcdefghij.gateway.bedrock-agentcore.us-west-2.amazonaws.com/mcp"
   access_token = "YOUR_ACCESS_TOKEN"
   result = call_gateway_tool(
       gateway_url,
       access_token,
       "RefundTool___process_refund",
       {
           "orderId": "12345",
           "amount": 450,
           "reason": "Defective product"
       }
   )
   print(json.dumps(result, indent=2))
   ```

## 傳遞暫時政策的政策工作階段 ID
<a name="use-gateway-policy-session-id"></a>

若要啟用暫時政策評估，請在請求中包含 `x-amzn-bedrock-agentcore-policy-session-id`標頭。這會將多個調用分組為單一工作階段，以強制執行工作階段感知政策。

```
curl -X POST \
  https://mygateway-abcdefghij.gateway.bedrock-agentcore.us-west-2.amazonaws.com/mcp \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer YOUR_ACCESS_TOKEN" \
  -H "x-amzn-bedrock-agentcore-policy-session-id: YOUR_SESSION_ID" \
  -d '{
    "jsonrpc": "2.0",
    "id": "test-temporal-policy",
    "method": "tools/call",
    "params": {
      "name": "tool_name",
      "arguments": {arguments}
    }
  }'
```

Gateway 不會代表您產生工作階段 ID。您必須產生工作階段 ID，並在每次請求時傳送，從第一個請求開始。如果您省略 標頭，或傳送空值，閘道不會建立工作階段。如果關聯的政策引擎包含暫時政策，則沒有工作階段 ID 的請求會失敗並出現驗證錯誤。傳送與相同工作階段中每個請求相同的 ID。

## 政策回應
<a name="policy-responses"></a>

當政策允許請求時：

```
{
  "jsonrpc": "2.0",
  "id": 2,
  "result": {
    "isError": false,
    "content": [
      {
        "type": "text",
        "text": "ToolResult"
      }
    ]
  }
}
```

當政策拒絕請求時：

```
{
  "jsonrpc": "2.0",
  "id": 2,
  "result": {
    "content": [
      {
        "type": "text",
        "text": "AuthorizeActionException - Tool Execution Denied: Tool call not allowed due to policy enforcement [No policy applies to the request (denied by default).]"
      }
    ],
    "isError": true
  }
}
```