View a markdown version of this page

常见的政策模式 - Amazon Bedrock AgentCore

常见的政策模式

这些示例演示了经常使用的 Cedar 策略模式。这些模式适用于 OAuth 和 IAM 身份验证——为您的网关配置选择合适的主体类型。 AgentCore 有关主体属性的详细信息,请参阅主体属性

无论身份验证类型如何,这些模式都适用。

紧急停机

禁用整个网关上的所有工具调用:

forbid( principal, action, resource );

用例:紧急关机、维护模式或事件响应。

效果:由于禁胜语义,覆盖所有许可策略。

禁用特定工具

禁用特定工具,同时让其他工具保持正常运行:

forbid( principal, action == AgentCore::Action::"RefundTool___process_refund", resource == AgentCore::Gateway::"arn:aws:bedrock-agentcore:us-west-2:123456789012:gateway/refund-gateway" );

用例:在不影响其他功能的情况下暂时禁用有问题的工具。

屏蔽用户访问权限

阻止特定用户或账户执行任何操作:

OAuth:屏蔽特定用户

通过匹配用户的用户名标签来屏蔽用户:

forbid( principal is AgentCore::OAuthUser, action, resource ) when { principal.hasTag("username") && principal.getTag("username") == "suspended-user" };

用例:立即撤销被盗或被暂停的用户账户的访问权限。

IAM:封锁特定账户

屏蔽来自特定 AWS 账号的来电者:

forbid( principal is AgentCore::IamEntity, action, resource ) when { principal.id like "*:444455556666:*" };

用例:阻止测试账户或未经授权的账户访问生产工具。该模式 :444455556666: 与包含该账户 ID 的任何 ARN 格式(假设角色、IAM 用户或 IAM 角色)相匹配。

Role-based 访问控制

根据角色限制访问权限。OAuth 使用角色标签;IAM 使用角色 ARN 模式。

OAuth:使用角色标签

仅允许具有特定角色的用户访问:

permit( principal is AgentCore::OAuthUser, action == AgentCore::Action::"AdminAPI___delete_resource", resource == AgentCore::Gateway::"arn:aws:bedrock-agentcore:us-west-2:123456789012:gateway/admin" ) when { principal.hasTag("role") && (principal.getTag("role") == "admin" || principal.getTag("role") == "manager") };

用例:仅允许具有管理员或管理员角色的用户进行管理操作。

IAM:使用 IAM 角色 ARN

仅允许使用特定 IAM 角色的来电者进行访问。您可以使用精确principal ==匹配或principal.id like模式匹配:

// Exact match (recommended for single-role policies) permit( principal == AgentCore::IamEntity::"arn:aws:sts::123456789012:assumed-role/AdminRole", action == AgentCore::Action::"AdminAPI___delete_resource", resource == AgentCore::Gateway::"arn:aws:bedrock-agentcore:us-west-2:123456789012:gateway/admin" );

用例:仅允许担任 AdminRole IAM 角色的来电者进行管理操作。代入角色的 Cedar 实体 ID 使用该格式arn:aws:sts::<account>:assumed-role/<role-name>

使用模式匹配的变体:

// Match a specific role from any account principal.id like "arn:aws:sts::*:assumed-role/AdminRole" // Match any role in a specific account principal.id like "arn:aws:sts::123456789012:assumed-role/*"

数据类型操作

Cedar 在条件下支持各种数据类型。这些示例使用 OAuth 主体 ()。AgentCore::OAuthUser对于 IAM-authenticated 网关,请AgentCore::IamEntity改用-输入验证逻辑保持不变。

整数(长)

// Check if passenger count is exactly 2 permit( principal is AgentCore::OAuthUser, action == AgentCore::Action::"TravelAPI___search_flights", resource == AgentCore::Gateway::"arn:aws:bedrock-agentcore:us-west-2:123456789012:gateway/travel" ) when { context.input.passengers == 2 };

字符串

// Check if payment method is credit card permit( principal is AgentCore::OAuthUser, action == AgentCore::Action::"PaymentAPI___process_payment", resource == AgentCore::Gateway::"arn:aws:bedrock-agentcore:us-west-2:123456789012:gateway/payment" ) when { context.input.paymentMethod == "credit-card" };

清单(套装)

// Check if country is in allowed list permit( principal is AgentCore::OAuthUser, action == AgentCore::Action::"ShippingAPI___calculate_rate", resource == AgentCore::Gateway::"arn:aws:bedrock-agentcore:us-west-2:123456789012:gateway/shipping" ) when { ["US", "CA", "MX"].contains(context.input.country) };

正在检查可选字段

// Require optional field to be present permit( principal is AgentCore::OAuthUser, action == AgentCore::Action::"OrderAPI___create_order", resource == AgentCore::Gateway::"arn:aws:bedrock-agentcore:us-west-2:123456789012:gateway/order" ) when { context.input has shippingAddress };