View a markdown version of this page

Policy di esempio - Amazon Bedrock AgentCore

Policy di esempio

Questa sezione fornisce esempi completi di politiche di autorizzazione Cedar per un sistema di gestione assicurativa. Questi esempi illustrano varie funzionalità del linguaggio Cedar e modelli di autorizzazione che è possibile adattare alle proprie applicazioni.

Strumenti disponibili

L'API Insurance fornisce cinque strumenti per la gestione delle polizze assicurative e dei reclami:

InsuranceAPI___get_policy

Recupera i dettagli della polizza assicurativa.

Parametri:

  • policyId(stringa, obbligatorio) - L'identificatore della polizza

InsuranceAPI___FILE_CLAIM

Presentare un reclamo assicurativo.

Parametri:

  • policyId(stringa, obbligatorio) - L'identificatore della polizza

  • claimType(stringa, obbligatorio) - Tipo di reclamo (ad es. «salute», «proprietà», «auto»)

  • amount(numero, obbligatorio) - Importo della richiesta

  • description(stringa, opzionale) - Descrizione del reclamo

InsuranceAPI___Update_Coverage

Aggiorna la copertura della polizza.

Parametri:

  • policyId(stringa, obbligatorio) - L'identificatore della politica

  • coverageType(stringa, obbligatorio) - Tipo di copertura (ad esempio, «responsabilità», «collisione»)

  • newLimit(numero, obbligatorio) - Nuovo limite di copertura

InsuranceAPI___get_claim_status

Verifica lo stato del reclamo.

Parametri:

  • claimId(stringa, obbligatorio) - L'identificatore del reclamo

InsuranceAPI___CALCOLATE_PREMIUM

Calcola il premio assicurativo.

Parametri:

  • coverageType(stringa, obbligatoria) - Tipo di copertura

  • coverageAmount(numero, richiesto) - Importo della copertura

  • riskFactors(oggetto, opzionale) - Fattori di valutazione del rischio

Policy di autorizzazione

Le seguenti politiche illustrano varie funzionalità e modelli di autorizzazione del linguaggio Cedar. Ogni politica include la descrizione del linguaggio naturale, il codice Cedar e una spiegazione dettagliata.

Politica 1: permesso Multi-action

Questa politica dimostra come concedere l'accesso a più azioni correlate utilizzando un'unica dichiarazione politica.

Linguaggio naturale: consenti a tutti i responsabili di ottenere la polizza e ottenere lo stato del reclamo.

Politica Cedar:

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" );

Spiegazione: questa politica illustra i permessi multiazione che utilizzano l'operatore. in Invece di scrivere policy separate per ogni operazione di lettura, una singola policy garantisce l'accesso a più azioni correlate. Ciò è utile per raggruppare operazioni simili che condividono gli stessi requisiti di autorizzazione.

Politica 2: autorizzazione Scope-based

Questa politica mostra come utilizzare gli ambiti OAuth per controllare l'accesso a operazioni specifiche.

Linguaggio naturale: consenti ai mandanti con ambito contenente «insurance:claim» di presentare reclami.

Politica Cedar:

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*" };

Spiegazione: questa politica dimostra la convalida dell'ambito OAuth utilizzando i tag. Il hasTag metodo verifica se il tag esiste e getTag ne recupera il valore. L'likeoperatore con wildcards (*) esegue il pattern matching, consentendo formati di ambito flessibili come «insurance:claim», «insurance:claim:write» o «admin insurance:claim».

Role-based Politica 3: autorizzazione con a meno che

Questa politica dimostra l'utilizzo della unless clausola per creare eccezioni alle restrizioni.

Linguaggio naturale: impedisce ai responsabili di aggiornare la copertura a meno che il preside non ricopra il ruolo di «aggiustatore senior» o «manager».

Politica Cedar:

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") };

Spiegazione: questa politica illustra la unless clausola, che inverte la logica della condizione. Il divieto si applica a meno che l'utente non abbia uno dei ruoli specificati. Questo è utile per creare eccezioni alle restrizioni. La politica mostra anche la logica OR per il controllo di più valori accettabili.

Politica 4: uguaglianza delle stringhe con logica OR

Questa politica mostra come convalidare i parametri di input e utilizzare la logica OR per più valori accettabili.

Linguaggio naturale: consenti ai mandanti di presentare reclami quando il tipo di reclamo è sanitario, immobiliare o auto.

Politica Cedar:

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") };

Spiegazione: questa politica dimostra l'accesso ai parametri di input dello strumento context.input e i controlli di uguaglianza delle stringhe con la logica OR. L'hasoperatore verifica innanzitutto l'esistenza del campo prima di accedervi, evitando errori quando mancano campi opzionali.

