Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.
Políticas centradas en la acción y los recursos
Las políticas de esta sección se basan en lo que se denomina (qué acción, en qué puerta de enlace, con qué valores de entrada) y no en función de quién llama. No determinan qué directores pueden tomar la medida; cualquier persona que llame a la puerta de enlace autentique está incluida en el ámbito de aplicación.
Para conocer las reglas basadas en la identidad de la persona que llama, consulte las políticas. Principal-scoped En la sección de políticas combinadas, al final, se muestran los dos tipos de políticas que funcionan en conjunto.
Cada ejemplo autoriza la puerta de enlace descrita en la configuración de recursos, por ejemplo. Estas políticas utilizan únicamente construcciones que son válidas tanto en Dogwood como en Cedar.
Requisitos para la acción y el alcance de los recursos
Se aplican dos requisitos a todas las políticas de esta página, y las políticas que infrinjan alguno de ellos se rechazarán al crearlas.
El alcance de la acción y el alcance del recurso deben coincidir. El formulario de recursos que escribas dependerá de si has nombrado acciones específicas:
| Si el alcance de la acción es | El alcance del recurso debe ser |
|---|---|
|
Una o más acciones específicas, |
Una puerta de enlace específica: |
|
Sin restricciones: una simple |
Una prueba de tipo: |
El recurso nunca puede dejarse sin restricciones. Se rechaza una barra resourcea wildcard resource was
detected, sea cual sea el ámbito de acción que haya utilizado.
Por lo tanto, nombrar una acción específica significa conocer el ARN de la puerta de enlace, que solo se tiene una vez que la puerta de enlace existe. Para obtener más información, consulte Requisitos de especificidad de los recursos.
Dónde funcionan los comodines
*significa cosas diferentes en diferentes partes de una política y no se acepta en todas partes.
No en el nombre de una acción. Cedar no tiene ningún comodín para los nombres de las acciones, por lo que no AgentCore::Action::"InsuranceAPI___get*" es válido. Haz una lista de las acciones o aplica la política a todo el objetivo con ellasaction in AgentCore::Action::"<TargetName>", de forma que también recojas las herramientas que se añadan a ese objetivo más adelante. action in [ … ] Para obtener más información, consulta Múltiples acciones.
No está en un recurso. Se rechaza resource un desnudo. Utilice un ARN de puerta de enlace específico o la prueba de tiporesource is AgentCore::Gateway, como se describe en la sección anterior.
Sí, en una comparación de cadenas. Dentro de una condición, like toma un patrón que * coincide con cualquier serie de caracteres; este es el único lugar donde se aplica un comodín:
context.input.coverageType like "auto*"
Fija el patrón donde puedas: auto* coincide con los valores *auto* que comienzan porauto, pero también coincidensemi-auto-salvage.
Selección de acciones
Permite realizar varias acciones a la vez
Intención: permitir leer los detalles del contrato y el estado de la reclamación.
Al agrupar las operaciones de lectura relacionadas se action in [ … ] evita una política por herramienta. Cada acción se nombra de forma explícita porque los nombres de las acciones no utilizan ningún comodín (consulte Dónde funcionan los comodines).
Le recomendamos que se centre en el objetivo cuando desee disponer de todo el conjunto de herramientas. La redacción action in AgentCore::Action::"<TargetName>" cubre todas las herramientas que expone el objetivo, incluidas las que se añaden posteriormente, por lo que no es necesario modificar la política cada vez que el objetivo obtiene una herramienta. La desventaja es que una política con un alcance objetivo no puede imponer una condición a la entrada de herramientas, ya que la entrada varía según la herramienta. Para obtener más información, consulte Acciones múltiples.
permit( principal, action in [ AgentCore::Action::"InsuranceAPI___get_contract", AgentCore::Action::"InsuranceAPI___get_claim_status" ], resource == AgentCore::Gateway::"arn:aws:bedrock-agentcore:us-west-2:123456789012:gateway/insurance-gw-a1b2c3d4e5" );
Permitir la invocación de un objetivo en tiempo de ejecución
Intención: permitir la invocación del asistente de reclamaciones.
Un objetivo en tiempo de AgentCore ejecución se autoriza como una acción única, denominada así por el objetivo y el método y la ruta con los que se invoca. No se trata de una acción por herramienta que el agente pueda utilizar internamente. Para un objetivo de tiempo de ejecución, esa ruta es siempre/invocations. Las herramientas que el agente utilice más allá de ese límite están fuera del alcance de esta política, por lo que debe controlarlas desde su propia puerta de enlace.
permit( principal, action == AgentCore::Action::"ClaimsAgent___POST:/invocations", resource == AgentCore::Gateway::"arn:aws:bedrock-agentcore:us-west-2:123456789012:gateway/insurance-gw-a1b2c3d4e5" );
Permita las solicitudes de inferencia en todas las rutas
Intención: permitir las tres API de inferencia que expone la puerta de enlace.
Cada objetivo de inferencia es una acción y una puerta de enlace tiene un objetivo por forma de API, por lo que una política debe nombrar todas las rutas que desee permitir. Si se nombra solo una, se deniegan las demás o, en el caso de unaforbid, quedan excluidas.
permit( principal, action in [ AgentCore::Action::"ClaimsChat___POST:/v1/chat/completions", AgentCore::Action::"ClaimsResponses___POST:/v1/responses", AgentCore::Action::"ClaimsMessages___POST:/v1/messages" ], resource == AgentCore::Gateway::"arn:aws:bedrock-agentcore:us-west-2:123456789012:gateway/insurance-gw-a1b2c3d4e5" );
Restrinja el modelo que se puede invocar
Intención: permitir que las conversaciones se completen únicamente contra una familia modelo aprobada.
modeles una cadena escalar en cada envolvente de inferencia, por lo que una condición normal la lee directamente. Esto funciona de la misma manera en Dogwood, porque Dogwood acepta todas las condiciones de Cedar.
permit( principal, action == AgentCore::Action::"ClaimsChat___POST:/v1/chat/completions", resource == AgentCore::Gateway::"arn:aws:bedrock-agentcore:us-west-2:123456789012:gateway/insurance-gw-a1b2c3d4e5" ) when { context.input.model like "openai.gpt-oss-*" };
El model valor contiene tanto el proveedor como el modelo en el formulario. <provider>.<model> Combínelo exactamente para fijar un modelo, como en"openai.gpt-oss-120b-1:0". Fije un like patrón en el prefijo del proveedor para permitir solo los modelos de ese proveedor, como enlike "openai.*". Repita la política para ClaimsResponses y ClaimsMessages con sus propios valores aprobados.
importante
Un código Cedar no puede leer la conversación en sí misma; para ello, utilice una barandilla.
Las condiciones de un objetivo de inferencia solo llegan a los miembros escalares del cuerpo de la solicitud, como o. model max_tokens No pueden alcanzar el texto del mensaje. context.input.messageses unSet<record>, y ningún operador de Dogwood o Cedar lee una cadena de texto de una de ellas. Los operadores de conjunto, como los que isEmpty se aplican al propio conjunto. Sin embargo, ni Cedar ni Dogwood tienen una sintaxis de proyección matricial para las cadenas que contiene.
Para actuar de acuerdo con lo que realmente se dijo, escriba una barrera cuya ruta de datos sea un JSONPath en la matriz de mensajes. Para ver una política que puedas copiar para cada API de inferencia, consulta Cómo llegar al texto de las matrices con un JSONPath.
Condiciones de entrada de la herramienta
context.inputcontiene los parámetros de la llamada que se está autorizando. En el caso de una herramienta MCP, contiene los argumentos de la herramienta; en el caso de un tiempo de ejecución o un objetivo de inferencia, contiene el cuerpo de la solicitud. Los operadores disponibles en un parámetro dependen de su tipo (consulte Tipos de parámetros en condiciones).
Igualdad de cadena
Intención: Permitir la presentación de una reclamación solo para los tipos de reclamaciones que respalde la empresa.
permit( principal, action == AgentCore::Action::"InsuranceAPI___file_claim", resource == AgentCore::Gateway::"arn:aws:bedrock-agentcore:us-west-2:123456789012:gateway/insurance-gw-a1b2c3d4e5" ) when { (context.input.claimType == "health" || context.input.claimType == "property" || context.input.claimType == "auto") };
Pertenencia a conjuntos
Intención: Exprese la misma regla en relación con una lista de valores aceptados.
Un conjunto literal con .contains() se lee mejor que una cadena de || comparaciones a medida que la lista crece, y las dos formas son equivalentes. Fíjate en la dirección: el conjunto es el receptor y el valor es el argumento.
permit( principal, action == AgentCore::Action::"InsuranceAPI___file_claim", resource == AgentCore::Gateway::"arn:aws:bedrock-agentcore:us-west-2:123456789012:gateway/insurance-gw-a1b2c3d4e5" ) when { ["health", "property", "auto"].contains(context.input.claimType) };
Coincidencia de patrones
Intención: permitir el cálculo de las primas para cualquier tipo de cobertura automotriz.
En un like patrón * coincide con cualquier serie de caracteres, por lo tanto autoauto-liability, y auto-collision todos coinciden. Este es el único lugar de una política en el que se aplica un comodín, no en los nombres de las acciones o los recursos. Para obtener más información, consulte Dónde funcionan los comodines.
permit( principal, action == AgentCore::Action::"InsuranceAPI___calculate_premium", resource == AgentCore::Gateway::"arn:aws:bedrock-agentcore:us-west-2:123456789012:gateway/insurance-gw-a1b2c3d4e5" ) when { context.input.coverageType like "auto*" };
Comparación de enteros
Intención: Permitir la presentación de una reclamación únicamente contra un plazo de la póliza de al menos doce meses.
policyTermMonthsestá integer en el esquema de la herramienta, por lo que es un Cedar Long y los operadores ordenados <⇐,>, y >= se aplican directamente.
permit( principal, action == AgentCore::Action::"InsuranceAPI___file_claim", resource == AgentCore::Gateway::"arn:aws:bedrock-agentcore:us-west-2:123456789012:gateway/insurance-gw-a1b2c3d4e5" ) when { context.input.policyTermMonths >= 12 };
Comparación decimal
Intención: Permitir que se presente una reclamación solo por importes inferiores a 1000.
permit( principal, action == AgentCore::Action::"InsuranceAPI___file_claim", resource == AgentCore::Gateway::"arn:aws:bedrock-agentcore:us-west-2:123456789012:gateway/insurance-gw-a1b2c3d4e5" ) when { context.input.amount.lessThan(decimal("1000.00")) };
importante
Antes de escribir una comparación en un parámetro numérico, confirme qué operadores admite su tipo. amountestá number en el esquema de la herramienta, por lo que es un Cedardecimal: compárelo con lessThanlessThanOrEqual,greaterThan, o greaterThanOrEqual con un decimal("…") literal entre comillas. Un integer parámetro es un Cedar Long y, en su lugar, utiliza los > operadores < y ordinarios.
Para obtener más información sobre los operadores que acepta cada tipo numérico, consulte Parámetros numéricos, que también describe la restricción adicional dentro de un temporal { } bloque y cómo se notifica el error de tipo.
Condición booleana
Intención: permite que se registre una aprobación solo cuando sea afirmativa.
Un boolean parámetro se utiliza directamente como condición. Para requerir lo contrario, escriba!context.input.approved. Los operadores ordenados no se aplican; no context.input.approved > true se puede crear con ellosexpected datetime, or duration, or Long.
permit( principal, action == AgentCore::Action::"InsuranceAPI___approve_claim", resource == AgentCore::Gateway::"arn:aws:bedrock-agentcore:us-west-2:123456789012:gateway/insurance-gw-a1b2c3d4e5" ) when { context.input.approved };
Miembros de objetos anidados
Intención: permitir el cálculo de las primas solo para las pólizas sin reclamaciones previas en una región admitida.
Un object parámetro se convierte en un registro de Cedar, es decir, un conjunto de miembros nombrados al que se llega con un punto. Pruebe cada nivel has antes de leerlo: dado que riskFactors es opcional, la omisión de cualquiera de los dos valores impide la creación de políticas. unable to guarantee safety of access to optional attribute Los registros tienen una profundidad máxima de 64 niveles; los niveles más profundos context.input se rechazan en tiempo de ejecución con Cannot determine input entity type ellos.
permit( principal, action == AgentCore::Action::"InsuranceAPI___calculate_premium", resource == AgentCore::Gateway::"arn:aws:bedrock-agentcore:us-west-2:123456789012:gateway/insurance-gw-a1b2c3d4e5" ) when { context.input has riskFactors && context.input.riskFactors has priorClaims && context.input.riskFactors.priorClaims == 0 && context.input.riskFactors has region && ["us-west", "us-east"].contains(context.input.riskFactors.region) };
Requiere un parámetro opcional
Intención: Exigir una descripción en cada reclamación presentada, aunque el esquema de la herramienta lo haga opcional.
Un parámetro opcional es aquel que el esquema de la herramienta no indica como obligatorio, por lo que la persona que llama puede omitirlo. En las herramientas MCP de la pasarela de referencia, activar file_claim y description riskFactors activar calculate_premium son los únicos parámetros opcionales; el objetivo del tiempo de ejecución también es opcional. sessionAttributes
Hay dos maneras de escribir esto y se comportan de manera diferente. Recomendamos el forbid formulario que se muestra en segundo lugar, ya que es válido independientemente de las demás políticas que se apliquen. El permit formulario es lo primero porque es el que buscan los lectores y no tiene esa propiedad. A permit concede el acceso cuando el campo está presente:
permit( principal, action == AgentCore::Action::"InsuranceAPI___file_claim", resource == AgentCore::Gateway::"arn:aws:bedrock-agentcore:us-west-2:123456789012:gateway/insurance-gw-a1b2c3d4e5" ) when { context.input has description };
A forbid hace que el campo sea obligatorio sin importar qué otras políticas se apliquen:
forbid( principal, action == AgentCore::Action::"InsuranceAPI___file_claim", resource == AgentCore::Gateway::"arn:aws:bedrock-agentcore:us-west-2:123456789012:gateway/insurance-gw-a1b2c3d4e5" ) unless { context.input has description };
Prefiera el forbid formulario para una regla empresarial que desee mantener incondicionalmente, ya que ningún otro formulario permit puede anularlo.
importante
hases obligatorio para un parámetro opcional, no solo defensivo. La lectura de un atributo opcional sin protegerlo no permite crear una política:
unable to guarantee safety of access to optional attribute `input.riskFactors`
La protección es obligatoria y no consultiva; si se omite, no se crea la política. Un parámetro obligatorio no necesita protección, por lo que solo has es necesario cuando el esquema de la herramienta marca el campo como opcional.
Patrones operativos
Estas políticas son herramientas para ejecutar una puerta de enlace y no expresiones de una regla empresarial. Como son amplias, agréguelas deliberadamente y elimínelas cuando haya pasado la situación que las exigía.
Detenga todas las llamadas a herramientas
Intención: detener todas las acciones en la puerta de enlace durante un incidente.
Esto deniega todas las solicitudes a todas las pasarelas conectadas al motor de políticas y anula todas permit las políticas. Su adición surte efecto sin cambiar ninguna otra política y, al eliminarla, se restablece el funcionamiento normal.
forbid( principal, action, resource is AgentCore::Gateway );
aviso
Compruebe el modo de aplicación del motor antes de confiar en esta política. Si la puerta de enlace lo policyEngineConfiguration.mode esLOG_ONLY, la decisión se registra pero no se aplica y todas las llamadas a la herramienta se realizan correctamente. Para obtener más información, consulte Modos de aplicación de políticas.
Deshabilite una herramienta
Intención: denegar el acceso a una sola herramienta sin afectar al resto de la puerta de enlace.
La herramienta desaparece tools/list para todas las personas que llaman mientras esté en vigor esta política, por lo que los agentes dejan de intentarlo en lugar de llamarla y se les deniega.
forbid( principal, action == AgentCore::Action::"InsuranceAPI___disburse_payment", resource == AgentCore::Gateway::"arn:aws:bedrock-agentcore:us-west-2:123456789012:gateway/insurance-gw-a1b2c3d4e5" );
Políticas combinadas
Las dos secciones anteriores separan las políticas en función de sus coincidencias. A menudo, una regla restringe ambas. Estos ejemplos combinan una condición principal con una condición de acción y entrada en una política.
Limite el título de un puesto y su entrada de forma conjunta
Intención: permitir las actualizaciones de cobertura solo para los tipos de cobertura admitidos y solo cuando se establezca un nuevo límite que se mantenga dentro de los límites establecidos por el cargo de la persona que llama.
Una póliza puede limitar el capital y la entrada a la vez, y hacerlo en una sola póliza permit es lo que hace que las condiciones sean conjuntivas. Si un parámetro es opcional, has pruébelo antes de la lectura que protege.
permit( principal is AgentCore::OAuthUser, action == AgentCore::Action::"InsuranceAPI___update_coverage", resource == AgentCore::Gateway::"arn:aws:bedrock-agentcore:us-west-2:123456789012:gateway/insurance-gw-a1b2c3d4e5" ) when { principal.hasTag("role") && principal.getTag("role") == "senior-adjuster" && ["liability", "collision"].contains(context.input.coverageType) && context.input.newLimit.lessThanOrEqual(decimal("50000.00")) };
Asigne límites diferentes a dos funciones en una sola herramienta
Propósito: permitir que los ajustadores desembolsen pequeñas cantidades y los gerentes desembolsen grandes cantidades.
La autoridad jerárquica requiere una permit por nivel, cada una de las cuales combina el título del puesto con su propio límite. Como las dos pólizas son alternativas, la política del ajustador no limita al gerente. amountCentses uninteger, por lo que utiliza operadores ordenados ordinarios en lugar de decimal métodos.
// Adjusters: up to 1,000.00 permit( principal is AgentCore::OAuthUser, action == AgentCore::Action::"InsuranceAPI___disburse_payment", resource == AgentCore::Gateway::"arn:aws:bedrock-agentcore:us-west-2:123456789012:gateway/insurance-gw-a1b2c3d4e5" ) when { principal.hasTag("role") && principal.getTag("role") == "adjuster" && context.input.amountCents <= 100000 }; // Managers: up to 25,000.00 permit( principal is AgentCore::OAuthUser, action == AgentCore::Action::"InsuranceAPI___disburse_payment", resource == AgentCore::Gateway::"arn:aws:bedrock-agentcore:us-west-2:123456789012:gateway/insurance-gw-a1b2c3d4e5" ) when { principal.hasTag("role") && principal.getTag("role") == "manager" && context.input.amountCents <= 2500000 };
¿Cómo se combinan estas políticas
Las políticas de un motor se evalúan juntas y el resultado no es la suma de lo que permite cada política. Tres reglas deciden cada solicitud:
- Denegar de forma predeterminada
-
Solo se permite una solicitud si alguna de ellas
permitcoincide con ella. Un motor sin políticas lo niega todo. - Forbid gana
-
Si alguna
forbidcoincide, se deniega la solicitud, incluso cuando una tambiénpermitcoincide. Esto es lo que hace que las llamadas a la herramienta Stop all sean fiables y por eso no se puede anular unaforbid … unlessrestricción añadiendo una.permit - Los permisos no se cruzan
-
Dos
permitpolíticas para la misma acción son alternativas, no requisitos. Si unapermitpermite queupdate_coveragelos gerentes cambien y otra permite cambios de responsabilidad, entonces un gerente puede cambiar cualquier cosa y cualquier persona puede cambiar de responsabilidad. Para exigir ambas condiciones, póngalas en una sola,permitcomo lo hace para restringir el título del puesto y sus entradas juntas, o bien exprese la restricción comoforbid … unless.
Tenga en cuenta que a permit no puede restringir otrapermit. Las tres políticas siguientes se aplican a la update_coverage acción:
-
Prohibirlo a todo el mundo, excepto un conjunto de funciones, lo niega a cualquier persona que no sea un ajustador o gerente sénior.
-
Limitar un puesto de trabajo y su inclusión en conjunto permite a los tasadores sénior cambiar de responsabilidad o colisionar dentro de sus límites.
Se deniega la solicitud de clare un agente que no sea ni un tasador superior ni un directivo: la primera póliza lo permite, pero la segunda lo prohíbe. La tercera póliza permite que un tasador superior eleve el límite de responsabilidad a 40 000, y la segunda no lo prohíbe. Si un tasador sénior cambia un tipo de comprehensive cobertura, se deniega porque no permit cubre ese tipo de cobertura.
Para comparar su razonamiento con el motor implementado antes de aplicarlo, ejecute la solicitud mediante el modo Probar una política en el modo LOG_ONLY, o conecte el motor al LOG_ONLY modo y lea la decisión del registro de políticas.