View a markdown version of this page

임시 정책 예제 - Amazon Bedrock AgentCore

기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.

임시 정책 예제

이 섹션의 정책은 동일한 세션의 앞부분에서 이미 어떤 일이 발생했는지를 결정합니다. 이를 통해 지불 전에 승인이 필요하거나, 기한이 지난 권한을 만료하거나, 실행 합계를 제한하거나, 실패 후 작업을 차단할 수 있습니다. 단일 요청에는 이러한 요청을 결정하기에 충분한 정보가 포함되지 않습니다.

모든 예제는 예제를 위해 리소스 구성에 설명된 참조 게이트웨이를 승인합니다. 임시 이벤트 스키마, 연산자, 세션 IDs, 할당량 및 리전 가용성은 임시 정책 및 임시 정책 작성을 참조하세요.

다음 예제를 사용하기 전에

네 가지로 시간 정책이 예상대로 작동하는지 여부를 확인할 수 있습니다.

세션 ID는 필수입니다.

임시 기록은 사용자가 지정한 세션으로 범위가 지정됩니다. 첫 번째 요청부터 시작하여 모든 요청의 x-amzn-bedrock-agentcore-policy-session-id 헤더에 세션 ID를 전송합니다. 게이트웨이는 사용자를 대신하여 게이트웨이를 생성하지 않으며, 엔진에 임시 정책이 있는 경우 세션 ID가 없는 요청은 검증에 실패합니다.

허용된 작업만 response 이벤트가 됩니다.

작업은 정책이 이벤트를 허용하고 완료한 경우에만 response 이벤트를 기록합니다. 거부된 작업은 대신 error 이벤트를 기록합니다. 따라서 다음 각 예제에는 사전 조건 작업에 permit 대한 일반 도 필요합니다. 그렇지 않으면 사전 조건이 거부되고 로 기록되지 않으며 response시간 조건이 일치할 수 없습니다. 모든 예제에서는가와 페어링할 수 있도록 허용하는를 명시합니다.

eventResource: resource는 필수입니다.

모든 조건자는 일치하는 이벤트를 정책 범위의 리소스에 eventResource: resource연결하는를 포함해야 합니다. 생략하면에서 거부됩니다temporal predicates do not constrain the matched event to the current request’s resource. 작성할 필요가 없습니다. 이벤트 스키마sessionId는 모든 조건자의 범위를 이미 현재 세션으로 지정합니다.

순서가 지정된 비교에는 정수가 필요하지만 등식은 필요하지 않습니다.

temporal { } 블록 내에서 두 종류의 비교는 서로 다른 유형을 허용합니다.

  • 순서 - <, >, ⇐>=- 양쪽integer에가 필요합니다. 를 사용하여 정책을 생성하면 decimal 또는가 거부string됩니다comparison requires numeric operands on both sides.

  • 같음 - == 및 !=-는 양쪽이 동일한 유형인 한 모든 유형에서 작동합니다. 이는 상관 관계가 사용하는 것입니다. input.claimId와 일치하면 지원되는 두 문자열을 context.input.claimId 비교합니다.

따라서 시간 정책의 합계 또는 임계값을 로 모델링합니다integer. 이러한 이유로 참조 게이트웨이는이 예제가 집계하는 도구에 화폐를 정수 마이너 단위로 표시합니다. 합계에는 동일한 요구 사항과 자체 메시지가 있습니다. 에는 integer 합계가 sum 필요합니다. 자세한 내용은 조건의 파라미터 유형을 참조하세요.

동일한 클레임에 대한 사전 승인 필요

인텐트: 세션의 앞부분에서 승인된 클레임에 대해서만 결제가 지급되도록 허용하므로 에이전트는 생성된 클레임 ID에 대해 결제할 수 없습니다.

::response 조건자는 완료된와 일치합니다approve_claim. 를 현재 요청의 output.claimId와 연관시키는 context.input.claimId 것은 지출을 해당 특정 승인과 연관시키는 것입니다. 상관 관계가 없으면 세션의 모든 승인이 모든 클레임에 대한 지불을 승인합니다.

