View a markdown version of this page

Ejemplos de políticas - Base amazónica AgentCore

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.

Ejemplos de políticas

Esta sección proporciona ejemplos completos de las políticas de autorización de Cedar para un sistema de administración de seguros. Estos ejemplos muestran varias características del lenguaje Cedar y patrones de autorización que puede adaptar para sus propias aplicaciones.

Herramientas disponibles

La API de seguros proporciona cinco herramientas para gestionar las pólizas y reclamaciones de seguros:

API de seguros___get_policy

Recupera los detalles de la póliza de seguro.

Parámetros:

  • policyId(cadena, obligatoria): el identificador de la póliza

InsuranceAPI___file_claim

Presenta una reclamación de seguro.

Parámetros:

  • policyId(cadena, obligatoria): el identificador de la póliza

  • claimType(cadena, obligatorio): tipo de reclamación (p. ej., «salud», «propiedad», «automóvil»)

  • amount(número, obligatorio): importe de la reclamación

  • description(cadena, opcional): descripción de la reclamación

InsuranceAPI___update_coverage

Actualiza la cobertura de la póliza.

Parámetros:

  • policyId(cadena, obligatoria): el identificador de la póliza

  • coverageType(cadena, obligatorio): tipo de cobertura (p. ej., «responsabilidad», «colisión»)

  • newLimit(número, obligatorio): nuevo límite de cobertura

API de seguro___get_claim_status

Comprueba el estado de la reclamación.

Parámetros:

  • claimId(cadena, obligatoria): el identificador de la reclamación

API de seguro___calculate_premium

Calcule la prima del seguro.

Parámetros:

  • coverageType(cadena, obligatorio): tipo de cobertura

  • coverageAmount(número, obligatorio): importe de la cobertura

  • riskFactors(objeto, opcional): factores de evaluación del riesgo

Políticas de autorización

Las siguientes políticas muestran varias características y patrones de autorización del lenguaje Cedar. Cada política incluye una descripción en lenguaje natural, un código Cedar y una explicación detallada.

Política 1: Multi-action permiso

Esta política demuestra cómo conceder acceso a múltiples acciones relacionadas mediante una única declaración de política.

Lenguaje natural: permita a todos los directores obtener la póliza y conocer el estado de la reclamación.

Política de cedro:

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

Explicación: Esta política demuestra que se permite realizar múltiples acciones utilizando el in operador. En lugar de escribir políticas independientes para cada operación de lectura, una sola política otorga acceso a varias acciones relacionadas. Esto es útil para agrupar operaciones similares que comparten los mismos requisitos de autorización.

Política 2: autorización Scope-based

Esta política muestra cómo usar los ámbitos de OAuth para controlar el acceso a operaciones específicas.

Lenguaje natural: permite a los directores cuyo alcance incluya «seguro:reclamación» presentar reclamaciones.

Política de cedro:

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

Explicación: Esta política demuestra la validación del alcance de OAuth mediante etiquetas. El hasTag método comprueba si la etiqueta existe y getTag recupera su valor. El like operador con caracteres comodín (*) realiza la coincidencia de patrones, lo que permite formatos de alcance flexibles como «insurance:claim», «insurance:claim:write» o «admin insurance:claim».

Role-based Política 3: autorización con, a menos que

Esta política demuestra el uso de la unless cláusula para crear excepciones a las restricciones.

Lenguaje natural: Impida que los directores actualicen la cobertura, a menos que el director desempeñe la función de «ajustador principal» o «gerente».

Política de cedro:

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

Explicación: Esta política muestra la unless cláusula, que invierte la lógica de las condiciones. La prohibición se aplica a menos que el usuario tenga una de las funciones especificadas. Esto es útil para crear excepciones a las restricciones. La política también muestra la lógica OR para comprobar varios valores aceptables.

Política 4: igualdad de cadenas con la lógica OR

Esta política muestra cómo validar los parámetros de entrada y usar la lógica OR para varios valores aceptables.

Lenguaje natural: permita a los directores presentar reclamaciones cuando el tipo de reclamación sea de salud, propiedad o automóvil.

Política de cedro:

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

Explicación: Esta política demuestra cómo acceder a los parámetros de entrada de la herramienta mediante comprobaciones de igualdad de cadenas context.input y cadenas con la lógica OR. El has operador primero verifica la existencia del campo antes de acceder a él, lo que evita errores cuando faltan campos opcionales.

