

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

# AWS Secrets Manager チュートリアル
<a name="tutorials"></a>

**Topics**
+ [

# Amazon CodeGuru Reviewer を使って、コードの中の保護されていないシークレットを見つける
](integrating-codeguru.md)
+ [

# ハードコードされたシークレットを に移動する AWS Secrets Manager
](hardcoded.md)
+ [

# ハードコードされたデータベース認証情報を に移動する AWS Secrets Manager
](hardcoded-db-creds.md)
+ [

# の交代ユーザーローテーションを設定する AWS Secrets Manager
](tutorials_rotation-alternating.md)
+ [

# のシングルユーザーローテーションを設定する AWS Secrets Manager
](tutorials_rotation-single.md)

# Amazon CodeGuru Reviewer を使って、コードの中の保護されていないシークレットを見つける
<a name="integrating-codeguru"></a>

Amazon CodeGuru Reviewer は、プログラム解析と機械学習により、開発者が見つけにくい潜在的な不具合を検出し、Java や Python のコードの改善案を提示するサービスです。CodeGuru Reviewer は Secrets Manager と統合し、コードにある保護されていないシークレットを見つけます。検出できるシークレットの種類については、「*Amazon CodeGuru Reviewer User Guide*」(Amazon CodeGuru Reviewer　ユーザーガイド) の「[Types of secrets detected by CodeGuru Reviewer](https://docs.aws.amazon.com/codeguru/latest/reviewer-ug/recommendations.html#secrets-found-types)」(CodeGuru Reviewer で検出されるシークレットの種類) を参照してください。

ハードコードされたシークレットを見つけたら、それを置き換えるためにアクションを起こします。
+ [ハードコードされたデータベース認証情報を に移動する AWS Secrets Manager](hardcoded-db-creds.md)
+ [ハードコードされたシークレットを に移動する AWS Secrets Manager](hardcoded.md)

# ハードコードされたシークレットを に移動する AWS Secrets Manager
<a name="hardcoded"></a>

コード内に平文のシークレットがある場合は、ローテーションしてシークレットマネージャーに保存することをお勧めします。Secrets Managerへの移行により、コードがSecrets Managerから直接シークレットを取得するため、コードを見た人が誰でもシークレットを見ることができるという問題は解決されます。シークレットをローテーションすると、現在ハードコードされているシークレットが無効になります。

データベース認証のシークレットについては、[ハードコードされたデータベース認証情報を に移動する AWS Secrets Manager](hardcoded-db-creds.md) を参照してください。

開始する前に、シークレットへのアクセスが必要なユーザーを決める必要があります。シークレットへのアクセス権限を管理するために、2 つの IAM ロールを使用することをお勧めします。
+ 組織のシークレットを管理するロール。詳細については、「[Secrets Manager 管理者のアクセス許可](auth-and-access.md#auth-and-access_admin)」を参照してください。このロールを使用してシークレットを作成し、ローテーションします。
+ 実行時に資格情報を使用できるロール、このチュートリアルでは *RoleToRetrieveSecretAtRuntime* です。コードは、このロールを担ってシークレットを取得します。このチュートリアルでは、ロールに 1 つのシークレットの値を取得する権限のみを与え、シークレットの値のリソース・ポリシーを使用して権限を付与しています。代替手段については、[次の手順](#hardcoded_step-next) を参照してください。

**Topics**
+ [

## ステップ 1: シークレットを作成する
](#hardcoded_step-1)
+ [

## ステップ 2: コードを更新する
](#hardcoded_step-2)
+ [

## ステップ 3: シークレットを更新する
](#hardcoded_step-3)
+ [

## 次の手順
](#hardcoded_step-next)

## ステップ 1: シークレットを作成する
<a name="hardcoded_step-1"></a>

最初のステップは、既存のハードコードされたシークレットを、Secrets Manager にコピーすることです。シークレットが AWS リソースに関連している場合は、リソースと同じリージョンに保存します。それ以外の場合は、ユースケースに応じて最もレイテンシーの低いリージョンに保存します。

**シークレットを作成するには (コンソール)**

1. Secrets Manager のコンソール ([https://console.aws.amazon.com/secretsmanager/](https://console.aws.amazon.com/secretsmanager/)) を開きます。

1. **[Store a new secret]** (新しいシークレットを保存する) を選択します｡

1. [**Choose secret type**] (シークレットタイプを選択する) ページで、次の操作を行います。

   1. **[Secret type] (シークレットタイプ)** で、**[Other type of secret]** (他の種類のシークレット) を選択します。

   1. シークレットの**キーとバリューのペア**、または**平文**で入力してください。例:

------
#### [ API key ]

      キーと値のペアとして次を入力します。

      **ClientID**: *client\$1id*

      **ClientSecret** : *wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY*

------
#### [ OAuth token ]

      プレーンテキストとして入力します。

      *AKIAI44QH8DHBEXAMPLE*

------
#### [ Digital certificate ]

      プレーンテキストとして入力します。

      ```
      -----BEGIN CERTIFICATE-----
      EXAMPLE
      -----END CERTIFICATE-----
      ```

------
#### [ Private key ]

      プレーンテキストとして入力します。

      ```
      –--- BEGIN PRIVATE KEY ----
      EXAMPLE
      ––-- END PRIVATE KEY –---
      ```

------

   1. **[Secrets Manager] (暗号化キー)** で **aws/secretsmanager** を選択すると、Secrets Manager に AWS マネージドキー マネージドキーを使用します。このキーを使用してもコストは発生しません。独自のカスタマーマネージドキーを使用することもできます (例えば、[別の AWS アカウントアカウントからシークレットにアクセスする場合など](auth-and-access_examples_cross.md))。カスタマーマネージドキーの使用料金の詳細については、「[料金](intro.md#asm_pricing)」を参照してください。

   1. [**次へ**] を選択します。

1. [**Choose secret type**] (シークレットタイプを選択する) ページで、次の操作を行います。

   1. わかりやすい**シークレット名**と**説明**を入力します。

   1. **[Resource permissions]** (リソースのアクセス許可) で、**[Edit permissions]** (アクセス許可の編集) を選択します。*RoleToRetrieveSecretAtRuntime* がシークレットを取得できるように以下のポリシーを貼り付け、**[保存]**を選択します。

------
#### [ JSON ]

****  

      ```
      {
          "Version":"2012-10-17",		 	 	 
          "Statement": [
              {
                  "Effect": "Allow",
                  "Principal": {
                      "AWS": "arn:aws:iam::111122223333:role/RoleToRetrieveSecretAtRuntime"
                  },
                  "Action": "secretsmanager:GetSecretValue",
                  "Resource": "*"
              }
          ]
      }
      ```

------

   1. ページの最下部にある **[Next]** (次へ) を選択します。

1. [**Configure rotation**] (ローテーションを設定する) ページで、回転をオフにしておきます。[**次へ**] を選択します。

1. **[Review]** (レビュー) ページで、シークレットの詳細を確認し、**[Store]** (保存) を選択します。

## ステップ 2: コードを更新する
<a name="hardcoded_step-2"></a>

コードは、シークレットを取得できるように、IAMロール *RoleToRetrieveSecretAtRuntime* を想定している必要があります。詳細については、[「IAM ロールへの切り替え (AWS API)](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_use_switch-role-api.html)」を参照してください。

次に、Secrets Manager が提供するサンプルコードを使用して、Secrets Manager からシークレットを取得するようにコードを更新します。

**サンプルコードを見るには**

1. Secrets Manager コンソール ([https://console.aws.amazon.com/secretsmanager/](https://console.aws.amazon.com/secretsmanager/)) を開きます。

1. **[Secrets]** (シークレット) ページで、自分のシークレットを選択します。

1. **[サンプルコード]** を下にスクロールします。プログラミング言語を選択し、コードスニペットをコピーします。

アプリケーションで、ハードコードされたシークレットを削除し、コードスニペットを貼り付けます。コード言語によっては、スニペットの中に関数やメソッドの呼び出しを追加する必要があります。

ハードコードされたシークレットを使用して、アプリケーションが期待通りに動作することをテストしてください。

## ステップ 3: シークレットを更新する
<a name="hardcoded_step-3"></a>

最後のステップは、ハードコードされたシークレットを失効させ、更新することです。シークレットの発行元を参照し、シークレットの取り消しや更新の手順を確認します。例えば、現在のシークレットを無効にして、新しいシークレットを生成する必要がある場合があります。

**シークレットを新しい値で更新するには**

1. Secrets Manager のコンソール ([https://console.aws.amazon.com/secretsmanager/](https://console.aws.amazon.com/secretsmanager/)) を開きます。

1. **[Secrets]** (シークレット)で、シークレットを選択します。

1. **[Secret details]** (シークレットの詳細) ページでスクロールダウンし、**[Rotation configuration] (ローテーション設定)** セクションの **[Edit rotation] (ローテーションの編集)** を選択します。

1. シークレットを更新し、**[Save]** (保存) を選択します。

次に、新しいシークレットを使用して、アプリケーションが期待どおりに動作するかどうかテストします。

## 次の手順
<a name="hardcoded_step-next"></a>

コードからハードコードされたシークレットを削除した後、次に検討すべきいくつかの項目を挙げます。
+ Java や Python のアプリケーションでハードコードされたシークレットを見つけるには、[Amazon CodeGuru Reviewer](https://docs.aws.amazon.com/codeguru/latest/reviewer-ug/welcome.html) をお勧めします。
+ シークレットをキャッシュすることで、パフォーマンスを向上させ、コストを削減することができます。詳細については、「[からシークレットを取得する AWS Secrets Manager](retrieving-secrets.md)」を参照してください。
+ 複数のリージョンからアクセスするシークレットについては、レイテンシーを改善するためにシークレットをレプリケーションすることを検討してください。詳細については、「[リージョン間でシー AWS Secrets Manager クレットをレプリケートする](replicate-secrets.md)」を参照してください。
+ このチュートリアルでは、*RoleToRetrieveSecretAtRuntime* にシークレット値を取得する権限のみを付与しました。シークレットに関するメタデータの取得やシークレットの一覧の表示など、より多くの権限をロールに付与するには、[リソースベースのポリシー](auth-and-access_resource-policies.md) を参照してください。
+ このチュートリアルでは、次のアクセス許可を付与しました。*RoleToRetrieveSecretAtRuntime を取得するための役割*シークレットのリソースポリシーを使用します。権限を付与するその他の方法については、「[アイデンティティベースのポリシー](auth-and-access_iam-policies.md)」を参照してください。

# ハードコードされたデータベース認証情報を に移動する AWS Secrets Manager
<a name="hardcoded-db-creds"></a>

コード内に平文のデータベース認証情報がある場合は、認証情報を Secrets Manager に移動して、すぐにローテートすることをお勧めします。認証情報を Secrets Manager に移動することで、コードを見た人に認証情報が見えるという問題が解決されます。なぜなら、今後、あなたのコードは Secrets Manager から直接認証情報を取得するからです。シークレットを回転させると、パスワードが更新され、現在のハードコードされたパスワードが無効となるように取り消されます。

Amazon RDS、Amazon Redshift、および Amazon DocumentDB データベースの場合、このページの手順を使用してハードコードされた認証情報を Secrets Manager に移動させることができます。他のタイプの認証情報や他のシークレットについては、「[ハードコードされたシークレットを に移動する AWS Secrets Manager](hardcoded.md)」を参照してください。

開始する前に、シークレットへのアクセスが必要なユーザーを決める必要があります。シークレットへのアクセス権限を管理するために、2 つの IAM ロールを使用することをお勧めします。
+ 組織のシークレットを管理するロール。詳細については、「[Secrets Manager 管理者のアクセス許可](auth-and-access.md#auth-and-access_admin)」を参照してください。このロールを使用してシークレットを作成し、ローテーションします。
+ 実行時に認証情報を使用できるロール、このチュートリアルでは *RoleToRetrieveSecretAtRuntime* です。コードは、このロールを担ってシークレットを取得します。

**Topics**
+ [

## ステップ 1: シークレットを作成する
](#hardcoded-db-creds_step2)
+ [

## ステップ 2: コードを更新する
](#hardcoded-db-creds_step3)
+ [

## ステップ 3: シークレットをローテーションする
](#hardcoded-db-creds_step5)
+ [

## 次の手順
](#hardcoded-db-creds_nextsteps)

## ステップ 1: シークレットを作成する
<a name="hardcoded-db-creds_step2"></a>

最初のステップは、既存のハードコードされた認証情報を、Secrets Manager でシークレットにコピーすることです。レイテンシーを最低限に抑えるために、シークレットをデータベースと同じリージョンに保存します。

**シークレットを作成する**

1. Secrets Manager のコンソール ([https://console.aws.amazon.com/secretsmanager/](https://console.aws.amazon.com/secretsmanager/)) を開きます。

1. **[Store a new secret]** (新しいシークレットを保存する) を選択します｡

1. [**Choose secret type**] (シークレットタイプを選択する) ページで、次の操作を行います。

   1. **[Secret type]** (シークレットタイプ) で、保存するデータベース認証情報のタイプを選択します。
      + **Amazon RDS データベース**
      + **Amazon DocumentDB データベース**
      + **Amazon Redshift データウェアハウス**。
      + その他のタイプのシークレットについては、「[ハードコードされたシークレットを置き換える](https://docs.aws.amazon.com/secretsmanager/latest/userguide/hardcoded.html)」を参照してください。

   1. **認証情報**を使用する場合、データベースの既存のハードコードされた認証情報を入力します。

   1. **[Secrets Manager] (暗号化キー)** で **aws/secretsmanager** を選択すると、Secrets Manager に AWS マネージドキー マネージドキーを使用します。このキーを使用してもコストは発生しません。独自のカスタマーマネージドキーを使用することもできます (例えば、[別の AWS アカウントアカウントからシークレットにアクセスする場合など](auth-and-access_examples_cross.md))。カスタマーマネージドキーの使用料金の詳細については、「[料金](intro.md#asm_pricing)」を参照してください。

   1. **[Database]** (データベース) で、データベースを選択します。

   1. [**次へ**] を選択します。

1. [**Configure secret**] (シークレットを設定する) ページで、次の操作を行います。

   1. わかりやすい**シークレット名**と**説明**を入力します。

   1. **[Resource permissions]** (リソースのアクセス許可) で、**[Edit permissions]** (アクセス許可の編集) を選択します。*RoleToRetrieveSecretAtRuntime* がシークレットを取得できるように以下のポリシーを貼り付け、**[保存]**を選択します。

------
#### [ JSON ]

****  

      ```
      {
          "Version":"2012-10-17",		 	 	 
          "Statement": [
              {
                  "Effect": "Allow",
                  "Principal": {
                      "AWS": "arn:aws:iam::111122223333:role/RoleToRetrieveSecretAtRuntime"
                  },
                  "Action": "secretsmanager:GetSecretValue",
                  "Resource": "*"
              }
          ]
      }
      ```

------

   1. ページの最下部にある **[Next]** (次へ) を選択します。

1. リポジトリの [**Configure rotation**] (ローテーションを設定する) ページでは、今のところローテーションはオフにしておきます。後でオンにします。**[Next]** (次へ) を選択します。

1. **[Review]** (レビュー) ページで、シークレットの詳細を確認し、**[Store]** (保存) を選択します。

## ステップ 2: コードを更新する
<a name="hardcoded-db-creds_step3"></a>

コードは、シークレットを取得できるように、IAMロール *RoleToRetrieveSecretAtRuntime* を想定している必要があります。詳細については、[「IAM ロールへの切り替え (AWS API)](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_use_switch-role-api.html)」を参照してください。

次に、Secrets Manager が提供するサンプルコードを使用して、Secrets Manager からシークレットを取得するようにコードを更新します。

**サンプルコードを見るには**

1. Secrets Manager コンソール ([https://console.aws.amazon.com/secretsmanager/](https://console.aws.amazon.com/secretsmanager/)) を開きます。

1. **[Secrets]** (シークレット) ページで、自分のシークレットを選択します。

1. **[サンプルコード]** を下にスクロールします。言語を選択し、コードスニペットをコピーします。

アプリケーションで、ハードコードされた認証情報を削除し、コードスニペットを貼り付けます。コード言語によっては、スニペットの中に関数やメソッドの呼び出しを追加する必要があります。

ハードコードされた認証情報の代わりにシークレットを使用して、アプリケーションが期待通りに動作することをテストしてください。

## ステップ 3: シークレットをローテーションする
<a name="hardcoded-db-creds_step5"></a>

最後のステップは、シークレットのローテーションによってハードコードされた認証情報を失効させることです。*ローテーション*とは、シークレットを定期的に更新するためのプロセスのことです。シークレットのローテーションを行うと、シークレットとデータベースの両方で認証情報が更新されます。Secrets Manager は、設定したスケジュールで自動的にシークレットをローテーションすることができます。

ローテーションの設定の一部として、Lambda ローテーション関数が Secrets Manager とデータベースの両方にアクセスできることを確認する必要があります。自動ローテーションをオンにすると、Secrets Manager は Lambda ローテーション機能をデータベースと同じ VPC に作成し、データベースへのネットワークアクセスができるようにします。Lambda ローテーション関数は、Secrets Manager を呼び出してシークレットを更新することも可能でなければなりません。Lambda から Secrets Manager への呼び出しが AWS インフラストラクチャを離れないように、VPC に Secrets Manager エンドポイントを作成することをお勧めします。手順については、「[AWS Secrets Manager VPC エンドポイントの使用](vpc-endpoint-overview.md)」を参照してください。

**ローテーションを有効にするには**

1. Secrets Manager コンソール ([https://console.aws.amazon.com/secretsmanager/](https://console.aws.amazon.com/secretsmanager/)) を開きます。

1. **[Secrets]** (シークレット) ページで、自分のシークレットを選択します。

1. **シークレットの詳細**ページで、**[Rotation configuration]** (ローテーション設定) セクションの **[Edit rotation]** (ローテーションの編集) を選択します。

1. **[Edit rotation configuration]** (ローテーション設定の編集) ダイアログボックスで、次の操作を行います。

   1. **[Automatic rotation]** (自動ローテーション) を有効化します。

   1. **[ローテーションのスケジュール]**で、UTC タイムゾーンでスケジュールを入力します。

   1. シークレットを保存したときにシークレットをローテーションするには、**[Rotate immediately when the secret is stored]** (シークレットが保存されたときにすぐにローテーションする) を選択します。

   1. **ローテーション関数**で、**[Create a new Lambda function]** (新しい Lambda 関数の作成) を選択し、新しい関数の名前を入力します。Secrets Manager は、関数名の先頭に「SecretsManager」を追加します。

   1. **[ローテーション戦略]** で、**[単一ユーザー]** を選択します。

   1. **[保存]** を選択します。

**シークレットがローテーションしたことを確認するには**

1. Secrets Manager のコンソール ([https://console.aws.amazon.com/secretsmanager/](https://console.aws.amazon.com/secretsmanager/)) を開きます。

1. **[Secrets]** (シークレット) で、シークレットを選択します。

1. **[Secret details]** (シークレットの詳細) ページで、下へスクロールし、**[Retrieve secret value]** (シークレットの値を取得する) を選択します。

   シークレットの値が変更された場合、ローテーションは成功したことになります。シークレットの値が変更されなかった場合、ローテーション関数の CloudWatch Logs を見て [ローテーションのトラブルシューティング](troubleshoot_rotation.md) する必要があります。

ローテーションされたシークレットを使用して、アプリケーションが期待どおりに動作するかどうかテストします。

## 次の手順
<a name="hardcoded-db-creds_nextsteps"></a>

コードからハードコードされたシークレットを削除した後、次に検討すべきいくつかの項目を挙げます。
+ シークレットをキャッシュすることで、パフォーマンスを向上させ、コストを削減することができます。詳細については、「[からシークレットを取得する AWS Secrets Manager](retrieving-secrets.md)」を参照してください。
+ 別のローテーションスケジュールを選択できます。詳細については、「[ローテーションスケジュール](rotate-secrets_schedule.md)」を参照してください。
+ Java や Python のアプリケーションでハードコードされたシークレットを見つけるには、[Amazon CodeGuru Reviewer](https://docs.aws.amazon.com/codeguru/latest/reviewer-ug/welcome.html) をお勧めします。

# の交代ユーザーローテーションを設定する AWS Secrets Manager
<a name="tutorials_rotation-alternating"></a>

このチュートリアルでは、データベース認証情報を含むシークレットに対して、交代ユーザーローテーションを設定する方法について学びます。*交代ユーザーローテーション*とは、Secrets Manager がユーザーのクローンを作成し、ユーザーの認証情報を交代で更新するローテーション戦略です。この戦略は、シークレットの高可用性が必要な場合に適しています。これは、代替ユーザーの 1 人がデータベースへの現在の認証情報を保持し、もう 1 人が更新されているためです。詳細については、「[ローテーション戦略: 交代ユーザー](rotation-strategy.md#rotating-secrets-two-users)」を参照してください。

交代ユーザーローテーションを設定するには、次の 2 つのシークレットが必要です。
+ ローテーションさせたい認証情報を持つ 1 つのシークレット。
+ 管理者認証情報を持つ 2 番目のシークレット。

  このユーザーには、最初のユーザーのクローンを作成し、最初のユーザーのパスワードを変更する権限があります。このチュートリアルでは、Amazon RDS で管理者ユーザー用にこのシークレットを作成します。Amazon RDS は、管理者パスワードのローテーションも管理します。詳細については、「[AWS Secrets Manager シークレットのマネージドローテーション](rotate-secrets_managed.md)」を参照してください。

このチュートリアルの最初の部分では、現実的な環境をセットアップします。ローテーションの仕組みをご覧いただくため、このチュートリアルでは Amazon RDS MySQL データベースの例を使用します。セキュリティのため、データベースはインバウンドのインターネットアクセスを制限する VPC 内にあります。お使いのローカルコンピュータからインターネット経由でこのデータベースに接続するときは、このデータベースに接続できるが、インターネット経由での SSH 接続も可能な VPC 内のサーバー、*踏み台ホスト*を使用します。このチュートリアルで使用する踏み台ホストは Amazon EC2 インスタンスであり、このインスタンスのセキュリティグループでは、他のタイプの接続は禁止されています。

チュートリアルを終了したら、チュートリアルからリソースをクリーンアップすることをお勧めします。本番環境では使用しないでください。

Secrets Manager のローテーションでは、 AWS Lambda 関数を使用してシークレットとデータベースを更新します。Lambda 関数を使用する場合のコストについては、「[料金](intro.md#asm_pricing)」を参照してください。

**Topics**
+ [

## アクセス許可
](#tutorials_rotation-alternating-permissions)
+ [

## 前提条件
](#tutorials_rotation-alternating-step-setup)
+ [

## ステップ 1: Amazon RDS データベースユーザーを作成する
](#tutorials_rotation-alternating-step-database)
+ [

## ステップ 2: ユーザーの認証情報用のシークレットを作成する
](#tutorials_rotation-alternating_step-rotate)
+ [

## ステップ 3: ローテーションされたシークレットをテストする
](#tutorials_rotation-alternating_step-test-secret)
+ [

## ステップ 4: リソースをクリーンアップする
](#tutorials_rotation-alternating_step-cleanup)
+ [

## 次の手順
](#tutorials_rotation-alternating_step-next)

## アクセス許可
<a name="tutorials_rotation-alternating-permissions"></a>

このチュートリアルの前提条件として、 AWS アカウントの管理者権限が必要となります。本番稼働環境では、各ステップで異なるロールを使用するのがベストプラクティスとなります。例えば、Amazon RDS データベースの作成にはデータベース管理者権限を持つロールを使用し、VPC とセキュリティグループの設定にはネットワーク管理者権限を持つロールを使用します。チュートリアルの各ステップでは同じアイデンティティを使用することが推奨されます。

本番稼働環境で許可を設定する方法については、「[の認証とアクセスコントロール AWS Secrets Manager](auth-and-access.md)」を参照してください。

## 前提条件
<a name="tutorials_rotation-alternating-step-setup"></a>

**Topics**
+ [

### 前提条件 A: Amazon VPC
](#tutorials_rotation-alternating-step-vpc)
+ [

### 前提条件 B: Amazon EC2 インスタンス
](#tutorials_rotation-alternating-step-setup_ec2)
+ [

### 前提条件 C: Amazon RDS データベースと、管理者認証情報の Secrets Manager シークレット
](#tutorials_rotation-alternating-step-database)
+ [

### 前提条件 D: ローカル コンピューターが EC2 インスタンスに接続できるようにする
](#tutorials_rotation-alternating-step-ec2connect)

### 前提条件 A: Amazon VPC
<a name="tutorials_rotation-alternating-step-vpc"></a>

このステップでは、Amazon RDS データベースと Amazon EC2 インスタンスを起動できる VPC を作成します。後のステップで、コンピューターを使用してインターネット経由で踏み台に接続し、データベースに接続するため、VPC からのトラフィックを許可する必要があります。これを行うために、Amazon VPC はインターネットゲートウェイを VPC にアタッチし、ルートテーブルにルートを追加して、VPC の外部に向かうトラフィックがインターネットゲートウェイに送信されるようにします。

VPC 内で、Secrets Manager エンドポイントと Amazon RDS エンドポイントを作成します。後のステップで自動ローテーションを設定すると、Secrets Manager は VPC 内に Lambda ローテーション関数を作成して、データベースにアクセスできるようにします。また、Lambda ローテーション関数は Secrets Manager を呼び出してシークレットを更新し、Amazon RDS を呼び出してデータベース接続情報を取得します。VPC 内にエンドポイントを作成することで、Lambda 関数から Secrets Manager と Amazon RDS への呼び出しが AWS インフラストラクチャを離れないようにします。代わりに、VPC 内のエンドポイントにルーティングされます。

**VPC を作成するには**

1. Amazon VPC コンソールの [https://console.aws.amazon.com/vpc/](https://console.aws.amazon.com/vpc/) を開いてください。

1. **[Create VPC（VPC の作成）]** を選択します。

1. **[VPC の作成]** ページで、**[VPC など]** を選択します。

1. **[名前タグの自動生成]** で、**[自動生成]** に **SecretsManagerTutorial** と入力します。

1. **DNS オプションでは**、**Enable DNS hostnames** と **Enable DNS resolution** の両方を選択します。

1. **[Create VPC（VPC の作成）]** を選択します。

**VPC 内に Secrets Manager エンドポイントを作成するには**

1. Amazon VPC コンソールの **[エンドポイント**] 下で、**[エンドポイントの作成]** を選択します。

1. **[Endpoint Settings]** (エンドポイントの設定) の **[Name]** (名前) に **SecretsManagerTutorialEndpoint** と入力します。

1. **[Services]** (サービス) で **secretsmanager** と入力して、リストをフィルタリングし、 AWS リージョンで Secrets Manager エンドポイントを選択します。米国東部 (バージニア北部) であれば、`com.amazonaws.us-east-1.secretsmanager` を選択します。

1. **[VPC]** で、**vpc\$1\$1\$1\$1 (SecretsManagerTutorial)** を選択します。

1. **[Subnets]** (サブネット) で、すべての **[Availability Zones]** (アベイラビリティーゾーン) を選択し、各アベイラビリティーゾーンに **[Subnet ID]** (サブネット ID) を挿入します。

1. **[IP address type]** (IP アドレスタイプ) で、**IPv4** を選択します。

1. **[Security groups]** (セキュリティグループ) で、デフォルトのセキュリティグループを選択します。

1. **[Policy type]** (ポリシーの種類) で、**Full access** を選択します。

1. **エンドポイントの作成** を選択します。

**VPC 内に Amazon RDS エンドポイントを作成するには**

1. Amazon VPC コンソールの **[エンドポイント**] 下で、**[エンドポイントの作成]** を選択します。

1. **[Endpoint Settings]** (エンドポイントの設定) の **[Name]** (名前) に **RDSTutorialEndpoint** と入力します。

1. **[Services]** (サービス) で、**rds** と入力してリストをフィルタリングし、 AWS リージョンで Amazon RDS エンドポイントを選択します。米国東部 (バージニア北部) であれば、`com.amazonaws.us-east-1.rds` を選択します。

1. **[VPC]** で、**vpc\$1\$1\$1\$1 (SecretsManagerTutorial)** を選択します。

1. **[Subnets]** (サブネット) で、すべての **[Availability Zones]** (アベイラビリティーゾーン) を選択し、各アベイラビリティーゾーンに **[Subnet ID]** (サブネット ID) を挿入します。

1. **[IP address type]** (IP アドレスタイプ) で、**IPv4** を選択します。

1. **[Security groups]** (セキュリティグループ) で、デフォルトのセキュリティグループを選択します。

1. **[Policy type]** (ポリシーの種類) で、**Full access** を選択します。

1. **エンドポイントの作成** を選択します。

### 前提条件 B: Amazon EC2 インスタンス
<a name="tutorials_rotation-alternating-step-setup_ec2"></a>

後のステップで作成する Amazon RDS データベースは VPC にあるため、それにアクセスするには踏み台ホストが必要です。踏み台ホストも VPC 内にありますが、後のステップで、セキュリティグループを構成して、ローカルコンピューターが SSH で踏み台ホストに接続できるようにします。

**踏み台ホストの EC2 インスタンスを作成するには**

1. Amazon EC2 コンソールの [https://console.aws.amazon.com/ec2/](https://console.aws.amazon.com/ec2/) を開いてください。

1. **[Instances]** (インスタンス) を選択し、**[Launch instance]** (インスタンスの作成) を選択します。

1. **[Name and tags]** (名前とタグ) の、**[Name]** (名前) で、**SecretsManagerTutorialInstance** と入力します。

1. **[アプリケーションと OS イメージ]** で、デフォルトの **Amazon Linux 2 AMI (HMV) Kernel 5.10** をそのまま使用します。

1. **[インスタンス タイプ]** で、デフォルトの **t2.micro** をそのまま使用します。

1. **[Key pair]** (キーペア) で **[Create key pair]** (キーペアの作成) を選択します。

   **[キーペア作成]** ダイアログボックスの **[キーペア名]** に **SecretsManagerTutorialKeyPair** を入力し、**[作成]** を選択します。

   キーペアは自動的にダウンロードされます。

1. **[Network settings]** (ネットワーク設定) で、**[Edit]** (編集) を選択し、次の操作を実行します。

   1. VPCで、**vpc-\$1\$1\$1\$1 SecretsManagerTutorial** を選択します。

   1. **[Auto-assign Public IP]** (自動割り当てパブリック IP) で、**Enable** を選択します。

   1. **[Firewall]** (ファイアウォール) の **既存のセキュリティグループ** を選択します。

   1. **[Common security groups]** (共通のセキュリティグループ) で、**default** を選択します。

1. **[インスタンスを起動]** を選択します。

### 前提条件 C: Amazon RDS データベースと、管理者認証情報の Secrets Manager シークレット
<a name="tutorials_rotation-alternating-step-database"></a>

このステップでは、Amazon RDS MySQL データベースを作成し、Amazon RDS が管理者認証情報を含むシークレットを作成するように設定します。次に、Amazon RDS が管理者シークレットのローテーションを自動的に管理します。詳細については、「[マネージドローテーション](rotate-secrets_managed.md)」を参照してください。

データベース作成の一環として、前のステップで作成した踏み台ホストを指定します。次に、Amazon RDS は、データベースとインスタンスが相互にアクセスできるようにセキュリティグループを設定します。インスタンスにアタッチされたセキュリティグループにルールを追加して、ローカルコンピューターもインスタンスに接続できるようにします。

**管理者認証情報を含む Secrets Manager シークレットを使用して Amazon RDS データベースを作成するには**

1. Amazon RDS コンソールで、**[Databases]** (データベース) を選択します。

1. **[Engine options]** (エンジンオプション) セクションで、**エンジンタイプ**として **MySQL** を選択します。

1. **[Templates]** (テンプレート) セクションで、**Free tier** を選択します。

1. **[Settings]** (設定) セクションで、以下の手順を実行します:

   1. **[DB instance identifier]** (DB インスタンス識別子) に**SecretsManagerTutorial** と入力します。

   1. **認証情報設定**で、 **でマスター認証情報を管理する AWS Secrets Manager**を選択します。

1. **[Connect]** (接続) セクションの **[Computer resource]** (コンピューターリソース) で、**[EC2 computer resource]** を選択し、**[EC2 インスタンス]** (EC2 コンピュータリソースに接続) で **SecretsManagerTutorialInstance** を選択します。

1. **[データベースの作成]** を選択します。

### 前提条件 D: ローカル コンピューターが EC2 インスタンスに接続できるようにする
<a name="tutorials_rotation-alternating-step-ec2connect"></a>

このステップでは、前提条件 B で作成した EC2 インスタンスを構成して、ローカルコンピューターが EC2 インスタンスに接続できるようにします。これを行うには、Amazon RDS が Prereq C に追加したセキュリティ グループを編集して、コンピューターの IP アドレスが SSH に接続できるようにするルールを含めます。このルールにより、ローカルコンピューター (現在の IP アドレスで識別される) は、インターネット経由で SSH を使用して踏み台ホストに接続できます。

**ローカルコンピューターが EC2 インスタンスに接続できるようにするには**

1. Amazon EC2 コンソールの [https://console.aws.amazon.com/ec2/](https://console.aws.amazon.com/ec2/) を開いてください。

1. EC2 インスタンスの **[SecretsManager TutorialInstance]** (セキュリティマネージャー チュートリアルインスタンス) の **[Security]** (セキュリティ) タブの **[Security groups]** (セキュリティグループ) で、**sg-\$1\$1\$1 (ec2-rds-X)** を選択します。

1. **[Input rules]** (インプットルール) で、**[Edit inbound rules]** (インバウンドルールを編集) を選択します。

1. **[Add rule]** (ルールを追加) を選択し、次の操作を行います。

   1. **[Type]** (タイプ) で、**SSH** を選択します。

   1. **[Source type]** (ソースタイプ) で **My IP** を選択します。

## ステップ 1: Amazon RDS データベースユーザーを作成する
<a name="tutorials_rotation-alternating-step-database"></a>

まず、シークレットにその認証情報を保存するユーザーが必要になります。ユーザーを作成するには、管理者の認証情報を使用して Amazon RDS データベースにログインします。簡単にするために、このチュートリアルでは、データベースへの完全なアクセス許可を持つユーザーを作成します。運用環境では、これは一般的ではないため、最小権限の原則に従うことをお勧めします。

データベースに接続するには、MySQL クライアントツールを使用します。このチュートリアルでは、GUI ベースのアプリケーション、MySQL Workbench を使用します。MySQL Workbench のインストール方法については、[「Download MySQL Workbench」](http://dev.mysql.com/downloads/workbench/)を参照してください。

データベースに接続するには、MySQL Workbench で接続構成を作成します。設定には、Amazon EC2 と Amazon RDS の両方からの情報が必要です。

**MySQL Workbench でデータベースの接続を設定するには**

1. MySQL Workbench で、**[MySQL Connections]** (MySQL 接続) の横にある (\$1) ボタンをクリックします。

1. **[Setup New Connection]** (新しい接続の設定) ダイアログボックスで、次を実行します。

   1. **[Connection Name]** (接続名) に、**SecretsManagerTutorial** と入力します。

   1. **[Connection method]** (接続方法) で、**Standard TCP/IP over SSH** を選択します。

   1. **[Parameters]** (パラメータ) タブで、次を実行します。

      1. **[SSH Hostname]** (SSH ホスト名) に、Amazon EC2 インスタンスのパブリック IP アドレスを入力します。

         この IP アドレスは、インスタンス **[SecretsManagerTutorialInstance]** を選択すると、Amazon EC2 コンソールに表示されます。**[Public IPv4 DNS]** の下に表示された IP アドレスをコピーします。

      1. **[SSH Username]** (SSH ユーザーネーム) に、**ec2-user** と入力します。

      1. **[SSH Keyfile]** (SSH キーファイル) で、前回の前提条件でダウンロードしたキーペアファイル **[SecretsManagerTutorialKeyPair.pem]** を選択します。

      1. **[MySQL Hostname]** (MySQL ホスト名) に、Amazon RDS エンドポイントアドレスを入力します。

         このエンドポイントアドレスは、データベースインスタンス **[secretsmanagertutorialdb]** を選択すると、Amazon RDS コンソールに表示されます。**[Endpoint]** (エンドポイント) の下に表示されたアドレスをコピーします。

      1. **[Username]** (ユーザーネーム) に、**admin** と入力します。

   1. [**OK**] を選択してください。

**管理者パスワードを取得するには**

1. Amazon RDS コンソールで、データベースに移動します。

1. **[Configuration]** (設定) タブの **[Master Credentials ARN]** (マスター認証情報 ARN)で、**[Manage in Secrets Manager]** (Secrets Managerの管理) を選択します。

   Secrets Manager コンソールが開きます。

1. シークレットの詳細ページで、**[Retrieve secret value]** (シークレット値の取得) を選択します。

1. パスワードは **[Secret value]** (シークレット値) セクションに表示されます。

**データベースユーザーを作成するには**

1. MySQL Workbench で、接続 **[SecretsManagerTutorial]** を選択します。

1. シークレットから取得した管理者パスワードを入力します。

1.  MySQL Workbenchの**[Query]** (クエリ) ウィンドウで、次のコマンド (強力なパスワードを含む) を入力し、**[Execute]** (実行) を選択します。ローテーション関数は SELECT を使用して更新されたシークレットをテストするため、**appuser** には少なくともその権限が必要です。

   ```
   CREATE DATABASE myDB;
   CREATE USER 'appuser'@'%' IDENTIFIED BY 'EXAMPLE-PASSWORD';
   GRANT SELECT ON myDB . * TO 'appuser'@'%';
   ```

   **[Output]** (出力) ウィンドウに、コマンドが実行されたことが表示されます。

## ステップ 2: ユーザーの認証情報用のシークレットを作成する
<a name="tutorials_rotation-alternating_step-rotate"></a>

次に、いま作成したユーザーの認証情報を保存するための、シークレットを作成します。これが、後ほどローテーションするシークレットです。自動ローテーションをオンにし、交代ユーザー戦略を指定するために、1 人目のユーザーのパスワードを変更する権限を持った、別のスーパーユーザーのシークレットを選択します。

1. Secrets Manager のコンソール ([https://console.aws.amazon.com/secretsmanager/](https://console.aws.amazon.com/secretsmanager/)) を開きます。

1. **[Store a new secret]** (新しいシークレットを保存する) を選択します｡

1. [**Choose secret type**] (シークレットタイプを選択する) ページで、次の操作を行います。

   1. **[Secret type]** (シークレットタイプ) で、**[Credentials for Amazon RDS database]** (Amazon RDS データベースの認証情報) を選択します。

   1. **[Credentials]** (認証情報) で、ユーザーネーム **appuser** と、MySQL Workbench を使って作成したデータベースユーザー向けに入力したパスワードを入力します。

   1. **[Database]** (データベース) で、**secretsmanagertutorialdb** を選択します。

   1. [**次へ**] を選択します。

1. **[Configure secret]** (シークレットを設定する) ページで、**[Secret name]** (シークレット名) に **SecretsManagerTutorialAppuser** と入力し、**[Next]** (次) を選択します。

1. **[Configure Routing**] (ローテーションを設定する) ページで、以下を実行します。

   1. **[Automatic rotation]** (自動ローテーション) を有効化します。

   1. **[Rotation schedule]** (ローテーションスケジュール) で、**[Days]** (日数) のスケジュールを設定します: **[Duration]** (期間) の **2** 日間: **2h**。**[Rotate immediately]** (すぐにローテーションする) は選択したままにしておきます。

   1. **[Rotation function]** (ローテーション関数) で **[Create a rotation function]** (ローテーション関数を作成) を選択し、[Function Name] (関数名) に **tutorial-alternating-users-rotation** と入力します。

   1. **[ローテーション戦略]** で **[代替ユーザー]** を選択し、**[管理者認証情報シークレット]** で **rds\$1cluster...** という名前のシークレットを選択します。これには、このチュートリアル **secretsmanagertutorial** で作成したデータベースの名前を含む **[説明]** が含まれています (例: `Secret associated with primary RDS DB instance: arn:aws:rds:Region:AccountId:db:secretsmanagertutorial`)。

   1. [**次へ**] を選択します。

1. **[Review]** (確認) ページで **[Store]** (保存) を選択します。

   Secrets Manager はシークレットの詳細ページに戻ります。ローテーション設定のステータスは、ページの上部で確認できます。Secrets Manager では、Lambda ローテーション関数や Lambda 関数を実行する実行ロールなどのリソースを作成するときは CloudFormation を使用します。CloudFormation が終了すると、バナーが**ローテーションが予定されているシークレット**に切り替わります。これで、最初のローテーションは完了です。

## ステップ 3: ローテーションされたシークレットをテストする
<a name="tutorials_rotation-alternating_step-test-secret"></a>

シークレットがローテーションされたので、シークレットに有効な新しい認証情報が含まれていることを確認できます。シークレット内のパスワードが、元の認証情報から変更されました。

**シークレットから新しいパスワードを取得するには**

1. Secrets Manager のコンソール ([https://console.aws.amazon.com/secretsmanager/](https://console.aws.amazon.com/secretsmanager/)) を開きます。

1. **[Secrets]** (シークレット) を選択し、シークレット **SecretsManagerTutorialAppuser** を選択します。

1. **[Secret details]** (シークレットの詳細) ページで、下へスクロールし、**[Retrieve secret value]** (シークレットの値を取得する) を選択します。

1. **[Key/value]** (キー/バリュー) テーブルで、**password** の**シークレットの値**をコピーします。

**認証情報をテストするには**

1. MySQL ワークベンチで、接続 **[SecretsManagerTutorial]** を右クリックし、**[Edit Connection]** (接続を編集) を選択します。

1. **[Manage Server Connections]** (サーバー接続を管理) ダイアログボックスで、**[Username]** (ユーザーネーム) に **appuser** と入力し、**[Close]** (閉じる) を選択します。

1. MySQL Workbench に戻り、接続 **[SecretsManagerTutorial]** を選択します。

1. **[Open SSH Connection]** (SSH 接続を開く) ダイアログボックスで、シークレットから取得したパスワードを **[Password]** (パスワード) に貼り付けて、**[OK]** をクリックします。

   認証情報が有効であれば、MySQL Workbench でデータベースの設計ページが開きます。

こちらは、シークレットのローテーションが完了したことを示しています。シークレット内の認証情報が更新されます。これが、データベースに接続するための有効なパスワードとなります。

## ステップ 4: リソースをクリーンアップする
<a name="tutorials_rotation-alternating_step-cleanup"></a>

別のローテーション戦略であるシングルユーザーローテーションを試したい場合は、リソースのクリーンアップをスキップして [のシングルユーザーローテーションを設定する AWS Secrets Manager](tutorials_rotation-single.md) に進みます。

それ以外の場合は、潜在的な課金を回避し、インターネットにアクセスできる EC2 インスタンスを削除するために、このチュートリアルで作成した次のリソースとその前提条件を削除します。
+ Amazon RDS データベースインスタンス。手順については、「Amazon RDS ユーザーガイド」の「[DB インスタンスの削除](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/USER_DeleteInstance.html)」を参照してください。
+ Amazon EC2 インスタンス。手順については、「*Amazon EC2 ユーザーガイド*」の「[インスタンスの終了](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/terminating-instances.html#terminating-instances-console)」を参照してください。
+ Secrets Manager シークレット `SecretsManagerTutorialAppuser`。手順については、「[AWS Secrets Manager シークレットを削除する](manage_delete-secret.md)」を参照してください。
+ Secrets Manager エンドポイント。手順については、AWS PrivateLink ガイドの「[VPC エンドポイントを削除する](https://docs.aws.amazon.com/vpc/latest/privatelink/delete-vpc-endpoint.html)」を参照してください。
+ VPC エンドポイント 手順については、AWS PrivateLink ガイドの[「VPC の削除」](https://docs.aws.amazon.com/vpc/latest/userguide/working-with-vpcs.html#VPC_Deleting)を参照してください。

## 次の手順
<a name="tutorials_rotation-alternating_step-next"></a>
+ [アプリケーションでシークレットを取得する方法](retrieving-secrets.md)について説明します。
+ [その他のローテーションスケジュール](rotate-secrets_schedule.md)について説明します。

# のシングルユーザーローテーションを設定する AWS Secrets Manager
<a name="tutorials_rotation-single"></a>

このチュートリアルでは、データベース認証情報を含むシークレットの単一ユーザーローテーションを設定する方法を学習します。シングルユーザーローテーションは、Secrets Manager がシークレットとデータベースの両方でユーザーの認証情報を更新するローテーション戦略です。詳細については、「[ローテーション戦略: シングルユーザー](rotation-strategy.md#rotating-secrets-one-user-one-password)」を参照してください。

チュートリアルを終了したら、チュートリアルからリソースをクリーンアップすることをお勧めします。本番環境では使用しないでください。

Secrets Manager のローテーションでは、 AWS Lambda 関数を使用してシークレットとデータベースを更新します。Lambda 関数を使用する場合のコストについては、「[料金](intro.md#asm_pricing)」を参照してください。

**Contents**
+ [

## アクセス許可
](#tutorials_rotation-single_permissions)
+ [

## 前提条件
](#tutorials_rotation-single_step-setup)
+ [

## ステップ 1: Amazon RDS データベースユーザーを作成する
](#tutorials_rotation-single_step-dbuser)
+ [

## ステップ 2: データベースユーザー認証情報のシークレットを作成する
](#tutorials_rotation-single_step-rotate)
+ [

## ステップ 3: ローテーションされたパスワードをテストする
](#tutorials_rotation-single_step-connect-again)
+ [

## ステップ 4: リソースをクリーンアップする
](#tutorials_rotation-single_step-cleanup)
+ [

## 次の手順
](#tutorials_rotation-single_step-next)

## アクセス許可
<a name="tutorials_rotation-single_permissions"></a>

このチュートリアルの前提条件として、 AWS アカウントの管理者権限が必要となります。本番稼働環境では、各ステップで異なるロールを使用するのがベストプラクティスとなります。例えば、Amazon RDS データベースの作成にはデータベース管理者権限を持つロールを使用し、VPC とセキュリティグループの設定にはネットワーク管理者権限を持つロールを使用します。チュートリアルの各ステップでは同じアイデンティティを使用することが推奨されます。

本番稼働環境で許可を設定する方法については、「[の認証とアクセスコントロール AWS Secrets Manager](auth-and-access.md)」を参照してください。

## 前提条件
<a name="tutorials_rotation-single_step-setup"></a>

このチュートリアルの前提条件は [の交代ユーザーローテーションを設定する AWS Secrets Manager](tutorials_rotation-alternating.md) です。最初のチュートリアルが完了した時点で、リソースのクリーンアップを実行しないでください。このチュートリアルの後、Amazon RDS データベースと、データベースの管理者認証情報を含む Secrets Manager シークレットを備えた現実的な環境ができました。データベースユーザーの認証情報を含む 2 番目のシークレットもありますが、このチュートリアルではそのシークレットを使用しません。

また、管理者認証情報を使用してデータベースに接続するための接続が、MySQL Workbench に設定されます。

## ステップ 1: Amazon RDS データベースユーザーを作成する
<a name="tutorials_rotation-single_step-dbuser"></a>

まず、シークレットにその認証情報を保存するユーザーが必要になります。ユーザーを作成するには、シークレットに保存されている管理者認証情報を使用して Amazon RDS データベースにログインします。簡単にするために、このチュートリアルでは、データベースへの完全なアクセス許可を持つユーザーを作成します。運用環境では、これは一般的ではないため、最小権限の原則に従うことをお勧めします。

**管理者パスワードを取得するには**

1. Amazon RDS コンソールで、データベースに移動します。

1. **[Configuration]** (設定) タブの **[Master Credentials ARN]** (マスター認証情報 ARN)で、**[Manage in Secrets Manager]** (Secrets Managerの管理) を選択します。

   Secrets Manager コンソールが開きます。

1. シークレットの詳細ページで、**[Retrieve secret value]** (シークレット値の取得) を選択します。

1. パスワードは **[Secret value]** (シークレット値) セクションに表示されます。

**データベースユーザーを作成するには**

1. MySQL ワークベンチで、接続 **[SecretsManagerTutorial]** を右クリックし、**[Edit Connection]** (接続を編集) を選択します。

1. **[Manage Server Connections]** (サーバー接続を管理) ダイアログボックスで、**[Username]** (ユーザーネーム) に **admin** と入力し、**[Close]** (閉じる) を選択します。

1. MySQL Workbench に戻り、接続 **[SecretsManagerTutorial]** を選択します。

1. シークレットから取得した管理者パスワードを入力します。

1.  MySQL Workbenchの**[Query]** (クエリ) ウィンドウで、次のコマンド (強力なパスワードを含む) を入力し、**[Execute]** (実行) を選択します。ローテーション関数は SELECT を使用して更新されたシークレットをテストするため、**dbuser** には少なくともその権限が必要です。

   ```
   CREATE USER 'dbuser'@'%' IDENTIFIED BY 'EXAMPLE-PASSWORD';
   GRANT SELECT ON myDB . * TO 'dbuser'@'%';
   ```

   **[Output]** (出力) ウィンドウに、コマンドが実行されたことが表示されます。

## ステップ 2: データベースユーザー認証情報のシークレットを作成する
<a name="tutorials_rotation-single_step-rotate"></a>

次に、作成したばかりのユーザーの認証情報を格納するためのシークレットを作成し、即時ローテーションを含む自動ローテーションをオンにします。Secrets Manager はシークレットをローテーションします。これは、パスワードがプログラムによって生成されることを意味します - 誰もこの新しいパスワードを見たことはありません。ローテーションをすぐに開始すると、ローテーションが正しく設定されているかどうかを判断するのにも役立ちます。

1. [https://console.aws.amazon.com/secretsmanager/](https://console.aws.amazon.com/secretsmanager/) から Secrets Manager コンソールを開きます。

1. **[Store a new secret]** (新しいシークレットを保存する) を選択します｡

1. [**Choose secret type**] (シークレットタイプを選択する) ページで、次の操作を行います。

   1. **[Secret type]** (シークレットタイプ) で、**[Credentials for Amazon RDS database]** (Amazon RDS データベースの認証情報) を選択します。

   1. **[Credentials]** (認証情報) で、ユーザーネーム **dbuser** と、MySQL Workbench を使って作成したデータベースユーザー向けに入力したパスワードを入力します。

   1. **[Database]** (データベース) で、**secretsmanagertutorialdb** を選択します。

   1. [**次へ**] を選択します。

1. **[Configure secret]** (シークレットを設定する) ページで、**[Secret name]** (シークレット名) に **SecretsManagerTutorialDbuser** と入力し、**[Next]** (次) を選択します。

1. **[Configure Routing**] (ローテーションを設定する) ページで、以下を実行します。

   1. **[Automatic rotation]** (自動ローテーション) を有効化します。

   1. **[Rotation schedule]** (ローテーションスケジュール) で、**[Days]** (日数) のスケジュールを設定します: **[Duration]** (期間) の **2** 日間: **2h**。**[Rotate immediately]** (すぐにローテーションする) は選択したままにしておきます。

   1. **[Rotation function]** (ローテーション関数) で **[Create a rotation function]** (ローテーション関数を作成) を選択し、[Function Name] (関数名) に **tutorial-single-user-rotation** と入力します。

   1. **[ローテーション戦略]** で、**[単一ユーザー]** を選択します。

   1. [**次へ**] を選択します。

1. **[Review]** (確認) ページで **[Store]** (保存) を選択します。

   Secrets Manager はシークレットの詳細ページに戻ります。ローテーション設定のステータスは、ページの上部で確認できます。Secrets Manager では、Lambda ローテーション関数や Lambda 関数を実行する実行ロールなどのリソースを作成するときは CloudFormation を使用します。CloudFormation が終了すると、バナーが**ローテーションが予定されているシークレット**に切り替わります。これで、最初のローテーションは完了です。

## ステップ 3: ローテーションされたパスワードをテストする
<a name="tutorials_rotation-single_step-connect-again"></a>

最初のシークレットローテーションが完了すると (所要時間は数秒)、シークレットに有効な認証情報が残っているかどうかを確認できます。シークレット内のパスワードが、元の認証情報から変更されました。

**シークレットから新しいパスワードを取得するには**

1. Secrets Manager のコンソール ([https://console.aws.amazon.com/secretsmanager/](https://console.aws.amazon.com/secretsmanager/)) を開きます。

1. **[Secrets]** (シークレット) を選択し、シークレット **SecretsManagerTutorialDbuser** を選択します。

1. **[Secret details]** (シークレットの詳細) ページで、下へスクロールし、**[Retrieve secret value]** (シークレットの値を取得する) を選択します。

1. **[Key/value]** (キー/バリュー) テーブルで、**password** の**シークレットの値**をコピーします。

**認証情報をテストするには**

1. MySQL ワークベンチで、接続 **[SecretsManagerTutorial]** を右クリックし、**[Edit Connection]** (接続を編集) を選択します。

1. **[Manage Server Connections]** (サーバー接続を管理) ダイアログボックスで、**[Username]** (ユーザーネーム) に **dbuser** と入力し、**[Close]** (閉じる) を選択します。

1. MySQL Workbench に戻り、接続 **[SecretsManagerTutorial]** を選択します。

1. **[Open SSH Connection]** (SSH 接続を開く) ダイアログボックスで、シークレットから取得したパスワードを **[Password]** (パスワード) に貼り付けて、**[OK]** をクリックします。

   認証情報が有効であれば、MySQL Workbench でデータベースの設計ページが開きます。

## ステップ 4: リソースをクリーンアップする
<a name="tutorials_rotation-single_step-cleanup"></a>

料金を発生させないために、このチュートリアルで作成したシークレットは削除します。手順については、「[AWS Secrets Manager シークレットを削除する](manage_delete-secret.md)」を参照してください。

前のチュートリアルで作成したリソースをクリーンアップするには、[ステップ 4: リソースをクリーンアップする](tutorials_rotation-alternating.md#tutorials_rotation-alternating_step-cleanup) を参照してください。

## 次の手順
<a name="tutorials_rotation-single_step-next"></a>
+ アプリケーションでシークレットを取得する方法について説明します。「[からシークレットを取得する AWS Secrets Manager](retrieving-secrets.md)」を参照してください。
+ その他のローテーションスケジュールについて説明します。「[ローテーションスケジュール](rotate-secrets_schedule.md)」を参照してください。