

# 時間ベースのポリシーのサポート
<a name="policy-time-based"></a>

AgentCore のポリシーは、`context.system.now`日時値を通じて Cedar ポリシーで時間ベースの制限をサポートしています。これにより、特定の日付、時刻、または時間範囲に基づいてポリシーを適用できます。

**Topics**
+ [仕組み](#policy-time-based-how)
+ [日時範囲の絶対制限](#policy-time-absolute)
+ [毎日の定期的な時間制限](#policy-time-daily)
+ [日付と時刻を組み合わせた制限](#policy-time-combined)
+ [タイムゾーン処理](#policy-time-timezone)
+ [自然言語を使用して時間ベースのポリシーを生成する](#policy-time-natural-language)

## 仕組み
<a name="policy-time-based-how"></a>

ポリシーの評価中、現在の UTC タイムスタンプが評価コンテキストの一部として提供されます。

```
// Current datetime in UTC
context.system.now
```

Cedar の日時関数を使用して、時間ベースの条件を作成できます。
+  `datetime("YYYY-MM-DDTHH:MM:SSZ")` — 日時値を作成する
+  `duration("Xh")` — 期間 (時、分、秒) を作成する
+  `.toTime()` — 日時から時刻を抽出する
+ 比較演算子: `<` 、`⇐`、`>`、`>=`、 `==`

## 日時範囲の絶対制限
<a name="policy-time-absolute"></a>

特定の暦期間内にポリシーを適用します。

### 例: プロモーション期間ポリシー
<a name="policy-time-absolute-example"></a>

```
permit(
  principal,
  action == AgentCore::Action::"RefundToolTarget___refund",
  resource == AgentCore::Gateway::"arn:aws:bedrock-agentcore:us-east-1:123456789012:gateway/my-gateway"
)
when {
  context.system.now >= datetime("2025-01-01T00:00:00Z") &&
  context.system.now < datetime("2025-01-31T23:59:59Z")
};
```

 **ユースケース:** 2025 年 1 月のみの返金を許可します。

## 毎日の定期的な時間制限
<a name="policy-time-daily"></a>

毎日繰り返される時刻に基づいてポリシーを適用します。

### 例: 営業時間ポリシー
<a name="policy-time-daily-example"></a>

```
permit(
  principal,
  action == AgentCore::Action::"RefundToolTarget___refund",
  resource == AgentCore::Gateway::"arn:aws:bedrock-agentcore:us-east-1:123456789012:gateway/my-gateway"
)
when {
  duration("9h") <= context.system.now.toTime() &&
  context.system.now.toTime() <= duration("17h")
};
```

 **ユースケース:** 営業時間内 (毎日午前 9 時～午後 5 時 UTC) にのみ返金を許可します。

## 日付と時刻を組み合わせた制限
<a name="policy-time-combined"></a>

絶対日付と毎日の時間制限を組み合わせてください。

### 例: 1 日時間限定プロモーション
<a name="policy-time-combined-example"></a>

```
permit(
  principal,
  action == AgentCore::Action::"DiscountToolTarget___apply_discount",
  resource == AgentCore::Gateway::"arn:aws:bedrock-agentcore:us-east-1:123456789012:gateway/my-gateway"
)
when {
  // Valid dates: Feb 1-28, 2025
  context.system.now >= datetime("2025-02-01T00:00:00Z") &&
  context.system.now < datetime("2025-03-01T00:00:00Z") &&
  // Valid hours: 9am-9pm UTC daily
  duration("9h") <= context.system.now.toTime() &&
  context.system.now.toTime() <= duration("21h")
};
```

 **ユースケース:** 割引ツールは、2025 年 2 月、毎日午前 9 時から午後 9 時までの間にのみ許可します。

## タイムゾーン処理
<a name="policy-time-timezone"></a>

すべての日時値は UTC である必要があります。ポリシーエンジンは、タイムゾーン変換またはタイムゾーン対応ポリシーをサポートしていません。

ポリシーで時間を指定するときは、常に UTC を使用します。ビジネスが別のタイムゾーンで運用されている場合は、ポリシーを作成する前にローカル時間を UTC に変換します。

## 自然言語を使用して時間ベースのポリシーを生成する
<a name="policy-time-natural-language"></a>

ポリシー作成サービスは、自然言語の説明から時間ベースのポリシーを生成できます。

### 例: 営業時間ポリシーを生成する
<a name="policy-time-nl-example"></a>

```
aws bedrock-agentcore-control start-policy-generation \
  --policy-engine-id MyEngine-abc123 \
  --name BusinessHoursOnly \
  --content '{
    "rawText": "Allow refunds only during business hours 9am to 5pm UTC"
  }' \
  --resource '{
    "arn": "arn:aws:bedrock-agentcore:us-east-1:123456789012:gateway/MyGateway-xyz789"
  }'
```

生成されたポリシー:

```
permit(
  principal,
  action == AgentCore::Action::"RefundToolTarget___refund",
  resource == AgentCore::Gateway::"arn:aws:bedrock-agentcore:us-east-1:123456789012:gateway/MyGateway-xyz789"
)
when {
  duration("9h") <= context.system.now.toTime() &&
  context.system.now.toTime() <= duration("17h")
};
```

### 自然言語のベストプラクティス
<a name="policy-time-nl-best-practices"></a>
+  **時刻を明確にする** — 「営業時間」の代わりに「午前 9 時から午後 5 時」を使用します。
+  **常に UTC を指定する** — あいまいさを避けるために「UTC」を含める
+  **日付に ISO 形式**を使用する — 「1 月 1 日」の代わりに「2025-01-01」を使用します
+  **特定の時間範囲を指定する** — "daytime" や "after hours" などのあいまいな用語は避けてください。

自然言語プロンプトの良い例:

```
"Allow refunds only between 9am and 5pm UTC"
"Allow payments except between 2am and 4am UTC daily"
"Allow discounts only from 2025-02-01 to 2025-02-28"
"Permit high-value transactions between 8am and 8pm UTC"
```