View a markdown version of this page

임시 정책 작성 - Amazon Bedrock AgentCore

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

임시 정책 작성

AgentCore에서 정책에 대한 다른 정책을 생성하는 것과 동일한 방식으로 Dogwood 정책 언어로 임시 정책을 작성하고 정책 엔진에 추가합니다. 시간 정책은 세션 인식 조건이 temporal 블록에 배치되는 permit 또는 forbid 규칙입니다. 규칙이 적용되는 보안 주체, 작업 및 리소스는 다른 정책과 마찬가지로 표준 (principal, action, resource) 범위를 사용하여 작성됩니다. 다음 섹션에서는 시간 정책을 생성하고 표현할 수 있는 일반적인 패턴을 안내하는 방법을 보여줍니다.

시간 정책 생성

create-policy 작업을 사용하여 임시 정책을 생성하고 다른 정책에 사용하는 것과 동일한 작업을 생성하여 정책 엔진에 연결합니다. 임시 정책의 문은 상태 비저장 Cedar 정책의 cedar가 아닌 정의policy의에 속합니다.

다음 AWS CLI 예제에서는 정책 엔진에 시간 정책을 생성합니다.

aws bedrock-agentcore-control create-policy \ --policy-engine-id my-policy-engine-id \ --name TransferToLookedUpAccount \ --validation-mode FAIL_ON_ANY_FINDINGS \ --definition '{ "policy": { "statement": "permit (principal, action == AgentCore::Action::\"FundsTarget___transfer_funds\", resource == AgentCore::Gateway::\"arn:aws:bedrock-agentcore:us-west-2:123456789012:gateway/my-gateway\") when temporal { formerly within 1h AgentCore::Action::\"FundsTarget___get_account_balance\"::response{ eventResource: resource, output.accountId: context.input.toAccount } };" } }'

Dogwood 문을 직접 작성하는 대신 자연어로 설명하여 임시 정책을 생성할 수도 있습니다.

이벤트 스키마: 참조할 수 있는 필드

temporal { } 블록 내의 조건은 임시 이벤트 조건자를 사용하여 지금까지 세션에 기록된 특정 이벤트(현재 승인 중인 작업까지 포함)와 일치시킵니다. 조건자는 기간, 작업 및 이벤트 종류, 일치하는 이벤트에 대한 필드 제약 조건 집합의 이름을 지정합니다. 이전 섹션의 create-policy 예제에서는 하나의 조건자인를 사용했으며formerly within 1h AgentCore::Action::"FundsTarget___get_account_balance"::response{ eventResource: resource, output.accountId: context.input.toAccount }, 이는가 현재 요청의 output.accountId와 동일한 지난 한 시간 내에 get_account_balance response 기록된과 일치합니다toAccount.

조건자를 작성하려면 작업이 생성하는 이벤트와 각 이벤트에 포함되는 필드를 알아야 합니다. 이는 조건자가 제약하고 상호 연관시킬 수 있는 필드이기 때문입니다. 이 섹션에서는 해당 이벤트 스키마를 설명합니다.

각 작업은 조건자(, ::request, )의 이벤트 종류에 따라 이름이 지정된 최대 3가지 종류의 이벤트를 생성합니다::response. ::error

  • request - 승인된 각 요청에 대해 기록됩니다. 작업의 입력 필드를 처리합니다.

  • response - 도구가 성공적으로 반환될 때 기록됩니다. 작업의 입력 및 출력 필드를 처리합니다.

  • error - 요청이 거부되거나 도구가 오류를 반환할 때 기록됩니다. 작업의 입력 필드를 처리합니다. 이 이벤트는 기록 전용입니다.

임시 이벤트 스키마는 각 작업에 대해 이러한 이벤트를 정의합니다A. …​inputs(A) 및는 작업의 선언된 입력 및 출력 필드로 …​outputs(A) 확장됩니다.

// Recorded for each authorized request. decision event <A>::request { ...inputs(A), eventPrincipal: principalType(A), eventResource: resourceType(A), requestId: String, pin sessionId: String = context.sessionId, } // Recorded when the tool returns successfully; carries inputs and outputs. event <A>::response { ...inputs(A), ...outputs(A), eventPrincipal: principalType(A), eventResource: resourceType(A), requestId: String, pin sessionId: String = context.sessionId, } // Recorded when the request is denied or the tool returns an error; history-only. event <A>::error { ...inputs(A), eventPrincipal: principalType(A), eventResource: resourceType(A), requestId: String, pin sessionId: String = context.sessionId, }