Política 5: comprobación de la existencia del campo

Esta política demuestra cómo hacer cumplir las reglas empresariales exigiendo campos opcionales.

Lenguaje natural: Impida que los directores presenten reclamaciones a menos que se proporcione una descripción.

Política de cedro:

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

Explicación: Esta política demuestra cómo hacer cumplir los campos obligatorios para los parámetros opcionales. El campo de descripción es opcional en el esquema de la herramienta, pero esta política lo hace obligatorio al prohibir las solicitudes que no lo incluyan. Aquí se muestra cómo las políticas pueden añadir reglas empresariales más allá de la validación del esquema.

Política 6: Username-based autorización

Esta política muestra cómo conceder el acceso en función de las identidades de usuario específicas.

Lenguaje natural: permita a los directores con el nombre de usuario «Clare» actualizar la cobertura.

Política de cedro:

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

Explicación: Esta política demuestra la autorización basada en el nombre de usuario mediante la coincidencia exacta de cadenas. En combinación con la póliza 3, esto crea una autorización en dos partes: los usuarios deben tener el nombre de usuario «agente de seguros» Y tener la función de «ajustador sénior» o «administrador» para actualizar la cobertura.

Póliza 7: Coincidencia de patrones con valores similares

Esta política demuestra la flexibilidad de la coincidencia de patrones mediante caracteres comodín para el control de acceso por categorías.

Lenguaje natural: permita a los directores calcular la prima cuando el tipo de cobertura contenga la palabra «automática».

Política de cedro:

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

Explicación: Esta política demuestra una coincidencia flexible de patrones con el like operador. El comodín * coincide con cualquier carácter, por lo que «automático», «responsabilidad automática», «automático integral» o «colisión automática» serían todos iguales. Esto resulta útil cuando se quiere hacer coincidir una categoría de valores en lugar de cadenas exactas.

Política 8: condiciones combinadas con AND

Esta política muestra cómo combinar varias condiciones para crear reglas de autorización complejas.

Lenguaje natural: permita a los directores actualizar la cobertura cuando el tipo de cobertura sea de responsabilidad civil o colisión y se proporcione un nuevo límite.

Política de cedro:

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

Explicación: Esta política demuestra la combinación de varias condiciones con la lógica AND. Las tres condiciones deben cumplirse: CoverageType debe existir, NewLimit debe existir y CoverageType debe ser «responsabilidad» o «colisión». Esto funciona con la Política 6 para crear una autorización escalonada: quién puede actualizar (Política 6) y qué puede actualizar (Política 8).

Comprender la semántica de las autorizaciones

Estas políticas muestran la semántica clave de autorización de Cedar:

Denegación predeterminada

Si ninguna política permite explícitamente una acción, se deniega. Por ejemplo, un usuario que no tenga el alcance «seguro:reclamación» no puede presentar reclamaciones aunque ninguna póliza lo prohíba explícitamente.

Prohibir triunfos

Si alguna de las políticas de prohibición coincide, la solicitud se denegará aunque las políticas de autorización también coincidan. La política 5 (prohibir sin descripción) prevalece sobre la política 2 (permitir con alcance) cuando falta la descripción.

Estratificación de políticas

Se pueden aplicar varias políticas a la misma solicitud:

  • La póliza 6 permite al agente de seguros actualizar la cobertura

  • La política 3 prohíbe las actualizaciones a menos que el usuario tenga un rol de ajustador sénior o gerente

  • La política 8 permite las actualizaciones solo para los tipos de responsabilidad civil o colisión

Para que una solicitud tenga éxito, debe cumplir con los tres requisitos siguientes: ser agente de seguros (póliza 6), tener la función de ajustador sénior o gerente (póliza 3) y actualizar la responsabilidad en caso de colisión (póliza 8).

Escenarios de prueba

Los siguientes escenarios demuestran cómo funcionan juntas las pólizas en la práctica:

Escenario 1: política de visualización habitual de los usuarios

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

Acción: get_policy

Esperado: ALLOW (Política 1)

Escenario 2: El usuario presenta una reclamación de salud con una descripción

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

Acción: file_claim with claimType="Health», description="Gastos médicos»

Previsto: PERMITIR (la política 2, la política 4 y la política 5 no lo prohíben)

Escenario 3: El usuario presenta una reclamación sin descripción

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

Acción: file_claim con claimType="Health», sin descripción