Politica 5: controllo dell'esistenza del campo

Questa politica dimostra come far rispettare le regole aziendali richiedendo campi opzionali.

Linguaggio naturale: impedisce ai mandanti di presentare reclami a meno che non venga fornita una descrizione.

Politica Cedar:

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 };

Spiegazione: questa politica dimostra l'applicazione dei campi obbligatori per i parametri opzionali. Il campo della descrizione è facoltativo nello schema dello strumento, ma questa politica lo rende obbligatorio vietando le richieste che non lo includono. Questo mostra come le politiche possono aggiungere regole aziendali oltre alla convalida dello schema.

Politica 6: autorizzazione Username-based

Questa politica mostra come concedere l'accesso in base a identità utente specifiche.

Linguaggio naturale: consenti ai mandanti con nome utente «Clare» di aggiornare la copertura.

Politica Cedar:

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" };

Spiegazione: questa politica dimostra l'autorizzazione basata sul nome utente utilizzando la corrispondenza esatta delle stringhe. In combinazione con la Policy 3, ciò crea un'autorizzazione in due parti: gli utenti devono avere il nome utente «insurance-agent» E avere il ruolo di «senior-adjuster» o «manager» per aggiornare la copertura.

Politica 7: Pattern matching con like

Questa politica dimostra una corrispondenza flessibile dei modelli utilizzando caratteri jolly per il controllo degli accessi basato sulle categorie.

Linguaggio naturale: consenti ai committenti di calcolare il premio quando il tipo di copertura contiene «auto».

Politica Cedar:

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*" };

Spiegazione: questa politica dimostra un adattamento flessibile dei modelli all'likeoperatore. Il carattere jolly * corrisponde a qualsiasi carattere, quindi «auto», «auto-liability», «comprehensive-auto» o «auto-collision» corrisponderebbero tutti. Ciò è utile quando si desidera abbinare una categoria di valori anziché stringhe esatte.

Politica 8: condizioni combinate con AND

Questa politica mostra come combinare più condizioni per creare regole di autorizzazione complesse.

Linguaggio naturale: consenti ai committenti di aggiornare la copertura quando il tipo di copertura è responsabilità o collisione e viene fornito un nuovo limite.

Politica Cedar:

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") };

Spiegazione: questa politica dimostra la combinazione di più condizioni con la logica AND. Tutte e tre le condizioni devono essere vere: CoverageType deve esistere, newLimit deve esistere e coverageType deve essere «responsabilità» o «collisione». Funziona con la Policy 6 per creare un'autorizzazione a più livelli: chi può aggiornare (Policy 6) e cosa può aggiornare (Policy 8).

Comprensione della semantica delle autorizzazioni

Queste politiche dimostrano la semantica chiave dell'autorizzazione Cedar:

Rifiuto per default

Se nessuna politica consente esplicitamente un'azione, questa viene negata. Ad esempio, un utente senza l'ambito «insurance:claim» non può presentare reclami anche se nessuna politica lo vieta esplicitamente.

Forbid vince

Se una delle politiche di divieto corrisponde, la richiesta viene rifiutata anche se anche le politiche di autorizzazione corrispondono. La Policy 5 (divieto senza descrizione) ha la precedenza sulla Policy 2 (autorizzazione con ambito) quando manca una descrizione.

Stratificazione delle politiche

È possibile applicare più politiche alla stessa richiesta:

  • La polizza 6 consente all'agente assicurativo di aggiornare la copertura

  • La Policy 3 vieta gli aggiornamenti a meno che l'utente non abbia un ruolo di revisore senior o manager

  • La Policy 8 consente gli aggiornamenti solo per tipi di responsabilità o collisione

Affinché una richiesta abbia successo, deve soddisfare tutti e tre i requisiti: essere agente assicurativo (Polizza 6), ricoprire il ruolo di perito o dirigente (Policy 3) e aggiornare la responsabilità in caso di collisione (Policy 8).

Scenario di test

Gli scenari seguenti mostrano come le politiche interagiscono nella pratica:

Scenario 1: politica di visualizzazione regolare da parte degli utenti

Utente: username="john», scope="insurance:view»

Azione: get_policy

Previsto: ALLOW (Policy 1)

Scenario 2: l'utente presenta una dichiarazione sullo stato di salute con descrizione

Utente: username="jane», scope="insurance:claim»

Azione: file_claim con claimType="Health», description="Spese mediche»

Previsto: ALLOW (la Policy 2, la Policy 4, la Policy 5 non vieta)

Scenario 3: l'utente presenta un reclamo senza descrizione

Utente: username="jane», scope="insurance:claim»

Azione: file_claim con claimType="health», nessuna descrizione