조건자 본문 내에서 일치하는 이벤트의 다음 필드를 참조할 수 있습니다.

필드 설명

input.<name>

작업의 입력 필드입니다. request, response및 error 이벤트에서 사용할 수 있습니다.

output.<name>

작업의 출력 필드입니다. response 이벤트에서만 사용할 수 있습니다.

eventPrincipal

기록된 요청을 한 보안 주체입니다.

eventResource

정책 범위의 리소스, 즉 resource permit 또는 forbid 헤드의를 참조하도록 항상이 값을 resource (로eventResource: resource) 설정합니다. 이렇게 하면 현재 요청의 리소스와 일치하는 범위가 지정되며 모든 임시 조건자가 이를 포함해야 합니다.

기록된 이벤트를 현재 요청과 연관시키려면 이러한 필드 중 하나를와 같은 현재 요청의 값과 비교합니다context.input.<name>.

사용 사례

다음은 임시 정책의 몇 가지 예입니다.

사용 가능한 도구

이 섹션의 예제에서는 세 가지 도구를 노출FundsTarget하는 라는 게이트웨이 대상을 사용합니다. 정책에서 각 도구는 작업 이름 FundsTarget___<tool-name>, 및 여기에 나열된 입력 및 출력 필드에 의해 참조됩니다.

FundsTarget___get_account_balance

고객의 현재 계정 잔액을 검색합니다.

  • 입력: customerId (문자열, 필수).

  • 출력: status (문자열), customerId (문자열), accountId (문자열), balance (정수).

FundsTarget___transfer_funds

계정 간에 자금을 이체합니다.

  • 입력: fromAccount (문자열, 필수), toAccount (문자열, 필수), amount (정수, 필수).

  • 출력: status (문자열), fromAccount (문자열), toAccount (문자열), amount (정수).

FundsTarget___get_transaction_history

계정의 트랜잭션 기록을 검색합니다.

  • 입력: accountId (문자열, 필수), startDate (문자열, 선택 사항), endDate (문자열, 선택 사항).

  • 출력: status (문자열), accountId (문자열).

예: output-to-input 무결성

이 예시에서는 에이전트가 동일한 세션의 앞부분에서 조회한 계정으로만 자금을 이체할 수 있도록 하여 생성한 계정으로 이체를 방지합니다. 이 정책은 세션의 앞부분에서 get_account_balance 응답이 동일한 계정을 반환한 transfer_funds 경우에만 허용합니다.

permit ( principal, action == AgentCore::Action::"FundsTarget___transfer_funds", resource == AgentCore::Gateway::"arn:aws:bedrock-agentcore:us-west-2:123456789012:gateway/my-gateway" ) when temporal { formerly within 1h AgentCore::Action::"FundsTarget___get_account_balance"::response{ eventResource: resource, output.accountId: context.input.toAccount } };

::response 조건자는 이전의 기록된 응답과 일치합니다get_account_balance. output.accountId는 도구가 반환하는 필드이며 현재 transfer_funds 요청의 대상 계정context.input.toAccount입니다.는 이전을 이전 조회와 동일하게 연결하도록 요구합니다.

정책 엔진은 기본적으로 거부하고 작업이 허용된 response 경우에만 로 기록되므로 조회가 허용되고 세션에 응답으로 기록get_account_balance되도록에 permit 대한 일반 도 부여합니다.

permit ( principal, action == AgentCore::Action::"FundsTarget___get_account_balance", resource == AgentCore::Gateway::"arn:aws:bedrock-agentcore:us-west-2:123456789012:gateway/my-gateway" );

두 정책이 모두 적용되면 세션의 요청은 다음과 같이 결정됩니다.

세션의 요청 시퀀스 결정

transfer_funds 이전 조회가 없는

DENY

get_account_balance 계정의 경우 transfer_funds 동일한 계정으로

허용

get_account_balance 한 계정에 대해 다른 transfer_funds 계정에 대해

DENY

예: 도구 시퀀싱