permit ( principal, action == AgentCore::Action::"InsuranceAPI___disburse_payment", resource == AgentCore::Gateway::"arn:aws:bedrock-agentcore:us-west-2:123456789012:gateway/insurance-gw-a1b2c3d4e5" ) when temporal { formerly within 1h AgentCore::Action::"InsuranceAPI___approve_claim"::response{ eventResource: resource, output.claimId: context.input.claimId } };
중요

output.* 필드는 대상이 도구에 대한 출력 스키마를 선언하는 경우에만 response 이벤트에 존재합니다. 많은 대상은 그렇지 않습니다. 예를 들어 Lambda 대상은 일반적으로 입력만 선언한 다음 이벤트는 eventPrincipal, , eventResourceinput.*, requestId, 만 포함합니다sessionId.

이벤트가 선언하지 않는 필드의 이름을 지정하면 서비스가 정책을 거부하고 오류에 사용 가능한 항목이 나열됩니다.

predicate `AgentCore::Action::"MyTarget___verify_purchase"::response` mentions field `output.orderId`, which is not declared on that event (declared fields: eventPrincipal, eventResource, input.orderId, requestId, sessionId)

이 목록을 사용하여 상관관계를 확인할 수 있는 항목을 확인합니다. 출력 필드가 없는 경우 공유 입력 필드의 상관 관계 - 이전 도구를 반환하지 않고도 두 호출을 동일한 클레임에 input.claimId: context.input.claimId 연결합니다.

둘은 동일하지 않으므로 의도적으로 선택합니다. 입력 상관관계는 이전 호출이 요청한 것과 일치하고, 출력 상관관계는 반환된 것과 일치합니다. 규칙이 이전에 생성된 도구인 승인 ID, 계산된 양에 따라 달라지는 경우, 출력 상관 관계만 이를 적용하고 대상은 출력 스키마를 선언해야 합니다.

승인이 허용되고 기록되도록 일반 허가와 페어링합니다.

permit ( principal, action == AgentCore::Action::"InsuranceAPI___approve_claim", resource == AgentCore::Gateway::"arn:aws:bedrock-agentcore:us-west-2:123456789012:gateway/insurance-gw-a1b2c3d4e5" );
세션의 요청 시퀀스 결정

disburse_payment 사전 승인 없음

DENY

approve_claim 클레임의 경우 , 동일한 클레임의 disburse_payment 경우

허용

approve_claim 한 클레임의 경우 , 다른 클레임의 disburse_payment 경우

DENY

사전 조건 작업 필요

의도: 누군가 세션에서 해당 상태를 조회한 후에만 클레임이 승인되도록 허용합니다.

일치::request는 사전 조건만 시도했어야 하며 성공해서는 안 된다는 의미입니다. 에 대한 허가와 페어링합니다get_claim_status.

permit ( principal, action == AgentCore::Action::"InsuranceAPI___approve_claim", resource == AgentCore::Gateway::"arn:aws:bedrock-agentcore:us-west-2:123456789012:gateway/insurance-gw-a1b2c3d4e5" ) when temporal { formerly within 5m AgentCore::Action::"InsuranceAPI___get_claim_status"::request{ eventResource: resource } };

최근에 성공한 사전 조건 필요

의도: 지난 5분 동안 상태 조회가 완료된 경우에만 승인을 허용하므로 기한 경과 조회는 권한 부여를 중지합니다.

이전 예제의 유일한 변경 사항은 ::response 대신 이며 ::request"시도됨"과 "성공"의 차이입니다. 창 길이는 성공의 최신성을 설정합니다. 성공이 전달되면 사전 조건이 다시 실행될 때까지 권한이 경과합니다.

