

# Ketentuan kebijakan
<a name="policy-conditions"></a>

Ketentuan menambahkan logika halus ke kebijakan yang menggunakan `when` dan klausa: `unless`

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

## Jenis kondisi
<a name="policy-condition-types"></a>
+  `when { …​ }`- Kebijakan hanya berlaku jika kondisinya benar
+  `unless { …​ }`- Kebijakan hanya berlaku jika kondisinya salah
+  `when guardrails { …​ }`- Kebijakan hanya berlaku jika kondisi yang ditegaskan pada output dari satu atau lebih pagar pembatas dinilai benar
+  `unless guardrails { …​ }`- Kebijakan hanya berlaku jika kondisi yang ditegaskan pada output dari satu atau lebih pagar pembatas dievaluasi salah

## Argumen alat
<a name="policy-tool-arguments"></a>

 `context.input`berisi argumen yang diteruskan ke panggilan alat:

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

Saat pengguna memanggil `RefundTool___process_refund` dengan argumen seperti:

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

Kebijakan dapat mengakses nilai-nilai ini:
+  `context.input.orderId`→ “12345"
+  `context.input.amount`→ 450
+  `context.input.reason`→ “Produk cacat”

Kebijakan dapat membuat keputusan berdasarkan parameter panggilan alat tertentu.

## Atribut utama
<a name="policy-principal-attributes"></a>

Atribut utama berbeda berdasarkan jenis otentikasi yang dikonfigurasi untuk AgentCore Gateway Anda.

### Klaim OAuth (tag)
<a name="policy-oauth-claims"></a>

Untuk OAuth-authenticated gateway, klaim JWT dari token OAuth disimpan sebagai tag pada entitas. OAuthUser Contoh klaim JWT:

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

Klaim ini menjadi tag pada entitas utama. Periksa apakah ada tag:

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

Dapatkan nilai tag:

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

Pencocokan pola:

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

### Atribut entitas IAM
<a name="policy-iam-attributes"></a>

Untuk IAM-authenticated gateway, prinsipal memiliki `id` atribut yang berisi IAM ARN pemanggil. Prinsipal IAM tidak mendukung tag.

#### Format entitas utama
<a name="policy-iam-principal-format"></a>

Prinsip Cedar untuk IAM-authenticated gateway adalah. `AgentCore::IamEntity` `principal.id`Atribut berisi IAM ARN pemanggil.

Untuk pemanggil yang mengautentikasi melalui peran IAM yang diasumsikan, ID entitas `principal.id` dan Cedar menggunakan format:

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

Misalnya, jika pemanggil mengasumsikan peran tersebut`MyServiceRole`, ID entitas Cedar adalah:

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

Format ini stabil di seluruh pemanggilan, sehingga Anda dapat menggunakan `principal ==` untuk pencocokan peran yang tepat.

#### Pola yang cocok dengan `suka`
<a name="policy-iam-pattern-matching"></a>

Anda juga dapat menggunakan `like` operator dengan wildcard untuk pencocokan yang lebih luas:

```
// 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"
```

## Operator logis
<a name="policy-logical-operators"></a>

Gabungkan beberapa kondisi menggunakan operator logis:
+  `&&`- DAN (semua kondisi harus benar)
+  `||`- ATAU (setidaknya satu syarat harus benar)
+  `!`- TIDAK (meniadakan suatu kondisi)

Contoh:

```
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
```