

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

# を使用して自動ローテーションを設定する AWS CLI
<a name="rotate-secrets_turn-on-cli"></a>

このチュートリアルでは、 [Lambda 関数によるローテーション](rotate-secrets_lambda.md)を使用して を設定する方法について説明します AWS CLI。シークレットのローテーションを行うと、シークレット、ならびに、そのシークレットのデータベースまたはサービスの認証情報が更新されます。

また、コンソールを使用してローテーションを設定することもできます。データベースシークレットについては、「[データベースシークレットの自動ローテーション (コンソール)](rotate-secrets_turn-on-for-db.md)」を参照してください。他のすべてのタイプのシークレットについては、「[非データベースシークレットの自動ローテーション (コンソール)](rotate-secrets_turn-on-for-other.md)」を参照してください。

を使用してローテーションを設定するには AWS CLI、データベースシークレットをローテーションする場合は、まずローテーション戦略を選択する必要があります。交代ユーザー戦略を選択する場合は、データベースのスーパーユーザーの認証情報を含むシークレットを別途保存する必要があります。次に、ローテーション関数コードを記述します。Secrets Manager には、関数のベースとなるテンプレートが用意されています。コードを使用して Lambda 関数を作成し、Lambda 関数と Lambda 実行ロールの両方にアクセス許可を設定します。次のステップとして、Lambda 関数がネットワーク経由で Secrets Manager とデータベースまたはサービスの両方にアクセスできることを確認する必要があります。最後に、ローテーションのシークレットを設定します。

