AWS Secrets Manager
ユーザーガイド

AWS Secrets Manager とは ?

AWS Secrets Manager は、シークレットの管理をより簡単にする AWS サービスです。シークレットとは、データベース認証情報、パスワード、サードパーティーの API キーなどの任意のテキストです。Secrets Manager コンソール、Secrets Manager コマンドラインインターフェイス (CLI)、Secrets Manager API および SDK を使用すると、これらのシークレットへのアクセスを一元的に保存および制御できます。

以前は、データベースから情報を取得するカスタムアプリケーションを作成する場合は、アプリケーションにデータベースに直接アクセスするための認証情報 (シークレット) を埋め込む必要がありました。認証情報を更新する時が来たときには、単に新しい認証情報を作成すること以上のことが必要でした。新しい認証情報を使用するために、アプリケーションを更新する時間を費やさなければなりませんでした。その後、更新されたアプリケーションを配布する必要がありました。認証情報を共有している複数のアプリケーションがあり、そのうちの 1 つを更新しなかった場合、アプリケーションは中断されます。このリスクのために、多くのお客様は定期的に認証情報を更新せずに、実際のところは代わりに別のリスクを選択していました。

代わりに、Secrets Manager を使用すると、コード内のハードコードされた認証情報 (パスワードを含む) を、Secrets Manager への API コールで置き換えて、プログラムでシークレットを取得することができます。シークレットはそこに存在しないため、これは、あなたのコードを調べている誰かがシークレットを漏らさないようにするのに役立ちます。また、Secrets Manager を設定して、指定したスケジュールに従って自動的にシークレットを更新するようにすることができます。これにより、長期のシークレットを短期のシークレットに置き換えることが可能となり、侵害されるリスクが大幅に減少します。

Secrets Manager の使用開始

Secrets Manager を十分に活用するために理解する必要がある用語や概念のリストについては、「AWS Secrets Manager の主な用語と概念」を参照してください。

Secrets Manager の一般的なユーザーは、次のロールの 1 つ以上に分類されます。

  • Secrets Manager 管理者 – Secrets Manager サービスを管理します。ここにリストされている他のロールを実行できる個人にアクセス権限を付与します。

  • データベースまたはサービス管理者 – シークレットが Secrets Manager に保存されているデータベースまたはサービスを管理します。自分が所有するシークレットのローテーションと有効期限の設定を決定して、設定します。

  • アプリケーション開発者 – アプリケーションを作成し、Secrets Manager から適切な認証情報を要求するように設定します。

Secrets Manager の基本シナリオ

この最も基本的なシナリオを以下に図で示します。Secrets Manager のデータベースの認証情報を保存する方法を示して、データベースへのアクセスに必要なこれらの認証情報をアプリケーションで使用します。

  1. データベース管理者は、人事データベースに認証情報のセットを作成し、MyCustomApp という名前のアプリで使用します。また、管理者は、アプリが従業員データベースにアクセスするために必要なアクセス許可でこれらの認証情報を設定します。

  2. データベース管理者は、これらの認証情報を MyCustomAppCreds という名前の Secrets Manager にシークレットとして保存します。認証情報はシークレット内で暗号化され、保護されたシークレットテキストとして保存されます。

  3. MyCustomApp がデータベースにアクセスする必要があるとき、アプリケーションは Secrets Manager で MyCustomAppCreds という名前のシークレットをクエリします。

  4. Secrets Manager はシークレットを取得して、保護されたシークレットテキストを復号し、保護された (TLS を使用した HTTPS) チャネルを介してクライアントアプリに返します。

  5. クライアントアプリは、認証情報、接続文字列、およびその他の必要な情報をレスポンスから解析し、その情報を使用してデータベースサーバーにアクセスします。

注記

Secrets Manager は多くのタイプのシークレットを扱う方法を知っています。ただし、Secrets Manager は、追加のプログラミングを必要とせずに、サポートされている AWS データベースの認証情報をネイティブに更新できます。ただし、他のデータベースまたはサービスのシークレットを更新するには、カスタム Lambda 関数を作成して、Secrets Manager がデータベースまたはサービスとどのようにやりとりするかを定義する必要があります。その関数を作成するには、プログラミングスキルが必要です。詳細については、「AWS Secrets Manager シークレットの更新」を参照してください。

Secrets Manager の機能

実行時に暗号化されたシークレット値をプログラムで保存するのではなく、プログラムで取得します。

