

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

# 为亚马逊 Bedrock C AgentCore ode 解释器配置根证书颁发机构
<a name="code-interpreter-root-ca-certificates"></a>

默认情况下，亚马逊 Bedrock C AgentCore ode Interpreter 会话仅信任公共认可的证书颁发机构。如果您的代理需要访问使用私有 CA 签名证书的 TLS-intercepting 代理后面的内部服务或资源，则必须在启动会话时提供自定义根 CA 证书。

Amazon Bedrock 使用您的呼叫者凭证从 S Amazon ecrets Manager AgentCore 检索 PEM-encoded 证书内容，验证 X.509 格式和到期时间，并将证书安装到会话的操作系统信任存储库中。这使代码解释器能够与您的内部资源建立可信的 HTTPS 连接。

## 工作原理
<a name="code-interpreter-root-ca-how-it-works"></a>

亚马逊 Bedrock AgentCore 代码解释器的根证书颁发机构的工作方式如下：

1. 您提供证书位置列表，每个位置都指向 Secre Amazon ts Manager 中包含 PEM-encoded 根 CA 证书的密钥。

1. 亚马逊 Bedrock AgentCore 使用您的来电凭证从 Amazon 密钥管理器检索每份证书。

1. 每份证书都经过验证以确定其正确的 X.509 PEM 格式，并进行检查以确保其未过期且未在有效开始日期之前使用。

1. 有效证书将部署到会话的操作系统信任存储区，使其可供代码执行运行时和沙箱中的任何网络客户端使用。

在工具级别（通过`CreateCodeInterpreter`）配置的证书与会话开始时提供的任何证书相结合。这允许您在工具上设置组织范围的证书，并根据需要添加特定会话的证书。

**注意**  
证书配置是每个会话的一次性操作。一旦安装了证书，就无法在该会话期间对其进行修改。

## 先决条件
<a name="code-interpreter-root-ca-prerequisites"></a>

