

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

# ハードコードされたシークレットを に移動する 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)」を参照してください。