이 예제에서는 사전 조건 작업이 동일한 세션에서 이전에 실행된 후에만 작업을 허용합니다. 다음 정책은 지난 5분 이내에 transfer_funds 요청이 발생한 get_account_balance 경우에만를 허용합니다.

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

::request 조건자는 세션의 이전 transfer_funds 요청과 일치합니다. 작업을 허용하고 기록할 transfer_funds 수 있도록 permit에 대해와 페어링합니다. 두 정책을 모두 적용하면 get_account_balance가 세션에서 실행될 때까지 transfer_funds가 거부됩니다.

세션의 요청 시퀀스 결정

get_account_balance 이전 transfer_funds

DENY

transfer_funds, 그런 다음 get_account_balance

허용

예: 데이터 신선도

이 예제에서는 기한 경과 결과가 권한을 만료하도록 필수 조건이 빠듯한 기간 내에 성공적으로 완료된 경우에만 작업을 허용합니다. 가 지난 5분 이내에 transfer_funds 완료된 get_account_balance 경우에만 허용됩니다.

permit ( principal, action == AgentCore::Action::"FundsTarget___get_account_balance", resource == AgentCore::Gateway::"arn:aws:bedrock-agentcore:us-west-2:123456789012:gateway/my-gateway" ) when temporal { formerly within 5m AgentCore::Action::"FundsTarget___transfer_funds"::response{ eventResource: resource } };

::response 대신 일치시키는 ::request 것은 도구 시퀀싱과 다릅니다. response 이벤트는 작업이 성공적으로 완료될 때만 기록되므로이 정책은 단순히 이전 요청이 아니라 최근에 성공적으로 완료되어야 합니다. 창 길이는 완료의 최신 상태를 설정합니다. 창이 통과하면 사전 조건이 다시 실행될 때까지 권한이 경과합니다.

세션의 요청 시퀀스 결정

get_account_balance 완료 전 transfer_funds

DENY

transfer_funds가 완료된 후 창 get_account_balance 내에서

허용

get_account_balance 기간이 경과한 후

DENY

예: 세션 기반 속도 제한

이 예제에서는 도구를 세션 내에서 고정된 수의 호출로 제한합니다. 다음 정책은 세션에서 5분 이내에 3회 이상 호출transfer_funds되면 금지됩니다.

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

count 표현식은 현재 transfer_funds 요청을 포함하여 지난 5분 동안 세션에 기록된 요청을 계산합니다.이 수가 3개를 초과하면 금지가 적용됩니다. 호출이 한도까지 허용transfer_funds되도록에 permit 대해와 페어링합니다. 두 정책을 모두 적용하면 5분 기간 내에 처음 3번의 transfer_funds 호출이 허용되고 해당 기간의 네 번째(또는 이후) 호출이 거부됩니다.

중요

이 제한은 단일 세션 내에서만 적용되므로 확인된 호출자에 대한 보안 제어가 아닙니다. 호출자는 세션 ID를 제공하므로 새 세션을 시작하여 수를 재설정할 수 있습니다. 이 패턴을 사용하여 자체 세션 ID를 제어하는 호출자에게 엄격한 제한을 적용하지 않고 협력 세션 내에서 동작을 형성합니다. 자세한 내용은 보안 고려 사항을 참조하세요.

예: one-time-use 승인

이 예제에서는 각 승인을 한 번만 사용할 수 있도록 합니다. transfer_funds는 세션의 가장 최근get_account_balance(승인) 이후 transfer_funds가 완료되지 않은 경우에만 허용됩니다. 전송이 완료되면 승인을 소비하고 새 승인이 발생할 때까지 다음 전송이 거부됩니다.

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

이 since 조건은 지난 1시간 이내에 완료get_account_balance(승인)가 발생하고 해당 승인 이후 완료transfer_funds되지 않은 경우 유지됩니다. 일치는 필수입니다. 전송::response은 성공한 후에만 완료된 것으로 계산되므로 권한이 부여된 요청은 자체적으로 차단되지 않습니다. 승인이 기록get_account_balance되도록 permit용와 페어링합니다.

세션의 요청은 다음과 같이 결정됩니다.

세션의 요청 시퀀스 결정

get_account_balance (승인), 그런 다음 transfer_funds

허용

새 승인 transfer_funds 없이 1초

DENY

새 get_account_balance, 그런 다음 transfer_funds

허용

참고