permit ( principal, action == AgentCore::Action::"InsuranceAPI___approve_claim", resource == AgentCore::Gateway::"arn:aws:bedrock-agentcore:us-west-2:123456789012:gateway/insurance-gw-a1b2c3d4e5" ) when temporal { formerly within 5m AgentCore::Action::"InsuranceAPI___get_claim_status"::response{ eventResource: resource } };
세션의 요청 시퀀스 결정

approve_claim 완료된 조회 전

DENY

조회가 완료된 후 창 approve_claim 내에서

허용

approve_claim 기간이 경과한 후

DENY

작업이 실행되는 횟수 제한

인텐트: 세션의 5분 단위로 최대 3개의 지출을 허용합니다.

count는 권한이 부여된 요청을 포함하여 창에서 일치하는 이벤트를 계산하므로 창의 네 번째 호출이 가장 먼저 거부됩니다. n > 3 필터가 테스트할 수 있도록 exists (n: Long) 개수를 캡처합니다. 집계에는의 왼쪽에 괄호가 필요합니다==. 최대 한도까지 호출이 허용disburse_payment되도록에 대한 권한과 페어링합니다.

forbid ( principal, action == AgentCore::Action::"InsuranceAPI___disburse_payment", resource == AgentCore::Gateway::"arn:aws:bedrock-agentcore:us-west-2:123456789012:gateway/insurance-gw-a1b2c3d4e5" ) when temporal { exists (n: Long). (count for (t: Timepoint). where (formerly within 5m (AgentCore::Action::"InsuranceAPI___disburse_payment"::request{ eventResource: resource } && tp(t)))) == n && n > 3 };
중요

이는 보안 제어가 아닙니다. 호출자는 세션 ID를 제공하므로 새 세션을 시작하여 수를 재설정할 수 있습니다. 예를 들어 자체 세션 ID를 제어하는 호출자에 대해 제한을 적용하지 않고 협동 세션 내에서 동작을 형성하는 데 사용합니다. 자세한 내용은 보안 고려 사항을 참조하세요.

실행 중인 합계 한도

의도: 5분 이내에 총 3,000.00이 될 때까지 지급을 허용한 다음 중지합니다.

sum는 현재 요청을 포함하여 일치하는 이벤트에 명명된 입력 필드를 추가하므로 임계값을 초과하는 요청은 거부된 요청입니다. 300,000센트의 한도와 100,000개의 지급이 있으면 처음 두 개가 허용되고 세 번째는 거부됩니다.

forbid ( principal, action == AgentCore::Action::"InsuranceAPI___disburse_payment", resource == AgentCore::Gateway::"arn:aws:bedrock-agentcore:us-west-2:123456789012:gateway/insurance-gw-a1b2c3d4e5" ) when temporal { exists (total: Long). (sum amt for (amt: Long), (t: Timepoint). where (formerly within 5m (AgentCore::Action::"InsuranceAPI___disburse_payment"::request{ eventResource: resource, input.amountCents: amt } && tp(t)))) == total && total >= 300000 };

2변수 도메인인 for (amt: Long), (t: Timepoint)가 필요합니다. amt는 값이 합산되고 시점을 t 구분하므로 동일한 양의 두 지출은 하나로 중복 제거되지 않고 두 번 계산됩니다.

참고

amountCents는 도구 스키마integer의 이며, 이를 통해이 정책이 작동합니다. sum 집계에는 정수 합계가 필요하고의 순서 비교에는 양쪽에 정수가 total 필요하므로 스키마가 로 선언하는 필드는 이와 같은 캡을 구동number할 수 없습니다. 이러한 예제가 의존하는 유형 규칙은 이러한 예제를 사용하기 전에 섹션을 참조하세요.

각 승인을 한 번 사용하기에 적합하게 만들기

의도: 승인당 하나의 지출을 허용합니다. 지불 후에는 새 승인이 필요합니다.

연since산자는 오른쪽의 앵커가 창 내에서 발생했을 때를 유지하고 왼쪽의 조건은 그 이후 계속 유지됩니다. 여기서는 승인은 지난 1시간 내에 완료되었으며 이후 완료된 지급이 없습니다. 승인 후 첫 번째 지불금은 이를 사용합니다.

