Amazon Web Services ブログ

シークレット情報の安全な格納、配布、および交換

当社は AWS Secrets Managerの提供を開始しました。これにより、API または AWS コマンドラインインターフェイス (CLI) を使用して、シークレットを格納および検索すること、ならびに内蔵またはカスタムの AWS Lambda 関数を使用して、資格証明を交代させることが容易になりました。1 つのマシン、1 つのアプリケーションで作業している場合、データベースの資格証明、パスワード、あるいは API 鍵など、アプリケーションのシークレットの管理は簡単です。多くの分散化したマイクロサービスにまで成長してスケーリングされると、シークレットを安全に、格納、配布、交換、使用する作業は、厄介な作業になります。以前は、顧客はシークレット管理専用の追加インフラストラクチャをプロビジョニングして維持管理する必要がありました。これにはコストがかかり、システムには不必要な複雑性が導入されました。

AWS シークレットマネージャー

Twitter からの入力ツイートを受け取って、それらを Amazon Aurora データベースに格納するアプリケーションがあると仮定してください。以前は、データベース管理者からユーザー名とパスワードが求められるため、環境変数、本番へのレース、あるいはアプリケーション自体に、これらの資格証明を組み入れておく必要がありました。また、ソーシャルメディアマネージャーに、Twitter API 資格証明の作成と、それらの格納方法の説明を求める必要もありました。これは複数の人を関与させる、手間のかかるプロセスですが、資格証明を交換するたびに必要なプロセスでした。シークレットマネージャーが利用できるようになったので、データベース管理者は資格証明をシークレットマネージャーに一度入力しておけば、後はシークレットマネージャーのラムダ関数に、自動的に資格証明を更新したり交換したりするのを任せておくことができます。ソーシャルメディアマネージャーが Twitter の API 鍵をシークレットマネージャーに入力してくれれば、単純な API 呼び出しにアクセスしたり、プログラムで Twitter の API を呼び出すカスタムラムダ関数を使って、これらを交換したりすることができるようになりました。シークレットは自分のアカウントで選択する KMS 鍵に基づいて暗号化され、管理者は個々のロールまたはユーザーのための粒度の細かい IAM ポリシーに基づいてこれらのシークレットへの明示的にアクセス権を承認します。

AWS シークレットマネージャーのコンソールを使ってシークレットを格納する方法を説明します。最初に、[Store a new secret (新規シークレットの格納)] をクリックして、新規シークレットウィザードを表示します。RDS Aurora インスタンスの場合、インスタンスを選択して、初期のユーザー名およびパスワードを入力することにより、データベースに接続します。

次に、簡単な説明と名前を入力することによって、シークレットにアクセスします。ここでは任意の命名スキームを使用することができます。

次に、10 日ごとにパスワードを入れ替えるために、シークレットマネージャーに付属しているラムダ関数の交換機能を構成します。

最後に、すべての詳細情報をチェックして、シークレットの格納および検索のためのサンプルコードを完成します。

その結果、シークレットはコンソールで表示できるようになりました。

シークレットには、必要に応じて、API を呼び出すことでアクセスすることができます。

import json
import boto3
secrets = boto3.client("secretsmanager")
rds = json(sm.get_secrets_value("prod/TwitterApp/Database")['SecretString'])
print(rds)

これにより、以下の値が返されます。


{'engine': 'mysql',
 'host': 'twitterapp2.abcdefg.us-east-1.rds.amazonaws.com',
 'password': '-)Kw>THISISAFAKEPASSWORD:lg{&sad+Canr',
 'port': 3306,
 'username': 'ranman'}

パスワードよりも優れた機能

AWS シークレットマネージャーはパスワードよりも優れた働きをします。OAuth の資格証明、バイナリデータなどを格納することができます。Twitter の OAuth アプリケーション鍵を格納する場合を例に取ります。

これらのサードパーティ OAuth 資格証明を、資格証明の交換が必要になるたびに Twitter を呼び出すカスタム AWS Lambda 関数で置き換えます。

カスタムローテーション

AWS シークレットマネージャーの優れた機能の 1 つは、資格証明のローテーションのためのカスタム AWS Lambda 関数です。これにより、資格証明のための完全なカスタムワークフローを定義することができます。シークレットマネージャーは、ローテーションのステップを指定する Step 、ローテーションされるシークレットを指定する SecretId 、そして最も重要な、対象となるシークレットの変更において幅等性を保証すぅるために使われる ClientRequestToken などのペイロードを持つラムダ関数を呼び出します。

シークレットのローテーションでは、次のような、いくつかの異なるステップを使用します。

  1. createSecret
  2. setSecret
  3. testSecret
  4. finishSecret

これらのステップの利点は、ローテーションの各段階で必要と思われる承認ステップを追加することができることです。カスタムローテーションの詳細については、ドキュメントを参照してください。

今すぐ利用可能
現在、AWS シークレットマネージャーは、米国東部 (バージニア州北部)、米国東部 (オハイオ州)、米国西部 (カリフォルニア州北部)、米国西部 (オレゴン州)、アジア太平洋地域 (ムンバイ)、アジア太平洋地域 (ソウル)、アジア太平洋地域 (シンガポール)、アジア太平洋地域 (シドニー)、アジア太平洋地域 (東京)、カナダ (中央)、EU (フランクフルト)、EU (アイルランド)、EU (ロンドン)、および南米 (サンパウロ) で利用可能です。シークレットはシークレットごとに月額 0.40 ドル、10,000 回の API 呼び出しごとに 0.05 ドルです。私はアプリケーションをセキュアにするためにより多くのユーザーが資格証明のローテーションを利用することを希望しています。

Randall