

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

# 运行时实例的安全模型和权限
<a name="runtime-instances-security"></a>

当您使用**实例**计算类型托管代理时，您的代理将在您自己的 Amazon 账户中的 Amazon EC2 实例上运行。与无服务器 microVM 计算类型相比，这改变了责任共担模型：实例在您的账户和 VPC 中运行，您的代理以运行时执行角色的权限运行，其中的数据保留在您的账户中。本主题介绍实例的安全模型、所涉及的权限以及在多租户部署时应遵循的做法。

本主题补充了 AgentCore Runtime [ 安全最佳实践中的 Runtime-wide 指南](runtime-security-best-practices.md)。那里的做法（IAM 最低权限、身份验证、加密、网络安全和审计）也适用于实例。有关如何加密连接到您的会话的 EBS 卷，请参阅运行时实例[的静](runtime-instances-encryption.md)态加密。

**Topics**
+ [安全模型](#runtime-instances-security-model)
+ [所需的权限](#runtime-instances-security-permissions)
+ [会话路由和多租户隔离](#runtime-instances-session-routing)
+ [审计和监控](#runtime-instances-monitoring)
+ [最佳实践](#runtime-instances-security-best-practices)

## 安全模型
<a name="runtime-instances-security-model"></a>
+  **该实例位于您的账户中 ** — 由容量提供商启动的 EC2 实例作为 [ Amazon EC2 托管实例在您的账户和 VPC 中运行](https://docs.amazonaws.cn/AWSEC2/latest/UserGuide/amazon-ec2-managed-instances.html)。您可以通过账户中的和 VPC 流日志来检查他们、应用自己的控制措施 CloudTrail 并审核他们的活动。
+  **一个实例上的代理不是相互隔离的 ** — 多个代理可以在同一个实例上运行并共享其文件系统。代理可以在容器中在实例上运行，对于直接部署的代理，则作为进程直接在实例上运行，两者都不为同一实例上的工作负载提供安全边界。共享一个实例的所有代理都必须相互信任。
+  **会话是隔离单元 ** — 由容量提供商和会话 ID 组合标识的会话映射到一个 EC2 实例 (1:1)。两个不同容量提供商下的相同会话 ID 是指两个不同实例上的两个不同会话。您打算彼此隔离的代理不应共享会话。
+  **凭据售 AgentCore 卖 ** — 向在实例上运行的代理提供执行角色凭证，并定期刷新它们。在实例上运行的任何代码都可以读取其可用的证书。将每个运行时的执行角色限定为其代理所需的最低权限。有关更多信息，请参阅[凭证管理](security-credentials-management.md)。
+  **您的账户控制适用 ** — 由于实例在您的账户中运行，因此您的 Amazon 组织服务控制策略 (SCP)、权限边界和 VPC 控制控制控制着在您的账户中采取的操作。 AgentCore 通过您提供或批准的基础设施角色行事；按照 IAM 条件来确定其范围（例如，适用于特定的 VPC、子网或实例类型）。唯一的例外是用于删除和清理资源的 AgentCore 服务相关角色，它不受SCP的限制，这与一般 Amazon 对待服务相关角色的方式一致。
+  **数据驻留 ** — 代理在您指定的 VPC、子网、账户和区域中运行，会话数据和 EBS 卷保留在您的账户中。

## 所需的权限
<a name="runtime-instances-security-permissions"></a>

除了向您的代理代码授予运行时权限的代理运行时执行角色外，在实例上托管代理还涉及以下角色。
+  **实例配置文件 **-已连接到 EC2 实例。 AgentCore 使用它从实例收集系统日志；它不向您的代理代码授予权限（代理运行时执行角色会这样做）。
+  **基础设施角色 ** — AgentCore 担任此角色代表您在账户中预置和管理 EC2 实例，为实例及其网络接口启动、标记和配置网络。因为此角色授予管理账户中计算的 AgentCore 权限，将其限定为工作负载所需的最低权限，并在适当时使用 IAM 条件将其限制为特定 VPC、子网或实例类型。

有关角色配置步骤，请参阅实例[入门](runtime-instances-getting-started.md)。

## 会话路由和多租户隔离
<a name="runtime-instances-session-routing"></a>

AgentCore 运行时授权对代理运行时资源 ARN 的调用，而不是针对单个会话的调用。

调用代理时，您需要提供`runtimeSessionId`，并 AgentCore 验证该会话 ID 的格式，但不验证它是否属于调用身份。这对多租户部署产生了重要影响：

**重要**  
在单个 IAM 委托人代表多个最终用户调用的部署中，平台不强制要求发起调用的用户`sessionId`所有。您有责任确保`sessionId`每位用户的后端传递正确无误。

如果多个最终用户共享相同的 IAM 委托人（例如，调用`InvokeAgentRuntime`所有用户的单个后端执行角色），并且您的后端未将会话绑定到用户，则经过身份验证的用户可以提供另一个用户的会话 ID 并将请求路由到该用户的会话中。以下做法可以缓解这种情况。

### 在后端强制执行会话与用户的绑定
<a name="runtime-instances-app-level-binding"></a>

在后端实现应用程序级会话与用户的绑定。维护应用程序中每个最终用户与其会话 ID 之间的映射，并确保绝不能向另一个用户发出对一个用户的请求`runtimeSessionId`。`runtimeSessionId`将其视为源自经过身份验证的最终用户的服务器端值，切勿直接接受来自不可信客户端输入的值。对于共享主体、多租户部署，后端的应用程序级绑定是防止一个用户将请求路由到另一个用户的会话的控制。

### 使用不同的 IAM 委托人进行高安全性的多租户部署
<a name="runtime-instances-per-user-principals"></a>

对于高安全性的多租户部署，使用每个最终用户（或每个租户组）不同的 IAM 委托人来调用代理，而不是单个共享主体。当每个用户或租户通过自己的委托人进行调用时，IAM 本身会强制执行会话范围界定：委托人只能调用其策略允许的运行时，这消除了共享主体类别的会话路由风险。这是最强大的控制方式，只要部署可以支持每用户或每租户主体，建议使用此方法。

## 审计和监控
<a name="runtime-instances-monitoring"></a>

使用审计来检测会话路由侦测和异常访问：
+  **关联主体和会话 ID ** — Amazon CloudTrail 记录同一`InvokeAgentRuntime`事件`sessionId`中经过身份验证的主体和目标。使用它来检测指向由其他主体创建的会话的主体路由。
+  **应用 Runtime-wide 审计惯例 **-启用 CloudTrail 和 VPC 流日志，使用请求 ID 关联日志，并按[审计和监控](runtime-security-best-practices.md#security-bp-auditing)中所述设置指标筛选器和警报。

## 最佳实践
<a name="runtime-instances-security-best-practices"></a>
+  **按信任级别分离工作负载 **-对互不信任的工作负载使用不同的会话。不要将不可信的代理放在同一个会话中。
+  **对每个角色应用最低权限 **-将代理运行时执行角色和基础架构角色的范围仅限于每个角色所需的操作和资源。
+  **将会话绑定到您的后端用户 **-对于一个委托人为多个最终用户提供服务的任何部署，请在您的应用层中强制执行会话对用户的绑定。
+  **首选每用户或每租户委托人 ** — 在可行的情况下，通过不同的 IAM 委托人进行调用，这样 IAM 就会强制执行会话范围界定。
+  **监控跨主路由 **-用于检测路由异常，例如指 CloudTrail 向其他主体创建的会话的主体路由。

有关同样适用于实例 Runtime-wide 的安全指南，请参阅 AgentCore 运行时[安全最佳实践](runtime-security-best-practices.md)。