在配置根 CA 证书之前，请确保您具备以下条件：
+ 已完成一般[先决条件](code-interpreter-getting-started.md#code-interpreter-prerequisites)。
+ 您的根 CA 证书作为密钥存储在 Amazon 密钥管理器中。每个密钥必须包含有效的 PEM-encoded X.509 证书
+ 从 Amazon 密钥管理器读取证书密钥的 IAM 权限。将以下权限添加到您的 IAM 策略中：

  ```
  {
  "Version": "2012-10-17",		 	 	 
      "Statement": [
          {
              "Sid": "SecretsManagerCertificateAccess",
              "Effect": "Allow",
              "Action": [
                  "secretsmanager:GetSecretValue"
              ],
              "Resource": "arn:aws:secretsmanager:<Region>:<account-id>:secret:<secret-name>"
          }
      ]
  }
  ```

## 将您的证书存储在 Amazon Secrets Manager
<a name="code-interpreter-root-ca-store-certificate"></a>

在使用亚马逊 Bedrock AgentCore 代码解释器的根 CA 证书之前，必须将其作为密钥存储在 Amazon 密钥管理器中。密钥值必须是 PEM-encoded 证书内容。

**Example**  

1. 

   ```
   aws secretsmanager create-secret \
     --name "my-corporate-root-ca" \
     --description "Corporate root CA certificate for AgentCore sessions" \
     --secret-string file://my-root-ca.pem \
     --region <region>
   ```

1. 

   ```
   import boto3
   
   client = boto3.client('secretsmanager', region_name='<region>')
   
   # Read the PEM certificate file
   with open('my-root-ca.pem', 'r') as f:
       cert_content = f.read()
   
   response = client.create_secret(
       Name='my-corporate-root-ca',
       Description='Corporate root CA certificate for AgentCore sessions',
       SecretString=cert_content
   )
   
   print(f"Secret ARN: {response['ARN']}")
   ```

记下输出中的秘密 ARN。使用证书配置启动会话时，您将使用此 ARN。

**重要**  
密钥必须包含有效的 PEM-encoded X.509 证书。该证书不得过期，并且必须在其有效期内。Amazon Bedrock 在安装证书之前 AgentCore 会验证证书格式和到期时间。

## 使用自定义证书启动代码解释器会话
<a name="code-interpreter-root-ca-session"></a>

要启动信任您的自定义根 CA 证书的代码解释器会话，请在`StartCodeInterpreterSession`请求中添加`certificates`参数。

**Example**  

1. 

   ```
   aws bedrock-agentcore start-code-interpreter-session \
     --code-interpreter-identifier "aws.codeinterpreter.v1" \
     --name "ci-session-with-custom-ca" \
     --certificates '[
       {
         "location": {
           "secretsManager": {
             "secretArn": "arn:aws:secretsmanager:<region>:<account-id>:secret:<secret-name>"
           }
         }
       }
     ]'
   ```

1. 

   ```
   import boto3
   
   client = boto3.client('bedrock-agentcore', region_name='<region>')
   
   response = client.start_code_interpreter_session(
       codeInterpreterIdentifier="aws.codeinterpreter.v1",
       name="ci-session-with-custom-ca",
       certificates=[
           {
               "location": {
                   "secretsManager": {
                       "secretArn": "arn:aws:secretsmanager:<region>:<account-id>:secret:<secret-name>"
                   }
               }
           }
       ]
   )
   
   print(f"Session ID: {response['sessionId']}")
   print(f"Status: {response['status']}")
   ```

1. 

   ```
   {
     "name": "ci-session-with-custom-ca",
     "certificates": [
       {
         "location": {
           "secretsManager": {
             "secretArn": "arn:aws:secretsmanager:<region>:<account-id>:secret:<secret-name>"
           }
         }
       }
     ]
   }
   ```

## 使用多个证书
<a name="code-interpreter-root-ca-multiple-certificates"></a>

您可以在单个代码解释器会话中提供多个根 CA 证书。当您的环境需要信任多个内部证书颁发机构（例如针对不同的内部服务或环境的单独的 CA）时，这很有用。

**Example**  

1. 

   ```
   aws bedrock-agentcore start-code-interpreter-session \
     --code-interpreter-identifier "aws.codeinterpreter.v1" \
     --name "ci-session-with-multiple-cas" \
     --certificates '[
       {
         "location": {
           "secretsManager": {
             "secretArn": "arn:aws:secretsmanager:<region>:<account-id>:secret:corporate-root-ca"
           }
         }
       },
       {
         "location": {
           "secretsManager": {
             "secretArn": "arn:aws:secretsmanager:<region>:<account-id>:secret:proxy-ca"
           }
         }
       }
     ]'
   ```

1. 

   ```
   response = client.start_code_interpreter_session(
       codeInterpreterIdentifier="aws.codeinterpreter.v1",
       name="ci-session-with-multiple-cas",
       certificates=[
           {
               "location": {
                   "secretsManager": {
                       "secretArn": "arn:aws:secretsmanager:<region>:<account-id>:secret:corporate-root-ca"
                   }
               }
           },
           {
               "location": {
                   "secretsManager": {
                       "secretArn": "arn:aws:secretsmanager:<region>:<account-id>:secret:proxy-ca"
                   }
               }
           }
       ]
   )
   ```

## 在工具级别配置证书
<a name="code-interpreter-root-ca-tool-level"></a>

创建自定义代码解释器时，可以在工具级别配置证书。除了会话开始时提供的任何证书外，在工具级别配置的证书还会自动应用于使用该工具启动的每个会话。

这对于所有代码解释器会话都应信任的组织范围的证书很有用。

**Example**  

1. 

   ```
   response = client.create_code_interpreter(
       name="corporate-code-interpreter",
       description="Code interpreter with corporate CA trust",
       certificates=[
           {
               "location": {
                   "secretsManager": {
                       "secretArn": "arn:aws:secretsmanager:<region>:<account-id>:secret:corporate-root-ca"
                   }
               }
           }
       ]
   )
   
   ci_id = response['codeInterpreterIdentifier']
   print(f"Code Interpreter ID: {ci_id}")
   ```

当您使用配置了证书的代码解释器启动会话时，工具级证书将与任何会话级证书组合在一起。 Tool-level 首先应用证书，然后应用会话级证书。

## 证书要求和限制
<a name="code-interpreter-root-ca-certificate-requirements"></a>

证书必须满足以下要求：


| 要求 | 说明 | 
| --- | --- | 
| Format | PEM-encoded X.509 证书 | 
| 仓储服务 |  Amazon 密钥管理器密钥（作为字符串值，不是二进制） | 
| 有效性 | 证书不得过期，且必须在其有效期内（介于`notBefore`和`notAfter`日期之间） | 
| 每个会话的最大证书数 | 每个会话 10 个，每个工具 10 个。一个会话总共最多可以有 20 个证书。 | 
| 秘密 ARN 格式 |  `arn:aws:secretsmanager:region:account-id:secret:secret-name`  | 
| 位置类型 | 仅支持 Amazon 密钥管理器作为证书位置 | 

## 问题排查
<a name="code-interpreter-root-ca-troubleshooting"></a>

下表描述了为 Amazon Bedrock C AgentCore ode Interpreter 配置根 CA 证书时的常见错误及其解决方法。


| 错误 | 原因 | 解决方案 | 
| --- | --- | --- | 
| 在密钥管理器中找不到证书密钥 | 密钥 ARN 不存在或密钥已被删除。 | 验证密钥 ARN 是否正确且密钥存在于指定区域。 | 
| 拒绝访问密钥管理器中的证书密钥 | 呼叫者对该密钥没有`secretsmanager:GetSecretValue`权限。 | 在您的 IAM 策略中添加指定机密 ARN 的`secretsmanager:GetSecretValue`权限。 | 
| 证书内容 PEM/X.509 格式无效 | 密钥值不是有效的 PEM-encoded X.509 证书。 | 确保密钥包含以开头`-----BEGIN CERTIFICATE-----`和结尾的正确格式的 PEM 证书。`-----END CERTIFICATE-----` | 
| 证书已过期 | 证书的`notAfter`日期是过去的日期。 | 在 S Amazon ecrets Manager 中将过期的证书替换为有效证书，然后重试。 | 
| 证书尚未生效 | 证书的`notBefore`日期是将来的日期。 | 等到证书的有效期开始，或使用当前有效的证书。 | 
| 证书数量超过允许的最大值 | 在会话级别或工具级别提供了 10 多个证书。 | 将每个会话的证书数量减少到 10 个或更少，每个工具 10 个或更少。 | 
| 证书位置为必填项 | 提供的证书条目没有注明地点。 | 确保阵列中的每个证书都包含，`location`其`secretsManager`条目包含有效的`secretArn`。 | 
| 未启用证书配置 | 您的账户未启用证书功能。 | 请联系客 Amazon 服，为您的账户启用证书功能。 | 