Secrets Manager を使用する最も重要な理由の 1 つは、アプリケーションのソースコードからハードコードされた認証情報を削除するか、アプリ自体の内部または内部に保存することによって、セキュリティの体制を改善するのに役立つことです。認証情報をアプリ内またはアプリと共に保存すると、アプリまたはそのコンポーネントを調べることができるすべての人が漏洩させる可能性があります。また、認証情報の更新が非常に困難になります。これは、古い認証情報を廃止する前に、アプリを更新してすべてのクライアントに変更をデプロイする必要があるためです。

Secrets Manager を使用すると、保存された認証情報を、Secrets Manager ウェブサービスへのランタイム呼び出しで置き換えて、必要に応じて認証情報を動的に取得することができます。

ほとんどの場合、クライアントは暗号化されたシークレット値の最新バージョンにアクセスしたいというだけです。暗号化されたシークレット値をクエリするときは、バージョン情報をまったく指定せずにシークレットの名前またはその Amazon リソースネーム (ARN) だけを指定することができます。これを行うと、Secrets Manager は最新バージョンのシークレット値を自動的に返します。

ただし、他のバージョンも同時に存在する可能性があります。ほとんどのシステムは、接続の詳細、ユーザー ID、およびパスワードを含む認証情報の完全なセットなど、単純なパスワードよりも複雑なシークレットをサポートしています。Secrets Manager により、これらの認証情報の複数のセットを同時に存在させることができます。各セットは、シークレットの別のバージョンに保存されます。シークレットのローテーションプロセス中、Secrets Manager は、置き換えようとしている古い認証情報と、更新が完了するまで使用したい新しい認証情報を追跡します。ステージングラベルを使用して、さまざまなバージョンを追跡します。

あらゆる種類のシークレットを保存する

Secrets Manager により、シークレットの暗号化されたシークレットデータ部分にテキストを保存できます。通常、このテキストはデータベースまたはサービスへの接続の詳細です。詳細には、サーバー名、IP アドレス、ポート番号、サービスにサインインするために使用されるユーザー名とパスワードが含まれます。シークレットについては、「最大値と最小値」を参照してください。保護されたテキストに以下の情報は含まれません。

  • シークレットの名前と説明

  • ローテーションまたは有効期限の設定

  • シークレットに関連付けられている AWS KMS カスタマーマスターキー (CMK) の ARN。

  • アタッチする可能性のある AWS タグ。

シークレットデータの暗号化

Secrets Manager は、AWS Key Management Service (AWS KMS) を使用して、シークレットの保護テキストを暗号化します。AWS KMS は、多くの AWS サービスで使用されている主要なストレージおよび暗号化サービスです。これは、シークレットを不使用時に安全に暗号化するのに役立ちます。Secrets Manager は、シークレットごとに AWS KMS CMK と関連付けます。Secrets Manager のアカウントのデフォルト CMK、または、お客様が作成した CMK のいずれかになります。

Secrets Manager が保護されたシークレットデータの新しいバージョンを暗号化する必要があるたびに、指定された CMK から新しいデータキーを作成するよう AWS KMS に要求します。Secrets Manager は、このデータをエンベロープ暗号化に使用します。Secrets Manager は、暗号化されたデータキーを、保護されたシークレットデータを使用して保存します。シークレットを復号する必要があるたびに、Secrets Manager は AWS KMS に Secrets Manager が保護されたシークレットデータを復号するのに使用するデータキーを復号するように要求します。データキーは暗号化されていない形式で保存されることはなく、常に使用後にすぐに廃棄されます。

さらに、Secrets Manager は、デフォルトでオープンスタンダードの Transport Layer Security (TLS)Perfect Forward Secrecy を使用するホストからのリクエストのみを受け入れます。これにより、AWS とシークレットを取得するために使用するコンピュータの間でもシークレットが暗号化されます。

シークレットを自動的に更新する

ユーザーの介入なしに、指定したスケジュールに基づいてシークレットを自動的にローテーションするように Secrets Manager を設定できます。

AWS Lambda 関数を使用して、ローテーションを定義し、実装します。この関数は、Secrets Manager が新しいバージョンのシークレットを作成して、Secrets Manager に保存し、保護されたサービスが新しいバージョンを使用するように設定したら、新しいバージョンが動作していることを確認して、新しいバージョンを本番環境として準備します。