호출이 완료된 직후 도구의 response 이벤트가 기록됩니다. get_account_balance (승인) 요청이 완료되고 해당 요청이 기록response될 때까지 기다렸다가 다음를 발급transfer_funds합니다. 자세한 내용은 이전 응답에 의존하는 시퀀싱 작업을 참조하세요.

예: 누적 예산

이 예제에서는 창 내 작업의 총 값을 제한합니다. 다음 정책은 지난 5분 동안의 세션 전송에 대한 amount 입력 합계가 3000에 도달transfer_funds하면 금지됩니다.

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

sum 표현식은 현재 transfer_funds 요청을 포함하여 창의 일치하는 요청에 입력 amount 필드를 추가합니다. 합계가 임계값에 도달하면 금지가 적용됩니다. 합산 필드는 작업의 입력 필드입니다. 정책을 용와 페어링permit합니다transfer_funds. 예를 들어 임계값이 3,000이고 전송이 1,000인 경우 처음 두 개가 허용되고 3,000에 도달하는 세 번째는 거부됩니다.

속도 제한과 마찬가지로 합계는 현재 세션으로 범위가 지정되며 세션 간에 집계되지 않습니다.

예: 휴지

이 예제에서는 휴지 기간을 적용합니다. 작업은 마지막 완료 후 고정된 기간 내에 반복할 수 없습니다. 가 지난 1분 이내에 transfer_funds 완료된 transfer_funds 경우 금지됩니다.

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

이 조건은 자체 참조입니다. 인증되는 동일한 작업과 일치합니다. 권한이 부여된 요청이 아직 응답을 생성하지 않았으므로 자체적으로 일치하지 않기 때문에 일치가 작동::response하게 됩니다. ::request 여기에서 일치하면 현재 요청이 자체 이벤트와 일치하고 작업이 영구적으로 금지됩니다. 새 완료 없이 기간이 경과하면 작업이 다시 허용됩니다.

세션의 요청 시퀀스 결정

첫 번째 transfer_funds

허용

1분 transfer_funds 이내에 다른

DENY

transfer_funds 1분이 경과한 후

허용

예: 연속 사전 조건

이 예제에서는 사전 조건이 유지되는 동안에만 작업을 허용합니다. 긍정적인 확인이 최근에 발생했으며 이후 무효화된 작업은 없습니다. (확인)get_account_balance이 지난 5분 이내에 완료되고 다음 이후 완료된 get_transaction_history (검증)이 없는 transfer_funds 경우에만 허용됩니다.

permit ( principal, action == AgentCore::Action::"FundsTarget___transfer_funds", resource == AgentCore::Gateway::"arn:aws:bedrock-agentcore:us-west-2:123456789012:gateway/my-gateway" ) when temporal { !AgentCore::Action::"FundsTarget___get_transaction_history"::response{ eventResource: resource } since within 5m AgentCore::Action::"FundsTarget___get_account_balance"::response{ eventResource: resource } };

이 since 조건은 지난 5분 이내에 완료된가 get_account_balance 발생하고 이후 완료된 get_transaction_history가 발생하지 않을 때 유지됩니다. 완료된는 사전 조건을 get_account_balance 확인하며 이후 get_transaction_history에서 무효화되지 않도록 하기 때문에가 발생하지 않도록 요구합니다. get_account_balance 및 모두에 대한 권한을 부여get_transaction_history하여 기록됩니다.

세션의 요청 시퀀스 결정

transfer_funds 이전 get_account_balance

DENY

get_account_balance, 그런 다음 transfer_funds

허용

get_transaction_history가 발생하면 transfer_funds

DENY

새 get_account_balance, 그런 다음 transfer_funds

허용

예: 다중 홉 체인

여러 시퀀싱 정책을 구성하여 작업 체인을 요구할 수 있으며, 각 작업은 이전 작업이 완료된 후에만 허용됩니다. 이 예제에서는 체인 get_account_balance → get_transaction_history →가 필요하며transfer_funds, 두 가지 정책(링크당 하나씩)을 사용합니다.