Previsto: DENY (la politica 5 vieta le vittorie)

Scenario 4: agente assicurativo che aggiorna la copertura

Utente: username="insurance-agent», role="senior-adjuster»

Azione: update_coverage con coverageType="Liability»

Previsto: ALLOW (Policy 6, Policy 3 non vieta, Policy 8)

Scenario 5: agente assicurativo senza ruolo senior

Utente: username="insurance-agent», role="agent»

Azione: update_coverage con coverageType="Liability»

Previsto: DENY (la politica 3 vieta le vittorie)

Scenario 6: calcolo del premio per la copertura auto

Utente: username="anyone», scope="any»

Azione: calculate_premium con coverageType="Auto-Liability»

Previsto: ALLOW (Policy 7, il pattern corrisponde a «auto»)

IAM-based esempi di autorizzazione

Quando il AgentCore gateway utilizza l'autenticazione AWS_IAM anziché OAuth, il principale nelle politiche Cedar è rappresentato come. AgentCore::IamEntity Per i chiamanti che si autenticano tramite ruoli presunti, l'ID dell'entità Cedar utilizza il formato, che consente la corrispondenza stabile e la corrispondenza dei modelli. arn:aws:sts::<account>:assumed-role/<role-name> principal == principal.id

Permesso di entità IAM di base

Questa politica consente a qualsiasi IAM-authenticated chiamante di utilizzare uno strumento specifico:

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" );

Spiegazione: questa è la forma più semplice di policy IAM. Consente a qualsiasi chiamante autenticato tramite AWS_IAM di chiamare lo strumento get_order. Usalo quando devi solo verificare che i chiamanti siano privi di restrizioni aggiuntive. IAM-authenticated

Role-based restrizione con corrispondenza esatta dei principali

Limita l'accesso allo strumento ai chiamanti che utilizzano un ruolo IAM specifico utilizzando: 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" );

Spiegazione: l'ID dell'entità Cedar per i ruoli presunti è. arn:aws:sts::<account>:assumed-role/<role-name> Ciò consente una principal == corrispondenza stabile indipendentemente dal nome della sessione utilizzato durante l'autenticazione.

Role-based restrizione con pattern matching

Puoi anche usare principal.id like per modelli di corrispondenza più ampi:

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" };

Spiegazione: Ciò ottiene lo stesso risultato principal == ma utilizza una when clausola. Il pattern matching è utile quando è necessaria una corrispondenza più ampia, ad esempio la corrispondenza di qualsiasi ruolo in un account (). principal.id like "arn:aws:sts::111122223333:assumed-role/*"

Account-based restrizione

Limita l'accesso allo strumento ai chiamanti da account specifici AWS :

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:*" };

Spiegazione: Il pattern *:111122223333: * corrisponde a qualsiasi ARN contenente l'ID dell'account. Ciò limita l'accesso ai chiamanti solo dall'account specificato. AWS

Multi-agent federazione

Quando più agenti con ruoli IAM diversi accedono allo stesso gateway, crea policy separate per controllare quali strumenti può utilizzare ciascun agente:

// 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" );

Spiegazione: questo modello è utile per le architetture multi-agente in cui agenti diversi hanno ruoli IAM diversi e dovrebbero avere diversi livelli di accesso agli strumenti. Ogni policy utilizza l'principal ==ID di entità del ruolo specifico. La tools/list risposta per ogni agente include solo gli strumenti che è autorizzato a utilizzare.

IAM con convalida dell'input

Combina la corrispondenza dei principali IAM con la convalida dell'input dello strumento:

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 };

Spiegazione: questa politica combina l'esatta corrispondenza dei principali con la convalida degli input. I rimborsi possono elaborare i rimborsi solo se il chiamante RefundProcessorRole proviene dall'account specificato e solo quando l'importo del rimborso è inferiore a 1000 USD.

Proibisci account specifici

Impedisci ai chiamanti di AWS account specifici di accedere a strumenti sensibili:

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:*" };

Spiegazione: questa politica di divieto impedisce a tutti i chiamanti provenienti da un account di fornitore terzo (444455556666) di eseguire eliminazioni amministrative. A causa della semantica Forbid-Wins, ciò ha la precedenza su qualsiasi politica di autorizzazione.

Proibisci l'accesso a ruoli specifici alle operazioni sensibili

Impedisci ai chiamanti che utilizzano ruoli di sola lettura di eseguire operazioni di scrittura:

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" );

Spiegazione: questa politica di divieto impedisce ai chiamanti che utilizzano il ReadOnlyAgentRole di eseguire operazioni di scrittura, indipendentemente dalle politiche di autorizzazione che potrebbero altrimenti consentirle.