ステージングラベルは、シークレットの異なるバージョンを追跡するのに役立ちます。各バージョンには複数のステージングラベルをアタッチできますが、ステージングラベルは 1 つのバージョンにのみアタッチできます。たとえば、現在アクティブで使用中のシークレットのバージョンには、AWSCURRENT というラベルが付けられます。アプリは通常、そのラベル付きバージョンのシークレットを常にクエリするように設定する必要があります。ローテーションプロセスで新しいバージョンのシークレットが作成されると、新しいシークレットがテストされ検証されるまで、新しいバージョンには AWSPENDING というステージングラベルが自動的に付けられます。その後、Secrets Manager は AWSCURRENT ステージングラベルをこの新しいバージョンに移動します。アプリは、次回の AWSCURRENT というラベルの付いたバージョンのクエリで、すぐに新しいシークレットの使用を開始します。

完全に設定された即時使用ローテーションをサポートするデータベース

ローテーションを有効にする場合、次の Amazon Relational Database Service (Amazon RDS) データベースは、AWS で書かれた、テスト済みの Lambda ローテーション関数テンプレート、およびローテーションプロセスの完全な設定で完全にサポートされています。

  • Amazon RDS での Amazon Aurora

  • Amazon RDS での MySQL

  • Amazon RDS 上の PostgreSQL

  • Amazon RDS での Oracle

  • Amazon RDS の MariaDB

  • Amazon RDS での Microsoft SQL Server

完全に設定された即時使用ローテーションをサポートする他のサービス

AWS によって記述されてテストされた Lambda ローテーション関数テンプレート、および完全に設定されたローテーションプロセスをフルサポートする以下のサービスでも、ローテーションを有効にすることもできます。

  • Amazon DocumentDB

  • Amazon Redshift

ほとんどすべての他の種類のデータベースやサービスのシークレットを保存することもできます。ただし、自動的に更新するには、カスタム Lambda ローテーション関数を自分で作成して設定する必要があります。データベースまたはサービスのカスタム Lambda 関数の記述の詳細については、「Lambda ローテーション関数の概要」を参照してください。

シークレットにアクセスできるユーザーを制御する

特定のシークレットへのアクセスを許可または拒否するユーザー、グループ、およびロールに AWS Identity and Access Management (IAM) アクセス許可ポリシーをアタッチして、それらのシークレットで実行できることを制限することができます。たとえば、メンバーがシークレットを完全に管理および設定する能力を必要とするグループに、1 つのポリシーをアタッチすることができます。アプリケーションによって使用されるロールにアタッチされる別のポリシーは、アプリケーションが実行する必要がある 1 つのシークレットに対する読み取りアクセス権限のみを許可する場合があります。

また、リソースベースのポリシーをシークレットに直接アタッチして、シークレット、およびそのバージョンの読み取りや変更を許可するユーザーを指定するアクセス許可を付与することもできます。(アタッチされているユーザー、グループ、またはロールに自動的に適用される) アイデンティティベースのポリシーとは異なり、シークレットに関連付けられたリソースベースのポリシーは、Principal 要素を使用して、ポリシーが適用されるユーザーを識別します。Principal 要素には、同じアカウントからのユーザーやロールを、他のアカウントからのシークレットまたはプリンシパルとして含めることができます。

標準への準拠

AWS Secrets Manager は、以下の標準について監査済みであり、コンプライアンスの認定を取得する必要がある場合にはソリューションの一部となります。

AWS は、医療保険の相互運用性と説明責任に関する法令 (HIPAA) コンプライアンスプログラムを拡張し、HIPAA 対応サービスとして AWS Secrets Manager を含めています。AWS と事業提携契約 (BAA) を締結している場合は、Secrets Manager を使用して HIPAA 準拠アプリケーションを構築できます。AWS では、医療情報の処理や保存に AWS の活用をお考えのお客様向けに、HIPAA 関連のホワイトペーパーも用意しています。詳細については、HIPAA への準拠を参照してください。

AWS Secrets Manager は、クレジットカード業界 (PCI) のデータセキュリティ標準 (DSS) バージョン 3.2、サービスプロバイダーレベル 1 で準拠証明書を取得しています。AWS の製品やサービスを使用してカード所有者のデータを保存、処理、転送するユーザーは、各自の PCI DSS 準拠認定の管理に AWS Secrets Manager を使用できます。PCI DSS の詳細 (AWS PCI Compliance Package のコピーをリクエストする方法など) については、「PCI DSS レベル 1」を参照してください。

AWS Secrets Manager は、ISO/IEC 27001、ISO/IEC 27017、ISO/IEC 27018、および ISO 9001 のコンプライアンス認証を正常に取得しました。詳細については、「ISO 27001」、「ISO 27017」、「ISO 27018」、および「ISO 9001」を参照してください。

