ハードコードされたシークレットを 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. [Store a new secret] (新しいシークレットを保存する) を選択します。

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

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

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

      API キーのキーと値のペア:

      ClientID: client_id

      ClientSecret: wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY

      認証情報キーと値のペア:

      Username: Saanvis

      Password: 例 - パスワード

      OAuth トークンの平文:

      AKIAI44QH8DHB例

      デジタル証明書平文:
      -----BEGIN CERTIFICATE----- EXAMPLE -----END CERTIFICATE-----
      平文のプライベートキー
      –---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 を想定している必要があります。詳細については、「Switching to an IAM role (AWS API)」(IAMロールへの切り替え ( 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 シークレットを他の AWS リージョンにレプリケートする」を参照してください。

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

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