// Link 1: permit get_transaction_history only after get_account_balance completed permit ( principal, action == AgentCore::Action::"FundsTarget___get_transaction_history", resource == AgentCore::Gateway::"arn:aws:bedrock-agentcore:us-west-2:123456789012:gateway/my-gateway" ) when temporal { formerly within 5m AgentCore::Action::"FundsTarget___get_account_balance"::response{ eventResource: resource } }; // Link 2: permit transfer_funds only after get_transaction_history completed permit ( principal, action == AgentCore::Action::"FundsTarget___transfer_funds", resource == AgentCore::Gateway::"arn:aws:bedrock-agentcore:us-west-2:123456789012:gateway/my-gateway" ) when temporal { formerly within 5m AgentCore::Action::"FundsTarget___get_transaction_history"::response{ eventResource: resource } };

각 정책은 하나의 링크를 적용하며 체인은 구성에서 나옵니다.는 transfer_funds를 필요로 하고 get_transaction_history는를 필요로 합니다get_account_balance. 시작할 수 있도록 체인의 첫 번째 작업에 permit 대해를 부여합니다. 순서에 맞지 않게 시도된 단계는 사전 조건이 완료될 때까지 거부됩니다.

세션의 요청 시퀀스 결정

transfer_funds 또는 get_transaction_history 이전 get_account_balance

DENY

get_account_balance, 그런 다음 get_transaction_history, 그런 다음 transfer_funds

각 단계에서 허용

예: 상호 제외

이 예제에서는 창 내에서 두 작업을 상호 배타적으로 만듭니다. 즉, 실행이 먼저 다른 실행을 차단합니다. 두 개의 대칭 금지 정책을 사용하므로 제외가 양방향으로 유지됩니다. 여기서 transfer_funds 및는 모두 2분 이내에 발생할 get_transaction_history 수 없습니다.

// Forbid get_transaction_history if a transfer_funds was requested within 2m forbid ( principal, action == AgentCore::Action::"FundsTarget___get_transaction_history", resource == AgentCore::Gateway::"arn:aws:bedrock-agentcore:us-west-2:123456789012:gateway/my-gateway" ) when temporal { formerly within 2m AgentCore::Action::"FundsTarget___transfer_funds"::request{ eventResource: resource } }; // Forbid transfer_funds if a get_transaction_history was requested within 2m forbid ( principal, action == AgentCore::Action::"FundsTarget___transfer_funds", resource == AgentCore::Gateway::"arn:aws:bedrock-agentcore:us-west-2:123456789012:gateway/my-gateway" ) when temporal { formerly within 2m AgentCore::Action::"FundsTarget___get_transaction_history"::request{ eventResource: resource } };

각 정책은에서 일치하므로 한 작업을 요청::request하더라도 다른 작업을 차단하므로 블록은 첫 번째 작업이 완료될 때까지 기다리지 않습니다. 한 방향에 하나씩 두 개의 대칭 forbid 정책이 필요합니다. 하나는 transfer_funds 요청 get_transaction_history 후 금지되고 다른 하나는 get_transaction_history 요청 transfer_funds 후 금지됩니다. 단일 금지는 하나의 주문만 차단합니다. 둘 다 두 작업에 대한 권한과 페어링합니다.

세션의 요청 시퀀스 결정

transfer_funds, 그런 다음 get_transaction_history

전송 허용, 기록 거부

get_transaction_history, 그런 다음 transfer_funds

기록 허용, 전송 거부

예: 시간, 가드레일 및 시더 조건 결합

단일 정책은 임시 조건을 가드레일 및 표준 Cedar 조건과 결합할 수 있습니다. 정책을 적용하려면 모든 조건을 충족해야 합니다. 이 예제에서는 누적 전송 금액이 한도(임시) 미만으로 유지되고, 요청에 민감한 정보가 포함되지 않으며(가드레일), 호출자가 차단된 그룹(Cedar)에 있지 않은 transfer_funds 경우에만 허용합니다.

permit ( principal, action == AgentCore::Action::"FundsTarget___transfer_funds", resource == AgentCore::Gateway::"arn:aws:bedrock-agentcore:us-west-2:123456789012:gateway/my-gateway" ) when temporal { exists (total: Long). (sum amt for (amt: Long), (t: Timepoint). where (formerly within 24h (AgentCore::Action::"FundsTarget___transfer_funds"::request{ eventResource: resource, input.amount: amt } && tp(t)))) == total && total < 60000 } when { BedrockGuardrails::SensitiveInformation(["ACCOUNT_NUMBER"], [context.input.body]).count() == 0 } unless { principal in Group::"blocked_users" };