System and Organization Control (SOC) レポートとは、重要なコンプライアンスの統制および目標を Secrets Manager がどのように達成したかを実証する、独立した第三者による審査報告書です。このレポートの目的は、オペレーションとコンプライアンスをサポートするよう確立された AWS 統制を、ユーザーおよびユーザーの監査人が容易に把握できるようにすることです。詳細については、「SOC コンプライアンス」を参照してください。

Secrets Manager へのアクセス

次のいずれかの方法で Secrets Manager を使用できます。

AWS マネジメントコンソール

Secrets Manager コンソールは、シークレットを管理するために使用できるブラウザベースのインターフェイスです。シークレットに関連するタスクは、ほとんどすべてコンソールを使用して実行できます。

現時点では、コンソールを使用して以下を実行することはできません。

  • ストアバイナリデータをシークレットに保存します。 コンソールは現在、シークレットの SecretString フィールドにのみデータを保存し、SecureBinary フィールドは使用しません。バイナリデータを保存するには、AWS CLI または AWS SDK のいずれかを現在使用する必要があります。

AWS コマンドラインツール

AWS コマンドラインツールを使用して、システムのコマンドラインでコマンドを発行することで、Secrets Manager およびその他の AWS タスクを実行できます。これは、コンソールを使用するよりも高速でより便利になります。コマンドラインツールは、AWS タスクを実行するスクリプトを作成する場合にも便利です。

AWS には、AWS Command Line Interface (AWS CLI) と AWS Tools for Windows PowerShell という 2 セットのコマンドラインツールが用意されています。AWS CLI のインストールおよび使用の詳細については、『AWS Command Line Interface ユーザーガイド』を参照してください。Tools for Windows PowerShell のインストールおよび使用の詳細については、『AWS Tools for Windows PowerShell ユーザーガイド』を参照してください。

AWS SDK

AWS SDK は、さまざまなプログラミング言語とプラットフォーム (JavaPythonRuby, .NET, iOS および Androidその他など) のライブラリとサンプルコードで構成されています。SDK には、暗号署名によるリクエスト、エラーの管理、リクエストの自動再試行などのタスクが含まれます。AWS SDK のダウンロードおよびインストール方法の詳細については、「アマゾン ウェブ サービス用ツール」を参照してください。

Secrets Manager HTTPS クエリ API

Secrets Manager HTTPS クエリ API を使用すると、Secrets Manager および AWS にプログラムでアクセスできます。HTTPS クエリ API を使用すると、HTTPS リクエストを直接サービスに発行できます。HTTPS API を使用する場合は、認証情報を使用してリクエストにデジタル署名するコードを含める必要があります。詳細については、「HTTP クエリリクエストを作成して API を呼び出す」および「AWS Secrets Manager API リファレンス」を参照してください。

注記

HTTPS クエリ API を使用する代わりに、望ましいプログラミング言語に固有の SDK を使用することをお勧めします。SDK は、本来は手動で行う必要がある多くの便利なタスクを実行します。たとえば、SDK は自動的にリクエストに署名し、該当言語で構文的に適切な構造になるようレスポンスを変換します。HTTPS クエリ API は、SDK が使用できない場合にのみ使用します。

Secrets Manager の料金表

Secrets Manager を使用するときは、お客様が利用された分のみのお支払いとなり、最低料金や設定料金はありません。現在の価格の詳細なリストについては、「AWS Secrets Manager 料金表」を参照してください。

AWS KMS– 顧客の暗号化キー

AWS KMS を使用して自分のシークレットを暗号化する独自のお客様マスターキーを作成すると、現行の AWS KMS レートで課金されます。ただし、AWS Secrets Manager がアカウント用に作成する「デフォルト」キーは、無料で使用できます。お客様が作成する AWS KMS キーのコストの詳細については、「AWS Key Management Service 料金表」を参照してください。

AWS CloudTrailログ記録– ストレージと通知

アカウントで AWS CloudTrail を有効にすると、AWS Secrets Manager が行う API コールのログを取得できます。Secrets Manager はすべてのイベントを管理イベントとして記録します。データイベントがありません。AWS CloudTrail の 1 つの証跡を、管理イベントをキャプチャするために、キャプチャしても追加料金は発生しません。すべての管理イベントの最初のコピーは無料で証跡に保管されます。ただし、通知を有効にすると、Amazon SNS のログストレージと Amazon S3 の料金が発生する場合があります。また、追加の証跡を設定している場合、管理イベントの追加コピーについては、料金が発生する可能性があります。詳細については、AWS CloudTrail 料金表ページを参照してください。