**Topics**
+ [データベースシークレットの前提条件: ローテーション戦略を選択する](#rotate-secrets_turn-on-cli_step1)
+ [ステップ 1: ローテーション関数コードを記述する](#rotate-secrets_turn-on-cli_write)
+ [ステップ 2 : Lambda 関数を作成する](#w2aac21c11c25c15)
+ [ステップ 3: ネットワークアクセスを設定する](#w2aac21c11c25c17)
+ [ステップ 4: シークレットのローテーションを設定する](#w2aac21c11c25c19)
+ [次の手順](#w2aac21c11c25c21)

## データベースシークレットの前提条件: ローテーション戦略を選択する
<a name="rotate-secrets_turn-on-cli_step1"></a>

Secrets Manager が提供する戦略の詳細については、「[Lambda 関数のローテーション戦略](rotation-strategy.md)」を参照してください。

### オプション 1: 単一ユーザー戦略
<a name="w2aac21c11c25c11b5"></a>

*単一ユーザー戦略*を選択した場合は、ステップ 1 に進むことができます。

### オプション 2: ユーザー交代戦略
<a name="w2aac21c11c25c11b7"></a>

*ユーザー交代戦略*を選択した場合は、以下を行う必要があります。
+ [シークレットを作成](create_secret.md#create_secret_cli)し、データベースのスーパーユーザーの認証情報をその中に保存します。ユーザー交代ローテーションでは、最初のユーザーのクローンが作成されますが、ほとんどのユーザーにはその権限がないため、スーパーユーザーの認証情報を含むシークレットが必要です。
+ スーパーユーザーシークレットの ARN を元のシークレットに追加します。詳細については、「[AWS Secrets Manager シークレットの JSON 構造](reference_secret_json_structure.md)」を参照してください。

Amazon RDS Proxy は、ユーザー交代戦略をサポートしていないことに注意してください。

## ステップ 1: ローテーション関数コードを記述する
<a name="rotate-secrets_turn-on-cli_write"></a>

シークレットをローテーションするには、ローテーション関数が必要です。ローテーション関数は、Secrets Manager がシークレットをローテーションさせるために呼び出す Lambda 関数です。詳細については、「[Lambda 関数によるローテーション](rotate-secrets_lambda.md)」を参照してください。このステップでは、シークレットを更新するコードと、シークレットの対象となるサービスまたはデータベースを記述します。

Secrets Manager は、[ローテーション関数のテンプレート](reference_available-rotation-templates.md) で Amazon RDS、Amazon Aurora、Amazon Redshift、Amazon DocumentDB データベースシークレットのテンプレートを提供します。

**ローテーション関数コードを記述する**

1. 次のいずれかを行います。
   + [ローテーション関数テンプレート](reference_available-rotation-templates.md)のリストを確認します。サービスとローテーション戦略に一致するものがある場合は、コードをコピーします。
   + その他のタイプのシークレットについては、独自のローテーション関数を記述します。手順については、「[Lambda ローテーション関数](rotate-secrets_lambda-functions.md)」を参照してください。

1. 必要な依存関係と共にファイルを ZIP ファイル ({{my-function.zip}}) として保存します。

## ステップ 2 : Lambda 関数を作成する
<a name="w2aac21c11c25c15"></a>

このステップでは、ステップ 1 で作成した ZIP ファイルを使用して Lambda 関数を作成します。関数が呼び出されたときに Lambda が引き受けるロール ([Lambda 実行ロール](https://docs.aws.amazon.com/lambda/latest/dg/lambda-intro-execution-role.html)) も設定します。

**Lambda ローテーション関数と実行ロールを作成するには**

1. Lambda 実行ロールの信頼ポリシーを作成した後に JSON ファイルとして保存します。詳細情報と例については、「[の Lambda ローテーション関数実行ロールのアクセス許可 AWS Secrets Manager](rotating-secrets-required-permissions-function.md)」を参照してください。ポリシーは次の条件を満たす必要があります。
   + ロールがシークレットの Secrets Manager オペレーションを呼び出すことを許可します。
   + 例えば、新しいパスワードを作成するなど、ロールがシークレットが使用するサービスを呼び出すことを許可します。

1. Lambda 実行ロールを作成し、[https://docs.aws.amazon.com/cli/latest/reference/iam/create-role.html](https://docs.aws.amazon.com/cli/latest/reference/iam/create-role.html) を呼び出して、以前のステップで作成した信頼ポリシーを適用します。

   ```
   aws iam create-role \
       --role-name {{rotation-lambda-role}} \
       --assume-role-policy-document file://{{trust-policy.json}}
   ```

1. [https://docs.aws.amazon.com/cli/latest/reference/lambda/create-function.html](https://docs.aws.amazon.com/cli/latest/reference/lambda/create-function.html) を呼び出して、ZIP ファイルから Lambda 関数を作成します。

   ```
   aws lambda create-function \
     --function-name {{my-rotation-function}} \
     --runtime python3.12 \
     --zip-file fileb://{{my-function.zip}} \
     --handler lambda_function.lambda_handler \
     --role arn:aws:iam::{{123456789012}}:role/service-role/{{rotation-lambda-role}}
   ```

1. Lambda 関数にリソースポリシーを設定し、[https://docs.aws.amazon.com/cli/latest/reference/lambda/add-permission.html](https://docs.aws.amazon.com/cli/latest/reference/lambda/add-permission.html) を呼び出すことで Secrets Manager がそれを呼び出せるようにします。

   ```
   aws lambda add-permission \
     --function-name {{my-rotation-function}} \
     --action lambda:InvokeFunction \
     --statement-id SecretsManager \
     --principal secretsmanager.amazonaws.com \
     --source-account {{123456789012}}
   ```

## ステップ 3: ネットワークアクセスを設定する
<a name="w2aac21c11c25c17"></a>

詳細については、「[AWS Lambda ローテーション関数のネットワークアクセス](rotation-function-network-access.md)」を参照してください。

## ステップ 4: シークレットのローテーションを設定する
<a name="w2aac21c11c25c19"></a>

シークレットの自動ローテーションをオンにするには、[https://docs.aws.amazon.com/cli/latest/reference/secretsmanager/rotate-secret.html](https://docs.aws.amazon.com/cli/latest/reference/secretsmanager/rotate-secret.html) を呼び出します。ローテーションスケジュールは `cron()` または `rate()` のスケジュール式で設定でき、ローテーション期間を設定できます。詳細については、「[ローテーションスケジュール](rotate-secrets_schedule.md)」を参照してください。

```
aws secretsmanager rotate-secret \
    --secret-id MySecret \
    --rotation-lambda-arn arn:aws:lambda:{{{{aws-region}}}}:{{123456789012}}:function:{{my-rotation-function}} \
    --rotation-rules "{\"ScheduleExpression\": \"{{cron(0 16 1,15 * ? *)}}\", \"Duration\": \"{{2h}}\"}"
```

## 次の手順
<a name="w2aac21c11c25c21"></a>

「[AWS Secrets Manager ローテーションのトラブルシューティング](troubleshoot_rotation.md)」を参照してください。