

# 정책 조건
<a name="policy-conditions"></a>

조건은 `when` 및 `unless` 절을 사용하여 정책에 세분화된 로직을 추가합니다.

```
when {
  principal.hasTag("username") &&
  principal.getTag("username") == "refund-agent" &&
  context.input.amount < 500
}
```

## 조건 유형
<a name="policy-condition-types"></a>
+  `when { …​ }` - 조건이 true인 경우에만 정책이 적용됩니다.
+  `unless { …​ }` - 조건이 false인 경우에만 정책이 적용됩니다.
+  `when guardrails { …​ }` - 정책은 하나 이상의 가드레일의 출력에 어설션된 조건이 true( true)로 평가되는 경우에만 적용됩니다.
+  `unless guardrails { …​ }` - 정책은 하나 이상의 가드레일의 출력에 어설션된 조건이 false(거짓)로 평가되는 경우에만 적용됩니다.

## 도구 인수
<a name="policy-tool-arguments"></a>

 `context.input` 에는 도구 호출에 전달된 인수가 포함되어 있습니다.

```
context.input.amount < 500
```

사용자가 다음과 같은 인수를 `RefundTool___process_refund` 사용하여를 호출하는 경우:

```
{
  "orderId": "12345",
  "amount": 450,
  "reason": "Defective product"
}
```

정책은 다음 값에 액세스할 수 있습니다.
+  `context.input.orderId` → "12345"
+  `context.input.amount` → 450
+  `context.input.reason` → "결함 제품"

정책은 특정 도구 호출 파라미터를 기반으로 결정을 내릴 수 있습니다.

## 보안 주체 속성
<a name="policy-principal-attributes"></a>

보안 주체 속성은 AgentCore Gateway에 대해 구성된 인증 유형에 따라 다릅니다.

### OAuth 클레임(태그)
<a name="policy-oauth-claims"></a>

OAuth 인증 게이트웨이의 경우 OAuth 토큰의 JWT 클레임은 OAuthUser 엔터티에 태그로 저장됩니다. JWT 클레임의 예:

```
{
  "sub": "user-123",
  "username": "refund-agent",
  "scope": "refund:write admin:read",
  "role": "admin"
}
```

이러한 클레임은 보안 주체 개체의 태그가 됩니다. 태그가 존재하는지 확인합니다.

```
principal.hasTag("username")
```

태그 값 가져오기:

```
principal.getTag("username") == "refund-agent"
```

패턴 일치:

```
principal.getTag("scope") like "*refund:write*"
```

### IAM 엔터티 속성
<a name="policy-iam-attributes"></a>

IAM 인증 게이트웨이의 경우 보안 주체에는 호출자의 IAM ARN이 포함된 `id` 속성이 있습니다. IAM 보안 주체는 태그를 지원하지 않습니다.

#### 보안 주체 개체 형식
<a name="policy-iam-principal-format"></a>

IAM 인증 게이트웨이의 Cedar 보안 주체는 입니다`AgentCore::IamEntity`. `principal.id` 속성에는 호출자의 IAM ARN이 포함됩니다.

수임된 IAM 역할을 통해 인증하는 호출자의 경우 `principal.id` 및 Cedar 엔터티 ID는 형식을 사용합니다.

 `arn:aws:sts::<account-id>:assumed-role/<role-name>` 

예를 들어 호출자가 역할을 수임하는 경우 Cedar `MyServiceRole`엔터티 ID는 다음과 같습니다.

 `AgentCore::IamEntity::"arn:aws:sts::123456789012:assumed-role/MyServiceRole"` 

이 형식은 호출 간에 안정적이므로 정확한 역할 일치`principal ==`에를 사용할 수 있습니다.

#### 와 패턴 일치 `like`
<a name="policy-iam-pattern-matching"></a>

더 광범위한 일치를 위해 와일드카드와 함께 `like` 연산자를 사용할 수도 있습니다.

```
// Match any role in a specific account
principal.id like "arn:aws:sts::123456789012:assumed-role/*"

// Match specific AWS account (any ARN format)
principal.id like "*:123456789012:*"

// Match a specific IAM role name across any account
principal.id like "arn:aws:sts::*:assumed-role/AdminRole"
```

## 논리 연산자
<a name="policy-logical-operators"></a>

논리 연산자를 사용하여 여러 조건을 결합합니다.
+  `&&` - AND(모든 조건이 true여야 함)
+  `||` - OR(하나 이상의 조건이 true여야 함)
+  `!` - NOT(조건 부정)

예제:

```
principal.hasTag("username") &&              // User must have username tag
principal.getTag("username") == "refund-agent" &&  // Username must be "refund-agent"
context.input.amount < 500                   // Amount must be less than $500
```