시간 블록은 누적 한도를 적용하고, 가드레일 블록은 나열된 민감한 정보가 포함된 요청을 차단하며, Cedar unless 블록은 차단된 보안 주체를 제외합니다. 각 조건 유형은 독립적으로 평가되며 모든 조건 유형이 보류된 경우에만 허용이 적용됩니다. 가드레일 조건 구문은 정책의 가드레일을 참조하세요. 시간 블록은 이전 예제에서 설명한 대로 동작합니다.

예: 병렬 사전 조건

이 예제에서는 작업이 허용되기 전에 순서에 관계없이 두 가지 사전 조건을 완료해야 합니다. 두 formerly 조건을와 결합하여 지난 한 시간 내에 transfer_funds 및가 모두 get_transaction_history 완료된 get_account_balance 경우에만 허용됩니다&&.

permit ( principal, action == AgentCore::Action::"FundsTarget___get_account_balance", resource == AgentCore::Gateway::"arn:aws:bedrock-agentcore:us-west-2:123456789012:gateway/my-gateway" ) when temporal { formerly within 1h AgentCore::Action::"FundsTarget___transfer_funds"::response{ eventResource: resource } && formerly within 1h AgentCore::Action::"FundsTarget___get_transaction_history"::response{ eventResource: resource } };

두 사전 조건 모두 기간 내에 (::response)를 완료해야 하며 순서는 중요하지 않습니다. 두 사전 필수 작업이 모두 기록되도록 권한을 부여합니다. 한 작업만 완료하면 다른 작업도 완료될 때까지 작업이 거부됩니다.

세션의 요청 시퀀스 결정

get_account_balance 두 사전 조건 모두 이전

DENY

하나의 사전 조건만 완료한 다음 get_account_balance

DENY

두 사전 조건이 모두 완료된 다음 get_account_balance

허용

예: 승인 임계값

이 예제에서는 임계 수의 적격 이벤트 후에만 작업을 허용합니다. 최소 2개가 get_account_balance 고객 계정에 transfer_funds 완료된 경우에만 고객에게 허용되며 이전의 toAccount와 잔액 요청의를 상호 연관시킵니다. customerId

permit ( principal, action == AgentCore::Action::"FundsTarget___get_account_balance", resource == AgentCore::Gateway::"arn:aws:bedrock-agentcore:us-west-2:123456789012:gateway/my-gateway" ) when temporal { exists (n: Long). (count for (t: Timepoint). where (formerly within 5m (AgentCore::Action::"FundsTarget___transfer_funds"::response{ eventResource: resource, input.toAccount: context.input.customerId } && tp(t)))) == n && n >= 2 };

count 표현식은 창에서 일치하는 완료된 이벤트를 계산하며, 개수가 임계값에 도달하면 작업이 허용됩니다.

참고

count는 개별 보안 주체가 아닌 일치하는 이벤트를 계산합니다. 이벤트가 서로 다른 호출자로부터 오는 것은 강제할 수 없으므로 N개의 개별 당사자가 여러 당사자를 승인하는 대신 "N개의 이벤트" 임계값을 표시합니다.

계정과의 완료된 전송 일치 get_account_balance

2 미만

DENY

2 이상

허용

예: 이전 거부 후 작업 차단

이 예제에서는 동일한 세션의 이전 도구 호출이 거부될 때 민감한 작업을 차단합니다. 거부된 요청은 error 이벤트로 기록되며 ::error 조건자는 이러한 이벤트와 일치합니다. 다음 정책은 세션get_account_balance의이 지난 3분 이내에 거부될 transfer_funds 때마다 금지됩니다.

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

forbid 규칙은 모든를 재정의permit하므로 transfer_funds 일반적인 조건에서 permit 허용하는와 페어링합니다.

permit ( principal, action == AgentCore::Action::"FundsTarget___transfer_funds", resource == AgentCore::Gateway::"arn:aws:bedrock-agentcore:us-west-2:123456789012:gateway/my-gateway" );

두 정책이 모두 적용되면 세션의 요청은 다음과 같이 결정됩니다.

세션의 요청 시퀀스 결정

transfer_funds 이전 거부 없음

허용

get_account_balance가 거부된 다음 transfer_funds

DENY