ハードコードされたシークレットを に移動する AWS Secrets Manager - AWS Secrets Manager

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

ハードコードされたシークレットを に移動する AWS Secrets Manager

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

データベース認証のシークレットについては、ハードコードされたデータベース認証情報をに移動 AWS Secrets Manager を参照してください。

開始する前に、シークレットへのアクセスが必要なユーザーを決める必要があります。シークレットへのアクセス許可を管理するには、次の 2 つのIAMロールを使用することをお勧めします。

  • 組織のシークレットを管理するロール。詳細については、「Secrets Manager 管理者のアクセス許可」を参照してください。このロールを使用してシークレットを作成し、ローテーションします。

  • 実行時にシークレットを使用できるロール。例えば、このチュートリアルで使用します。RoleToRetrieveSecretAtRuntime。 コードは、シークレットを取得するためにこのロールを引き受けます。このチュートリアルでは、ロールに 1 つのシークレットの値を取得する権限のみを与え、シークレットの値のリソース・ポリシーを使用して権限を付与しています。代替手段については、次のステップ を参照してください。

ステップ 1: シークレットを作成する

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

シークレットを作成する (コンソール)
  1. で Secrets Manager コンソールを開きますhttps://console.aws.amazon.com/secretsmanager/

  2. [新しいシークレットを保存] を選択します。

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

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

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

      API key

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

      ClientID : my_client_id

      ClientSecret : wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY

      OAuth token

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

      AKIAI44QH8DHBEXAMPLE

      Digital certificate

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

      -----BEGIN CERTIFICATE----- EXAMPLE -----END CERTIFICATE-----
      Private key

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

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

    4. [Next (次へ)] を選択します。

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

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

    2. [Resource permissions] (リソースのアクセス許可) で、[Edit permissions] (アクセス許可の編集) を選択します。次のポリシーを貼り付けます。これにより、RoleToRetrieveSecretAtRuntime シークレットを取得して、保存 を選択します。

      { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::AccountId:role/RoleToRetrieveSecretAtRuntime" }, "Action": "secretsmanager:GetSecretValue", "Resource": "*" } ] }
    3. ページの最下部にある [Next] (次へ) を選択します。

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

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

ステップ 2: コードを更新する

コードはIAMロールを引き受ける必要があります RoleToRetrieveSecretAtRuntime シークレットを取得できます。詳細については、IAM「ロールへの切り替え (AWS API)」を参照してください。

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

サンプルコードを見るには
  1. で Secrets Manager コンソールを開きますhttps://console.aws.amazon.com/secretsmanager/

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

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

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

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

ステップ 3: シークレットを更新する

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

シークレットを新しい値で更新するには
  1. で Secrets Manager コンソールを開きますhttps://console.aws.amazon.com/secretsmanager/

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

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

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

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

次のステップ

コードからハードコードされたシークレットを削除した後、次に検討すべきいくつかの項目を挙げます。

  • Java および Python アプリケーションでハードコードされたシークレットを見つけるには、Amazon CodeGuru Reviewer をお勧めします。

  • シークレットをキャッシュすることで、パフォーマンスを向上させ、コストを削減することができます。詳細については、「からシークレットを取得する AWS Secrets Manager」を参照してください。

  • 複数のリージョンからアクセスするシークレットについては、レイテンシーを改善するためにシークレットをレプリケーションすることを検討してください。詳細については、「リージョン間でシー AWS Secrets Manager クレットをレプリケートする」を参照してください。

  • このチュートリアルでは、RoleToRetrieveSecretAtRuntime シークレット値を取得するアクセス許可のみ。シークレットに関するメタデータの取得やシークレットの一覧の表示など、より多くの権限をロールに付与するには、リソースベースのポリシー を参照してください。

  • このチュートリアルでは、RoleToRetrieveSecretAtRuntime シークレットのリソースポリシーを使用します。権限を付与するその他の方法については、「アイデンティティベースのポリシー」を参照してください。