permit ( principal, action == AgentCore::Action::"InsuranceAPI___disburse_payment", resource == AgentCore::Gateway::"arn:aws:bedrock-agentcore:us-west-2:123456789012:gateway/insurance-gw-a1b2c3d4e5" ) when temporal { !AgentCore::Action::"InsuranceAPI___disburse_payment"::response{ eventResource: resource } since within 1h AgentCore::Action::"InsuranceAPI___approve_claim"::response{ eventResource: resource } };

부정 측::response에서 일치시키는 것이 중요합니다. 권한이 부여된 요청은 아직 응답을 생성하지 않았으므로 자체적으로 차단되지 않습니다. 일치하면 모든 지급::request이 자체적으로 거부됩니다.

세션의 요청 시퀀스 결정

approve_claim, 그런 다음 disburse_payment

허용

새 승인 disburse_payment 없이 1초

DENY

새 approve_claim, 그런 다음 disburse_payment

허용

참고

호출이 완료된 직후 response 이벤트가 기록됩니다. 환급을 다시 보내지 않고 환급을 발행하기 전에 승인이 반환될 때까지 기다립니다. 자세한 내용은 이전 응답에 의존하는 시퀀싱 작업을 참조하세요.

휴지 적용

인텐트: 완료 후 1분 이내에 동일한 작업이 반복되지 않도록 합니다.

이 조건은 권한을 부여하는 것과 동일한 작업을 나타냅니다. ::response는 이를 안전하게 만듭니다. 현재 요청에 아직 응답이 없으므로 자체적으로 일치하지 않습니다. 로 작성된 ::request현재 요청은 자체 이벤트와 일치하며 작업은 영구적으로 금지됩니다. 자세한 내용은 현재 요청 포함 자기 참조 조건을 참조하세요.

forbid ( principal, action == AgentCore::Action::"InsuranceAPI___disburse_payment", resource == AgentCore::Gateway::"arn:aws:bedrock-agentcore:us-west-2:123456789012:gateway/insurance-gw-a1b2c3d4e5" ) when temporal { formerly within 1m AgentCore::Action::"InsuranceAPI___disburse_payment"::response{ eventResource: resource } };

무효화되지 않은 사전 조건 필요

인텐트: 승인이 유지되는 동안 지급을 허용하고 나중에 상태 검토를 위해 클레임이 다시 열리면 권한을 철회합니다.

이는 one-time-use 승인과 모양이 동일하지만 부정 작업은 승인 중인 작업과 다릅니다. 그러면 "승인 사용"이 "승인 유효성 검사"로 바뀝니다. approve_claim 및 모두에 대한 권한을 부여합니다get_claim_status.

permit ( principal, action == AgentCore::Action::"InsuranceAPI___disburse_payment", resource == AgentCore::Gateway::"arn:aws:bedrock-agentcore:us-west-2:123456789012:gateway/insurance-gw-a1b2c3d4e5" ) when temporal { !AgentCore::Action::"InsuranceAPI___get_claim_status"::response{ eventResource: resource } since within 5m AgentCore::Action::"InsuranceAPI___approve_claim"::response{ eventResource: resource } };
세션의 요청 시퀀스 결정

disburse_payment 승인 전

DENY

approve_claim, 그런 다음 disburse_payment

허용

get_claim_status가 발생하면 disburse_payment

DENY

새 approve_claim, 그런 다음 disburse_payment

허용

일련의 작업이 순서대로 필요함

의도: 시퀀스 상태 조회, 승인, 지급이 필요합니다.

링크당 하나의 정책, 그리고 체인이 구성에서 나타납니다. 체인을 시작할 수 있도록 첫 번째 작업에 대한 일반 권한을 부여합니다. 순서에 맞지 않게 시도된 단계는 사전 조건이 완료될 때까지 거부됩니다.

