Beispielrichtlinien
Dieser Abschnitt enthält umfassende Beispiele für Cedar-Autorisierungspolicen für ein Versicherungsmanagementsystem. Diese Beispiele veranschaulichen verschiedene Cedar-Sprachfunktionen und Autorisierungsmuster, die Sie für Ihre eigenen Anwendungen anpassen können.
Themen
Verfügbare Tools
Die Insurance API bietet fünf Tools für die Verwaltung von Versicherungspolicen und Ansprüchen:
- Versicherungs-API___GET_POLICY
-
Rufen Sie die Details der Versicherungspolice ab.
Parameter:
-
policyId(Zeichenfolge, erforderlich) — Die Policen-ID
-
- InsuranceAPI___file_claim
-
Reichen Sie einen Versicherungsanspruch ein.
Parameter:
-
policyId(string, erforderlich) — Die Policen-ID -
claimType(Zeichenfolge, erforderlich) — Art des Antrags (z. B. „Gesundheit“, „Eigentum“, „Auto“) -
amount(Nummer, erforderlich) — Höhe des Antrags -
description(Zeichenfolge, optional) — Beschreibung des Anspruchs
-
- Versicherungs-API___update_coverage
-
Aktualisieren Sie den Versicherungsschutz.
Parameter:
-
policyId(string, erforderlich) — Die Policy-ID -
coverageType(string, erforderlich) — Art der Deckung (z. B. „Haftung“, „Kollision“) -
newLimit(Zahl, erforderlich) — Neue Deckungsgrenze
-
- Versicherungs-API___get_claim_status
-
Überprüfen Sie den Status des Antrags.
Parameter:
-
claimId(string, erforderlich) — Die Anspruchs-ID
-
- Versicherungs-API___Calculate_Premium
-
Versicherungsprämie berechnen.
Parameter:
-
coverageType(Zeichenfolge, erforderlich) — Art der Deckung -
coverageAmount(Zahl, erforderlich) — Deckungsbetrag -
riskFactors(Objekt, fakultativ) — Faktoren der Risikobewertung
-
Autorisierungsrichtlinien
Die folgenden Richtlinien veranschaulichen die verschiedenen Sprachfunktionen und Autorisierungsmuster von Cedar. Jede Richtlinie enthält eine Beschreibung in natürlicher Sprache, den Cedar-Code und eine ausführliche Erklärung.
Richtlinie 1: Multi-action Genehmigung
Diese Richtlinie zeigt, wie mit einer einzigen Grundsatzerklärung Zugriff auf mehrere miteinander verbundene Aktionen gewährt werden kann.
Natürliche Sprache: Erlaubt allen Schulleitern, die Versicherungspolice und den Anspruchsstatus abzurufen.
Richtlinie aus Zedernholz:
permit( principal is AgentCore::OAuthUser, action in [ AgentCore::Action::"InsuranceAPI___get_policy", AgentCore::Action::"InsuranceAPI___get_claim_status" ], resource == AgentCore::Gateway::"arn:aws:bedrock-agentcore:us-west-2:123456789012:gateway/insurance" );
Erläuterung: Diese Richtlinie zeigt Genehmigungen für mehrere Aktionen, bei denen der in Betreiber in Anspruch genommen wird. Anstatt separate Richtlinien für jeden Lesevorgang zu schreiben, gewährt eine einzige Richtlinie Zugriff auf mehrere verwandte Aktionen. Dies ist nützlich, um ähnliche Vorgänge zu gruppieren, für die dieselben Autorisierungsanforderungen gelten.
Richtlinie 2: Autorisierung Scope-based
Diese Richtlinie zeigt, wie OAuth-Bereiche verwendet werden, um den Zugriff auf bestimmte Operationen zu kontrollieren.
Natürliche Sprache: Ermöglicht es Auftraggebern, deren Geltungsbereich „insurance:claim“ enthält, Ansprüche geltend zu machen.
Versicherung aus Zedernholz:
permit( principal is AgentCore::OAuthUser, action == AgentCore::Action::"InsuranceAPI___file_claim", resource == AgentCore::Gateway::"arn:aws:bedrock-agentcore:us-west-2:123456789012:gateway/insurance" ) when { principal.hasTag("scope") && principal.getTag("scope") like "*insurance:claim*" };
Erklärung: Diese Richtlinie demonstriert die Validierung des OAuth-Bereichs mithilfe von Tags. Die hasTag Methode prüft, ob das Tag existiert, und getTag ruft seinen Wert ab. Der like Operator mit Platzhaltern (*) führt einen Musterabgleich durch und ermöglicht so flexible Bereichsformate wie „insurance:claim“, „insurance:claim:write“ oder „admin insurance:claim“.
Role-based Richtlinie 3: Autorisierung mit sofern
Diese Richtlinie zeigt, wie die unless Klausel verwendet wird, um Ausnahmen von Einschränkungen zu erstellen.
Natürliche Sprache: Schulleiter daran hindern, den Versicherungsschutz zu aktualisieren, es sei denn, der Schulleiter hat die Rolle „leitender Sachbearbeiter“ oder „Manager“ inne.
Richtlinie aus Zedernholz:
forbid( principal is AgentCore::OAuthUser, action == AgentCore::Action::"InsuranceAPI___update_coverage", resource == AgentCore::Gateway::"arn:aws:bedrock-agentcore:us-west-2:123456789012:gateway/insurance" ) unless { principal.hasTag("role") && (principal.getTag("role") == "senior-adjuster" || principal.getTag("role") == "manager") };
Erklärung: Diese Richtlinie veranschaulicht die unless Klausel, die die Bedingungslogik umkehrt. Das Verbot gilt, es sei denn, der Benutzer hat eine der angegebenen Rollen. Dies ist nützlich, um Ausnahmen von Einschränkungen zu erstellen. Die Richtlinie zeigt auch die OR-Logik zur Überprüfung mehrerer akzeptabler Werte.
Richtlinie 4: Gleichheit von Zeichenketten mit OR-Logik
Diese Richtlinie zeigt, wie Eingabeparameter validiert und die OR-Logik für mehrere akzeptable Werte verwendet werden.
Natürliche Sprache: Ermöglicht es den Auftraggebern, Ansprüche geltend zu machen, wenn es sich bei der Schadensart um Gesundheit, Eigentum oder Auto handelt.
Richtlinie für Zedernholz:
permit( principal is AgentCore::OAuthUser, action == AgentCore::Action::"InsuranceAPI___file_claim", resource == AgentCore::Gateway::"arn:aws:bedrock-agentcore:us-west-2:123456789012:gateway/insurance" ) when { context.input has claimType && (context.input.claimType == "health" || context.input.claimType == "property" || context.input.claimType == "auto") };
Erklärung: Diese Richtlinie demonstriert den Zugriff auf Werkzeugeingabeparameter über die OR-Logik context.input und die Gleichheitsprüfung von Zeichenketten. Der has Operator überprüft zunächst, ob das Feld vorhanden ist, bevor er darauf zugreift. Dadurch werden Fehler vermieden, wenn optionale Felder fehlen.
Richtlinie 5: Überprüfung der Existenz eines Felds
Diese Richtlinie zeigt, wie Geschäftsregeln durchgesetzt werden können, indem optionale Felder vorgeschrieben werden.
Natürliche Sprache: Verhindern Sie die Einreichung von Ansprüchen durch Auftraggeber, sofern keine Beschreibung angegeben wird.
Richtlinie für Zedernholz:
forbid( principal is AgentCore::OAuthUser, action == AgentCore::Action::"InsuranceAPI___file_claim", resource == AgentCore::Gateway::"arn:aws:bedrock-agentcore:us-west-2:123456789012:gateway/insurance" ) unless { context.input has description };
Erklärung: Diese Richtlinie zeigt, wie Pflichtfelder für optionale Parameter durchgesetzt werden. Das Beschreibungsfeld ist im Toolschema optional, aber diese Richtlinie macht es obligatorisch, da Anfragen, die es nicht enthalten, verboten werden. Dies zeigt, wie Richtlinien Geschäftsregeln hinzufügen können, die über die Schemavalidierung hinausgehen.
Richtlinie 6: Username-based Autorisierung
Diese Richtlinie zeigt, wie der Zugriff auf der Grundlage bestimmter Benutzeridentitäten gewährt wird.
Natürliche Sprache: Erlaube Schulleitern mit dem Benutzernamen „Clare“, den Versicherungsschutz zu aktualisieren.
Richtlinie für Zedernholz:
permit( principal is AgentCore::OAuthUser, action == AgentCore::Action::"InsuranceAPI___update_coverage", resource == AgentCore::Gateway::"arn:aws:bedrock-agentcore:us-west-2:123456789012:gateway/insurance" ) when { principal.hasTag("username") && principal.getTag("username") == "Clare" };
Erklärung: Diese Richtlinie demonstriert die benutzernamenbasierte Autorisierung unter Verwendung eines exakten Zeichenkettenabgleichs. In Kombination mit Richtlinie 3 entsteht dadurch eine zweiteilige Autorisierung: Benutzer müssen den Benutzernamen „insurance-agent“ haben UND die Rolle „senior-adjuster“ oder „manager“ haben, um den Versicherungsschutz zu aktualisieren.
Richtlinie 7: Musterabgleich mit ähnlichem
Diese Richtlinie demonstriert einen flexiblen Musterabgleich unter Verwendung von Platzhaltern für die kategoriebasierte Zugriffskontrolle.
Natürliche Sprache: Ermöglicht es den Schulleitern, die Prämie zu berechnen, wenn die Deckungsart „Auto“ enthält.
Versicherung aus Zedernholz:
permit( principal is AgentCore::OAuthUser, action == AgentCore::Action::"InsuranceAPI___calculate_premium", resource == AgentCore::Gateway::"arn:aws:bedrock-agentcore:us-west-2:123456789012:gateway/insurance" ) when { context.input has coverageType && context.input.coverageType like "*auto*" };
Erklärung: Diese Richtlinie demonstriert einen flexiblen Musterabgleich mit dem like Operator. Der Platzhalter * steht für alle Zeichen, sodass „auto“, „auto-liability“, „comprehensive auto“ oder „auto-collision“ alle übereinstimmen würden. Dies ist nützlich, wenn Sie einer Kategorie von Werten entsprechen möchten und nicht exakte Zeichenketten.
Richtlinie 8: Kombinierte Bedingungen mit UND
Diese Richtlinie zeigt, wie mehrere Bedingungen kombiniert werden können, um komplexe Autorisierungsregeln zu erstellen.
Natürliche Sprache: Ermöglicht es den Auftraggebern, den Versicherungsschutz zu aktualisieren, wenn die Versicherungsart „Haftung“ oder „Kollision“ lautet und ein neuer Grenzwert festgelegt wurde.
Versicherung aus Zedernholz:
permit( principal is AgentCore::OAuthUser, action == AgentCore::Action::"InsuranceAPI___update_coverage", resource == AgentCore::Gateway::"arn:aws:bedrock-agentcore:us-west-2:123456789012:gateway/insurance" ) when { context.input has coverageType && context.input has newLimit && (context.input.coverageType == "liability" || context.input.coverageType == "collision") };
Erklärung: Diese Richtlinie demonstriert die Kombination mehrerer Bedingungen mit der UND-Logik. Alle drei Bedingungen müssen erfüllt sein: CoverageType muss existieren, NewLimit muss existieren und CoverageType muss entweder „Haftung“ oder „Kollision“ sein. Dies funktioniert mit Richtlinie 6, um eine mehrstufige Autorisierung zu schaffen: wer kann aktualisieren (Richtlinie 6) und was kann aktualisiert werden (Richtlinie 8).
Die Autorisierungssemantik verstehen
Diese Richtlinien veranschaulichen die wichtige Semantik der Cedar-Autorisierung:
Standardmäßige Ablehnung
Wenn keine Richtlinie eine Aktion ausdrücklich zulässt, wird sie verweigert. Beispielsweise kann ein Benutzer ohne den Geltungsbereich „Versicherung:Anspruch“ keine Ansprüche geltend machen, obwohl dies in keiner Police ausdrücklich verboten ist.
Gewinne verbieten
Wenn eine der verbotenen Richtlinien zutrifft, wird die Anfrage abgelehnt, auch wenn die Genehmigungsrichtlinien ebenfalls übereinstimmen. Richtlinie 5 (Verbot ohne Beschreibung) hat Vorrang vor Richtlinie 2 (Genehmigung mit Geltungsbereich), wenn eine Beschreibung fehlt.
Bündelung von Richtlinien
Für dieselbe Anfrage können mehrere Richtlinien gelten:
-
Police 6 ermöglicht es dem Versicherungsvertreter, den Versicherungsschutz zu aktualisieren
-
Richtlinie 3 verbietet Aktualisierungen, sofern der Benutzer nicht die Rolle eines leitenden Sachbearbeiters oder eines Managers innehat
-
Richtlinie 8 erlaubt Aktualisierungen nur für Haftungs- oder Kollisionsarten
Damit eine Anfrage erfolgreich ist, muss sie alle drei Kriterien erfüllen: Versicherungsvertreter sein (Police 6), die Rolle eines leitenden Sachbearbeiters oder Managers innehaben (Police 3) und Haftung oder Kollision aktualisieren (Police 8).
Testszenarien
Die folgenden Szenarien zeigen, wie die Policen in der Praxis zusammenarbeiten:
- Szenario 1: Richtlinie zur Anzeige durch reguläre Benutzer
-
Benutzer: username="john“, scope="insurance:view“
Aktion: get_policy
Erwartet: ALLOW (Richtlinie 1)
- Szenario 2: Benutzer reicht gesundheitsbezogene Angaben mit Beschreibung ein
-
Benutzer: username="jane“, scope="insurance:claim“
Aktion: file_claim mit claimType="Health“, description="Krankheitskosten“
Erwartet: ZULASSEN (Richtlinie 2, Richtlinie 4, Richtlinie 5 verbietet nicht)
- Szenario 3: Benutzer reicht Anspruch ohne Beschreibung ein
-
Benutzer: username="jane“, scope="insurance:claim“
Aktion: file_claim mit claimType="Health“, keine Beschreibung
Erwartet: DENY (Option 5 verbietet gewinnt)
- Szenario 4: Der Versicherungsvertreter aktualisiert den Versicherungsschutz
-
Benutzer: username="insurance-agent“, role="senior-adjuster“
Aktion: update_coverage mit coverageType="liability“
Erwartet: ZULASSEN (Richtlinie 6, Richtlinie 3 verbietet nicht, Richtlinie 8)
- Szenario 5: Versicherungsvertreter ohne leitende Rolle
-
Benutzer: username="insurance-agent“, role="agent“
Aktion: update_coverage mit coverageType="liability“
Erwartet: DENY (Option 3 verbietet Gewinne)
- Szenario 6: Prämienberechnung für die auto Deckung
-
Benutzer: username="anyone“, scope="any“
Aktion: calculate_premium mit coverageType="auto-liability“
Erwartet: ALLOW (Richtlinie 7, Muster entspricht „auto“)
IAM-based Beispiele für Autorisierungen
Wenn Ihr AgentCore Gateway die AWS_IAM-Authentifizierung anstelle von OAuth verwendet, wird der Principal in den Cedar-Richtlinien wie folgt dargestellt. AgentCore::IamEntity Für Anrufer, die sich über angenommene Rollen authentifizieren, verwendet die Cedar-Entitäts-ID das Formatarn:aws:sts::<account>:assumed-role/<role-name>, wodurch ein stabiler Abgleich und Musterabgleich ermöglicht wird. principal == principal.id
Grundlegende IAM-Entitätsgenehmigung
Diese Richtlinie ermöglicht es jedem IAM-authenticated Anrufer, ein bestimmtes Tool zu verwenden:
permit( principal is AgentCore::IamEntity, action == AgentCore::Action::"OrderAPI___get_order", resource == AgentCore::Gateway::"arn:aws:bedrock-agentcore:us-west-2:123456789012:gateway/order-gateway" );
Erklärung: Dies ist die einfachste Form der IAM-Richtlinie. Sie ermöglicht jedem über AWS_IAM authentifizierten Anrufer, das Tool get_order aufzurufen. Verwenden Sie diese Option, wenn Sie nur überprüfen müssen, ob Anrufer keine zusätzlichen Einschränkungen haben. IAM-authenticated
Role-based Einschränkung mit exakter Hauptübereinstimmung
Beschränken Sie den Toolzugriff auf Anrufer, die eine bestimmte IAM-Rolle verwenden, indem Sie: principal ==
permit( principal == AgentCore::IamEntity::"arn:aws:sts::111122223333:assumed-role/MyServiceRole", action == AgentCore::Action::"OrderAPI___process_order", resource == AgentCore::Gateway::"arn:aws:bedrock-agentcore:us-west-2:123456789012:gateway/order-gateway" );
Erklärung: Die Cedar-Entitäts-ID für angenommene Rollen lautet. arn:aws:sts::<account>:assumed-role/<role-name> Dies ermöglicht einen stabilen principal == Abgleich unabhängig vom Sitzungsnamen, der bei der Authentifizierung verwendet wurde.
Role-based Einschränkung mit Mustervergleich
Sie können auch principal.id like für umfassendere Übereinstimmungsmuster Folgendes verwenden:
permit( principal is AgentCore::IamEntity, action == AgentCore::Action::"OrderAPI___process_order", resource == AgentCore::Gateway::"arn:aws:bedrock-agentcore:us-west-2:123456789012:gateway/order-gateway" ) when { principal.id like "arn:aws:sts::111122223333:assumed-role/MyServiceRole" };
Erklärung: Dadurch wird das gleiche Ergebnis erzielt wie, es wird principal == jedoch eine when Klausel verwendet. Der Musterabgleich ist nützlich, wenn Sie einen umfassenderen Abgleich benötigen, z. B. den Abgleich mit einer beliebigen Rolle in einem Konto (principal.id like "arn:aws:sts::111122223333:assumed-role/*").
Account-based Einschränkung
Beschränken Sie den Zugriff auf das Tool auf Anrufer von bestimmten AWS Konten aus:
permit( principal is AgentCore::IamEntity, action == AgentCore::Action::"OrderAPI___process_order", resource == AgentCore::Gateway::"arn:aws:bedrock-agentcore:us-west-2:123456789012:gateway/order-gateway" ) when { principal.id like "*:111122223333:*" };
Erklärung: Das Muster *:111122223333: * entspricht jedem ARN, der diese Konto-ID enthält. Dadurch wird der Zugriff nur auf Anrufer vom angegebenen Konto aus beschränkt. AWS
Multi-agent Verband
Wenn mehrere Agenten mit unterschiedlichen IAM-Rollen auf dasselbe Gateway zugreifen, erstellen Sie separate Richtlinien, um zu steuern, welche Tools jeder Agent verwenden kann:
// Agent A can only read orders permit( principal == AgentCore::IamEntity::"arn:aws:sts::111122223333:assumed-role/AgentA-Role", action == AgentCore::Action::"OrderAPI___get_order", resource == AgentCore::Gateway::"arn:aws:bedrock-agentcore:us-west-2:123456789012:gateway/order-gateway" ); // Agent B can read and process orders permit( principal == AgentCore::IamEntity::"arn:aws:sts::111122223333:assumed-role/AgentB-Role", action in [ AgentCore::Action::"OrderAPI___get_order", AgentCore::Action::"OrderAPI___process_order" ], resource == AgentCore::Gateway::"arn:aws:bedrock-agentcore:us-west-2:123456789012:gateway/order-gateway" );
Erklärung: Dieses Muster ist für Architekturen mit mehreren Agenten nützlich, bei denen verschiedene Agenten unterschiedliche IAM-Rollen haben und unterschiedliche Ebenen des Toolzugriffs haben sollten. Jede Richtlinie verwendet die principal == Entitäts-ID der jeweiligen Rolle. Die tools/list Antwort für jeden Agenten umfasst nur die Tools, zu deren Verwendung er berechtigt ist.
IAM mit Eingabevalidierung
Kombinieren Sie den IAM-Prinzipalabgleich mit der Validierung der Tool-Eingaben:
permit( principal == AgentCore::IamEntity::"arn:aws:sts::111122223333:assumed-role/RefundProcessorRole", action == AgentCore::Action::"RefundAPI___process_refund", resource == AgentCore::Gateway::"arn:aws:bedrock-agentcore:us-west-2:123456789012:gateway/refund-gateway" ) when { context.input has amount && context.input.amount < 1000 };
Erklärung: Diese Richtlinie kombiniert den exakten Prinzipalabgleich mit der Eingabevalidierung. Rückerstattungen können nur RefundProcessorRole von Anrufern bearbeitet werden, die von dem angegebenen Konto ausgehen, und nur, wenn der Rückerstattungsbetrag unter 1000$ liegt.
Bestimmte Konten verbieten
Sperren Sie Anrufern von bestimmten AWS Konten den Zugriff auf vertrauliche Tools:
forbid( principal is AgentCore::IamEntity, action == AgentCore::Action::"AdminAPI___delete_resource", resource == AgentCore::Gateway::"arn:aws:bedrock-agentcore:us-west-2:123456789012:gateway/admin-gateway" ) when { principal.id like "*:444455556666:*" };
Erklärung: Diese Verbotsrichtlinie verhindert, dass alle Anrufer über ein Drittanbieter-Konto (444455556666) administrative Löschungen vornehmen. Aufgrund der Semantik, die Gewinne verbieten, hat dies Vorrang vor allen Genehmigungsrichtlinien.
Verbieten Sie bestimmte Rollen bei sensiblen Vorgängen
Sperren Sie Anrufer, die nur Leserollen verwenden, an der Ausführung von Schreibvorgängen:
forbid( principal == AgentCore::IamEntity::"arn:aws:sts::111122223333:assumed-role/ReadOnlyAgentRole", action in [ AgentCore::Action::"OrderAPI___process_order", AgentCore::Action::"OrderAPI___cancel_order" ], resource == AgentCore::Gateway::"arn:aws:bedrock-agentcore:us-west-2:123456789012:gateway/order-gateway" );
Erklärung: Diese Verbotsrichtlinie verhindert, dass Anrufer, die die verwenden, Schreibvorgänge ausführen, unabhängig ReadOnlyAgentRole von Genehmigungsrichtlinien, die sie andernfalls zulassen könnten.