AWS Secrets Manager とは - AWS Secrets Manager

AWS Secrets Manager とは

AWS は、シークレットの管理を容易にするために AWS Secrets Manager サービスを提供します。シークレットとは、データベース認証情報、パスワード、サードパーティーの 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 にシークレットとして保存します。次に、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 はアプリケーションのソースコードからハードコードされた認証情報を削除するか、アプリケーション内に認証情報を保存しないことによって、セキュリティの体制を改善するのに役立ちます。認証情報をアプリケーション内またはアプリケーションと共に保存すると、アプリケーションまたはそのコンポーネントを調べることができるすべてのユーザーに、その認証情報が漏洩する可能性があります。また、古い認証情報を廃止する前に、アプリケーションを更新してすべてのクライアントに変更をデプロイする必要があるため、認証情報の更新が困難になります。

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

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

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

さまざまな種類のシークレットの保存

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

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

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

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

  • アタッチされた AWS タグ

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

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

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

また、Secrets Manager はデフォルトで、オープン標準のトランスポート層セキュリティ (Transport Layer Security)パーフェクトフォワードシークレットを使用するホストからの要求のみを受け入れます。Secrets Manager は、シークレットの取得に使用する AWS とコンピュータ間での転送中にシークレットを確実に暗号化します。

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

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

AWS Lambda 関数を使用して、ローテーションを定義し、実装します。この関数は、Secrets Manager が次のタスクを実行する方法を定義します:

  • これにより、シークレットの新しいバージョンが作成されます。

  • シークレットを Secrets Manager に保存します。

  • 新しいバージョンを使用するように保護されたサービスを構成します。

  • 新しいバージョンを確認します。

  • 新しいバージョンを本番準備完了としてマークします。

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

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

ローテーションを有効にする場合、Secrets Manager は次の 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.NETiOS および 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 Query API は、SDK が使用できない場合にのみ使用します。

Secrets Manager の料金表

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

AWS KMS– 顧客の暗号化キー

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

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

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