

本文属于机器翻译版本。若本译文内容与英语原文存在差异，则一律以英文原文为准。

# 轮换计划
<a name="rotate-secrets_schedule"></a>

Secrets Manager 会在您设置的轮换时段内按照计划轮换您的密钥。要设置计划和时段，请使用 **cron()** 或 **rate()** 表达式以及时段持续时间。Secrets Manager 将在轮换时段内随时轮换密钥。您可以在短至一小时的轮换时段内每四小时轮换一次密钥。

要启用轮换，请参阅：
+ [AWS Secrets Manager 密钥的托管轮换](rotate-secrets_managed.md)
+ [为 Amazon RDS、Amazon Aurora、Amazon Redshift 或 Amazon DocumentDB 密钥设置自动轮换](rotate-secrets_turn-on-for-db.md)
+ [为非数据库 AWS Secrets Manager 密钥设置自动轮换](rotate-secrets_turn-on-for-other.md)

Secrets Manager 轮换计划使用 UTC 时区。

## 轮换时段
<a name="rotate-secrets_rotation-windows"></a>

Secrets Manager 轮换时段与维护时段类似。当您想要轮换密钥时，可以设置轮换时段，Secrets Manager 会在轮换时段内的某个时间轮换您的密钥。

Secrets Manager 轮换时段总是按小时开始。对于使用 `rate()` 表达式（以天为单位）的轮换计划，轮换时段从午夜开始。您可以使用 `cron()` 表达式设置轮换时段的开始时间。有关示例，请参阅 [Cron 表达式](#rotate-secrets_schedule-cron)。

默认情况下，对于按*小时*计算的轮换计划，轮换时段在一小时后关闭；对于按*天*计算的轮换计划，轮换时段在一天结束时关闭。

要更改轮换时段的长度，请设置**时段持续时间**。您可以将轮换时段设置为短至一小时。该轮换时段不得延伸到下一个轮换时段。换句话说，对于以*小时*为单位的轮换计划，请确认轮换时段小于或等于轮换之间的小时数。对于以*天*为单位的轮换计划，请确认起始小时数加上时段持续时间小于或等于 24 小时。

## Rate 表达式
<a name="rotate-secrets_schedule-rate"></a>

Secrets Manager 速率表达式采用以下格式，其中*Value*为正整数`hour`，*Unit*可以是`hours``day`、、或`days`：

```
rate(Value Unit)
```

您可以每四小时轮换一次密钥。最长轮换周期为 999 天。示例：
+ `rate(4 hours)` 意味着密钥每四小时轮换一次。
+ `rate(1 day)` 意味着密钥每天轮换一次。
+ `rate(10 days)` 意味着密钥每 10 天轮换一次。

## Cron 表达式
<a name="rotate-secrets_schedule-cron"></a>

Secrets Manager cron 表达式具有以下格式：

```
cron(Minutes Hours Day-of-month Month Day-of-week Year)
```

包含小时增量的 cron 表达式每天都会重置。例如，`cron(0 4/12 * * ? *)` 表示凌晨 4:00、下午 4:00，然后是第二天凌晨 4:00、下午 4:00。Secrets Manager 轮换计划使用 UTC 时区。


| 示例计划 | Expression | 
| --- | --- | 
| 每八小时一次，从午夜开始。 |  `cron(0 /8 * * ? *)`  | 
| 每八小时一次，从早上 8:00 开始。 |  `cron(0 8/8 * * ? *)`  | 
| 每十小时一次，从凌晨 2:00 开始。 轮换时段将从 2:00、12:00 和 22:00 开始，然后在第二天的 2:00、12:00 和 22:00 进行。 |  `cron(0 2/10 * * ? *)`  | 
| 每天上午 10:00。 |  `cron(0 10 * * ? *)`  | 
|  每星期六下午 6:00。  |  `cron(0 18 ? * SAT *)`  | 
|  每月第 1 天上午 8:00。  |  `cron(0 8 1 * ? *)`  | 
|  每三个月第一个星期日凌晨 1:00。  |  `cron(0 1 ? 1/3 SUN#1 *)`  | 
|  每月最后一天下午 5:00。  |  `cron(0 17 L * ? *)`  | 
|  星期一到星期五上午 8:00。  |  `cron(0 8 ? * MON-FRI *)`  | 
|  每月第 1 天和第 15 天下午 4:00。  |  `cron(0 16 1,15 * ? *)`  | 
|  每月第一个星期日午夜。  |  `cron(0 0 ? * SUN#1 *)`  | 
|  从一月份开始，每 11 个月的第一个星期一的午夜。  |  `cron(0 0 ? 1/11 2#1 *)`  | 

### Secrets Manager 中的 Cron 表达式要求
<a name="rotate-secrets_schedule-cron-ASM"></a>

Secrets Manager 对可以用于 cron 表达式的内容有一些限制。Secrets Manager 的 cron 表达式的分钟字段必须填写 **0**，因为 Secrets Manager 轮换时段在整点开始。其年份字段必须填写 **\$1**，因为 Secrets Manager 不支持相隔一年以上的轮换计划。下表显示了可以使用的选项。


| **字段** | **值** | **通配符** | 
| --- | --- | --- | 
|  Minutes  | 必须为 0 | 无 | 
|  小时  |  0–23  |  使用 **/**（正斜杠）指定增量。例如，`2/10` 意味着从凌晨 2:00 开始每 10 小时一次。您可以每四小时轮换一次密钥。  | 
|  D ay-of-month  |  1-31  |  使用 **,**（逗号）包含其他值。例如，`1,15` 当前当月的第 1 天和第 15 天。 使用 **-**（短划线）指定范围。例如，`1–15` 表示当月的第 1 天到第 15 天。 使用 **\$1**（星号）包含该字段中的所有值。例如，`*` 表示当月的每一天。 **?**（问号）通配符用于指定一个或另一个。您无法在同一 cron 表达式中为 `Day-of-month` 和 `Day-of-week` 字段同时指定值。如果您在其中一个字段中指定了值，则必须在另一个字段中使用 **?**（问号）。 使用 **/**（正斜杠）指定增量。例如，`1/2` 表示从第 1 天开始每两天一次，换句话说，第 1 天、第 3 天、第 5 天，依此类推。 使用 **L** 指定当月的最后一天。 使用 ***DAY*L** 指定该月中最后一个命名的日期。例如，`SUNL` 表示当月的最后一个星期日。  | 
|  月份  |  1-12 或 JAN-DEC  |  使用 **,**（逗号）包含其他值。例如，`JAN,APR,JUL,OCT` 表示一月、四月、七月和十月。 使用 **-**（短划线）指定范围。例如，`1–3` 表示一年的第 1 个月至第 3 个月。 使用 **\$1**（星号）包含该字段中的所有值。例如，`*` 表示每个月。 使用 **/**（正斜杠）指定增量。例如，`1/3` 表示每三个月一次，从第 1 个月开始，即第 1、4、7 和 10 个月。  | 
|  D ay-of-week  |  1-7 或 SUN-SAT  |  使用 **\$1** 指定某个月内一周的星期几。例如，`TUE#3` 表示该月的第三个星期二。 使用 **,**（逗号）包含其他值。例如，`1,4` 表示一周的第一天和第四天。 使用 **-**（短划线）指定范围。例如，`1–4` 表示一周的第 1 天到第 4 天。 使用 **\$1**（星号）包含该字段中的所有值。例如，`*` 表示一周的每一天。 **?**（问号）通配符用于指定一个或另一个。您无法在同一 cron 表达式中为 `Day-of-month` 和 `Day-of-week` 字段同时指定值。如果您在其中一个字段中指定了值，则必须在另一个字段中使用 **?**（问号）。 使用 **/**（正斜杠）指定增量。例如，`1/2` 表示一周的每隔一天，从第一天开始，即第 1 天、第 3 天、第 5 天和第 7 天。 使用 **L** 指定一周的最后一天。  | 
|  Year  | 必须是 \$1 | 无 | 