// Link 1: approve only after a completed status lookup permit ( principal, action == AgentCore::Action::"InsuranceAPI___approve_claim", resource == AgentCore::Gateway::"arn:aws:bedrock-agentcore:us-west-2:123456789012:gateway/insurance-gw-a1b2c3d4e5" ) when temporal { formerly within 5m AgentCore::Action::"InsuranceAPI___get_claim_status"::response{ eventResource: resource } }; // Link 2: disburse only after a completed approval permit ( principal, action == AgentCore::Action::"InsuranceAPI___disburse_payment", resource == AgentCore::Gateway::"arn:aws:bedrock-agentcore:us-west-2:123456789012:gateway/insurance-gw-a1b2c3d4e5" ) when temporal { formerly within 5m AgentCore::Action::"InsuranceAPI___approve_claim"::response{ eventResource: resource } };

어떤 순서로든 두 가지 사전 조건 필요

의도: 상태 조회와 승인이 모두 완료된 후에만 어느 순서로든 지불을 허용합니다.

와 조인된 두 가지 formerly 조건에는 둘 다 && 필요하며 두 조건 모두 순서를 제한하지 않습니다. 이는 단일 정책에 포함될 수 있는 세 개의 시간 연산자 중 두 개를 사용합니다.

permit ( principal, action == AgentCore::Action::"InsuranceAPI___disburse_payment", resource == AgentCore::Gateway::"arn:aws:bedrock-agentcore:us-west-2:123456789012:gateway/insurance-gw-a1b2c3d4e5" ) when temporal { formerly within 1h AgentCore::Action::"InsuranceAPI___get_claim_status"::response{ eventResource: resource } && formerly within 1h AgentCore::Action::"InsuranceAPI___approve_claim"::response{ eventResource: resource } };

상호 배타적인 두 가지 작업 수행

의도: 2분 이내에 지급 또는 클레임 삭제를 허용하지만 둘 다 허용하지는 않습니다.

제외에는 방향당 하나씩 두 개의 대칭 정책이 필요합니다. 단일는 하나의 순서만 차단forbid합니다. 일치란 단순히 한 작업을 시도할 때 완료되기를 기다리지 않고 다른 작업을 차단하는 것을 ::request 의미합니다.

// Forbid deletion if a disbursement was requested within 2m forbid ( principal, action == AgentCore::Action::"InsuranceAPI___delete_claim", resource == AgentCore::Gateway::"arn:aws:bedrock-agentcore:us-west-2:123456789012:gateway/insurance-gw-a1b2c3d4e5" ) when temporal { formerly within 2m AgentCore::Action::"InsuranceAPI___disburse_payment"::request{ eventResource: resource } }; // Forbid disbursement if a deletion was requested within 2m forbid ( principal, action == AgentCore::Action::"InsuranceAPI___disburse_payment", resource == AgentCore::Gateway::"arn:aws:bedrock-agentcore:us-west-2:123456789012:gateway/insurance-gw-a1b2c3d4e5" ) when temporal { formerly within 2m AgentCore::Action::"InsuranceAPI___delete_claim"::request{ eventResource: resource } };

임계 이벤트 수 필요

의도: 2회 이상의 지급이 완료된 후에만 클레임을 삭제할 수 있습니다.

현재 요청의 클레임input.claimId과 상호 연관하면 세션의 모든 지출을 계산하는 대신 해당 클레임의 수 범위가 지정됩니다.

permit ( principal, action == AgentCore::Action::"InsuranceAPI___delete_claim", resource == AgentCore::Gateway::"arn:aws:bedrock-agentcore:us-west-2:123456789012:gateway/insurance-gw-a1b2c3d4e5" ) when temporal { exists (n: Long). (count for (t: Timepoint). where (formerly within 5m (AgentCore::Action::"InsuranceAPI___disburse_payment"::response{ eventResource: resource, input.claimId: context.input.claimId } && tp(t)))) == n && n >= 2 };
참고

