Gemeinsame politische Muster
Diese Beispiele zeigen häufig verwendete politische Muster von Cedar. Die Muster funktionieren sowohl bei der OAuth- als auch bei der IAM-Authentifizierung. Wählen Sie den entsprechenden Prinzipaltyp für Ihre Gateway-Konfiguration aus. AgentCore Einzelheiten zu Hauptattributen finden Sie unter Hauptattribute.
Diese Muster gelten unabhängig vom Authentifizierungstyp.
Notabschaltung
Deaktivieren Sie alle Tool-Aufrufe im gesamten Gateway:
forbid( principal, action, resource );
Anwendungsfall: Notabschaltung, Wartungsmodus oder Reaktion auf Vorfälle.
Auswirkung: Setzt alle Genehmigungsrichtlinien aufgrund der Semantik „Verbotene Gewinne“ außer Kraft.
Spezifisches Tool deaktivieren
Deaktivieren Sie ein bestimmtes Tool, während andere funktionsfähig bleiben:
forbid( principal, action == AgentCore::Action::"RefundTool___process_refund", resource == AgentCore::Gateway::"arn:aws:bedrock-agentcore:us-west-2:123456789012:gateway/refund-gateway" );
Anwendungsfall: Deaktivieren Sie vorübergehend ein problematisches Tool, ohne andere Funktionen zu beeinträchtigen.
Benutzerzugriff blockieren
Verhindern Sie, dass bestimmte Benutzer oder Konten Aktionen ausführen:
OAuth: Blockiere einen bestimmten Benutzer
Blockiere einen Benutzer, indem du seinen Benutzernamen-Tag abgleichst:
forbid( principal is AgentCore::OAuthUser, action, resource ) when { principal.hasTag("username") && principal.getTag("username") == "suspended-user" };
Anwendungsfall: Widerrufen Sie sofort den Zugriff für ein kompromittiertes oder gesperrtes Benutzerkonto.
IAM: Sperrt ein bestimmtes Konto
Anrufer von einem bestimmten AWS Konto aus blockieren:
forbid( principal is AgentCore::IamEntity, action, resource ) when { principal.id like "*:444455556666:*" };
Anwendungsfall: Sperren Sie Testkonten oder nicht autorisierte Konten für den Zugriff auf Produktionstools. Das Muster
:444455556666:
entspricht jedem ARN-Format (angenommene Rolle, IAM-Benutzer oder IAM-Rolle), das diese Konto-ID enthält.
Role-based Zugriffskontrolle
Beschränken Sie den Zugriff auf der Grundlage von Rollen. OAuth verwendet Rollentags; IAM verwendet Rollen-ARN-Muster.
OAuth: Rollentags verwenden
Erlauben Sie den Zugriff nur Benutzern mit bestimmten Rollen:
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") };
Anwendungsfall: Erlauben Sie Administratorvorgänge nur für Benutzer mit Administrator- oder Managerrollen.
IAM: ARNs mit IAM-Rollen verwenden
Erlauben Sie den Zugriff nur für Anrufer, die bestimmte IAM-Rollen verwenden. Sie können Exact principal == Matching oder principal.id like Pattern Matching verwenden:
// 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" );
Anwendungsfall: Erlauben Sie Verwaltungsvorgänge nur für Anrufer, die die AdminRole IAM-Rolle übernehmen. Die Cedar-Entitäts-ID für angenommene Rollen verwendet das Format. arn:aws:sts::<account>:assumed-role/<role-name>
Variationen, die Musterabgleich verwenden:
// 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/*"
Operationen vom Datentyp
Cedar unterstützt verschiedene Datentypen unter bestimmten Bedingungen. In diesen Beispielen werden OAuth-Prinzipale () verwendet. AgentCore::OAuthUser Verwenden Sie für IAM-authenticated Gateways AgentCore::IamEntity stattdessen - die Logik zur Eingabevalidierung bleibt identisch.
Ganzzahlen (lang)
// 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 };
Zeichenfolgen
// 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" };
Listen (Sätze)
// 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) };
Suche nach optionalen Feldern
// 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 };