常见的政策模式
这些示例演示了经常使用的 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 };