count는 고유한 호출자가 아닌 이벤트를 계산합니다. 한 보안 주체가 일치하는 모든 이벤트를 생성하는 것을 막는 것은 없으므로 "다른 두 사람이 승인"을 표현할 수 없습니다. 다자간 승인의 경우 정책 외부의 구분을 상호 연관eventPrincipal시키거나 적용합니다.

이전 거부 후 작업 차단

인텐트: 세션의 승인 시도가 거부된 후 세션의 지출을 중지합니다.

error 이벤트는 거부되거나 실패한 요청을 기록하므로 정책이 이전 실패에 반응하는 방식도 ::error 마찬가지입니다. 일반 조건에서 허용disburse_payment되도록에 대한 일반 허가와 페어링합니다.

forbid ( principal, action == AgentCore::Action::"InsuranceAPI___disburse_payment", resource == AgentCore::Gateway::"arn:aws:bedrock-agentcore:us-west-2:123456789012:gateway/insurance-gw-a1b2c3d4e5" ) when temporal { formerly within 3m AgentCore::Action::"InsuranceAPI___approve_claim"::error{ eventResource: resource } };

이는 유용한 억제 패턴입니다. 에이전트가 가지고 있지 않은 권한을 탐색하면 계속 시도할 수 있는 것이 아니라 민감한 작업에서 끊어집니다.

시간, 가드레일 및 요청 조건 결합

의도: 세션에 지난 24시간 동안 3개 미만의 제출이 있고, 클레임 설명에 은행 세부 정보가 없으며, 호출자가 제한된 역할이 아닌 경우 호출자가 클레임을 제출하도록 허용합니다.

세 가지 조건 유형은 모두 하나의 정책으로 구성되며가 적용permit되려면 모든 절이를 보유해야 합니다. temporal 블록은 캡, when 블록 화면 콘텐츠를 적용하고 unless 블록은 역할을 제외합니다. 각는 독립적으로 평가됩니다.

permit ( principal is AgentCore::OAuthUser, action == AgentCore::Action::"InsuranceAPI___file_claim", resource == AgentCore::Gateway::"arn:aws:bedrock-agentcore:us-west-2:123456789012:gateway/insurance-gw-a1b2c3d4e5" ) when temporal { exists (n: Long). (count for (t: Timepoint). where (formerly within 24h (AgentCore::Action::"InsuranceAPI___file_claim"::request{ eventResource: resource } && tp(t)))) == n && n <= 3 } when { BedrockGuardrails::SensitiveInformation(["US_BANK_ACCOUNT_NUMBER"], [context.input.description]).count() == 0 } unless { principal.hasTag("role") && principal.getTag("role") == "restricted" };

가드레일 화면은 유일한 자유 텍스트 파라미터description입니다file_claim. 민감한 정보 가드레일은 검색 중인 데이터를 안정적으로 전달할 수 있는 필드를 가리킵니다. 식별자 또는 숫자를 가리키면 감지할 항목이 없으며 절이 자동으로 통과합니다. description는 선택 사항이므로이 요청을 생략하면 가드레일에 텍스트가 없고 절이 유지됩니다.

시간 정책을 편집할 때 변경되는 사항

엔진에 시간 정책을 추가하거나 업데이트하면 기록된 기록이 더 이상 적용되는 규칙과 일치하지 않으므로 해당 엔진의 열린 시간 세션이 무효화됩니다. 무효화된 세션을 재사용하는 다음 요청은 HTTP 409에서 실패합니다ConflictException. 새 세션을 시작하고 다시 시도합니다. 새 세션은 빈 기록으로 시작되며 업데이트된 정책을 기준으로 평가됩니다.

중요

시간 정책 변경을 롤아웃할 때 이를 계획합니다. 클라이언트는를 "새 세션 시작"409으로 취급해야 합니다. 진행 중인 다단계 워크플로는 다시 시작되지 않고 다시 시작됩니다.