Esperado: DENEGAR (la política 5 prohíbe ganar)

Escenario 4: El agente de seguros actualiza la cobertura

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

Acción: update_coverage con coverageType="Liability»

Previsto: PERMITIR (Política 6, Política 3 no lo prohíbe, Política 8)

Escenario 5: Agente de seguros sin cargo directivo

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

Acción: update_coverage con coverageType="Liability»

Esperado: DENEGAR (la política 3 prohíbe ganar)

Escenario 6: Cálculo de la prima para la cobertura de un automóvil

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

Acción: calculate_premium con coverageType="Responsabilidad automática»

Esperado: PERMITIR (Política 7, el patrón coincide con «automático»)

IAM-based ejemplos de autorización

Cuando su AgentCore Gateway usa la autenticación AWS_IAM en lugar de OAuth, el principal en las políticas de Cedar se representa como. AgentCore::IamEntity En el caso de las personas que llaman mediante funciones asumidas, el identificador de entidad de Cedar utiliza el formatoarn:aws:sts::<account>:assumed-role/<role-name>, lo que permite realizar coincidencias y patrones estables. principal == principal.id

Permiso básico de entidad de IAM

Esta política permite a cualquier IAM-authenticated persona que llame utilizar una herramienta específica:

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

Explicación: Esta es la forma más sencilla de política de IAM. Permite a cualquier persona que llame autenticada mediante AWS_IAM llamar a la herramienta get_order. Úsala cuando solo necesites verificar que las personas que llaman no tienen restricciones adicionales. IAM-authenticated

Role-based restricción con una coincidencia exacta del principal

Restrinja el acceso a la herramienta a las personas que llamen utilizando una función de IAM específica mediante: 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" );

Explicación: El identificador de entidad de Cedar para los roles asumidos es. arn:aws:sts::<account>:assumed-role/<role-name> Esto permite una principal == coincidencia estable independientemente del nombre de sesión utilizado durante la autenticación.

Role-based restricción con la coincidencia de patrones

También se puede utilizar principal.id like para patrones de coincidencia más amplios:

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

Explicación: Con esto se obtiene el mismo resultado que una when cláusulaprincipal ==, pero se utiliza. La coincidencia de patrones es útil cuando necesitas una coincidencia más amplia, como hacer coincidir cualquier rol en una cuenta (principal.id like "arn:aws:sts::111122223333:assumed-role/*").

Account-based restricción

Restrinja el acceso a la herramienta a las personas que llaman desde AWS cuentas específicas:

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

Explicación: El patrón *:111122223333: * coincide con cualquier ARN que contenga el identificador de esa cuenta. Esto restringe el acceso únicamente a las personas que llaman desde la cuenta especificada. AWS

Multi-agent federación

Cuando varios agentes con diferentes funciones de IAM accedan a la misma puerta de enlace, cree políticas independientes para controlar qué herramientas puede usar cada 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" );

Explicación: Este patrón es útil para arquitecturas con varios agentes en las que diferentes agentes tienen diferentes funciones de IAM y deben tener diferentes niveles de acceso a las herramientas. Cada política se usa principal == con el ID de entidad del rol específico. La tools/list respuesta de cada agente solo incluye las herramientas que están autorizados a usar.

IAM con validación de entradas

Combine la comparación de los principales de IAM con la validación de las entradas de la herramienta:

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

Explicación: Esta política combina la coincidencia exacta de los principales con la validación de las entradas. Solo las personas que llamen suponiendo que provienen RefundProcessorRole de la cuenta especificada pueden procesar los reembolsos y solo cuando el importe del reembolso sea inferior a 1000$.

Prohibir cuentas específicas

Impide que las personas que llaman desde AWS cuentas específicas accedan a herramientas confidenciales:

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

Explicación: Esta política prohíbe que todas las personas que llamen desde una cuenta de un proveedor externo (444455556666) realicen eliminaciones administrativas. Debido a la semántica en la que se prohíbe ganar, esta política prevalece sobre cualquier política de permisos.

Prohíba funciones específicas en operaciones delicadas

Impida que las personas que llamen utilizando funciones de solo lectura realicen operaciones de escritura:

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

Explicación: Esta política prohíbe que las personas que llamen utilicen el realicen operaciones de escritura, independientemente ReadOnlyAgentRole de las políticas de permisos que, de otro modo, podrían permitirlas.