AWS Secrets Manager
ユーザーガイド

基本的なシークレットを作成する

AWS Secrets Manager を使用すると、最小限の労力で基本的なシークレットを保存することができます。「基本的な」シークレットは、メタデータの最小値と単一の暗号化されたシークレット値を持っています。シークレットに保存されている 1 つのバージョンには、自動的に AWSCURRENT というラベルが付けられます。

基本的なシークレットを作成するには

以下のいずれかのタブのステップに従ってください。

Using the consoleUsing the AWS CLI or AWS SDK operations
Using the console

最小限必要なアクセス権限

コンソールでシークレットを作成するには次のアクセス許可が必要です。

  • [SecretsManagerReadWrite] AWS マネージドポリシーによって付与されるアクセス許可。

  • [IAMFullAccess] AWS マネージドポリシーによって付与されたアクセス許可 – シークレットのローテーションを有効にする必要がある場合のみ。

  • kms:CreateKey – Secrets Manager にカスタム AWS KMS カスタマーマスターキー (CMK) の作成を依頼する必要がある場合にのみ必要です。

  • kms:Encrypt – アカウントのデフォルトの Secrets Manager CMK の代わりにカスタム AWS KMS キーを使用してシークレットを暗号化する場合のみ。アカウントのデフォルトの AWS 管理の CMK を Secrets Manager に使用するのに、このアクセス許可は必要ありません。

  • kms:Decrypt – アカウントのデフォルトの Secrets Manager CMK の代わりにカスタム AWS KMS キーを使用してシークレットを暗号化する場合のみ。アカウントのデフォルトの AWS 管理の CMK を Secrets Manager に使用するのに、このアクセス許可は必要ありません。

  • kms:GenerateDataKey – アカウントのデフォルトの Secrets Manager CMK の代わりにカスタム AWS KMS キーを使用してシークレットを暗号化する場合のみ。アカウントのデフォルトの AWS 管理の CMK を Secrets Manager に使用するのに、このアクセス許可は必要ありません。

  1. https://console.aws.amazon.com/secretsmanager/ で AWS Secrets Manager コンソールにサインインします。

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

  3. [シークレットタイプの選択] セクションで、次のいずれかのオプションを選択して、作成するシークレットのタイプを指定します。次に、必要な情報を入力します。

    Amazon RDSAmazon RedshiftDocumentDB databaseOther databasesOther type of secret
    Amazon RDS

    このシークレットは、Secrets Manager が提供し、 によってサポートされているデータベースサービスの 1 つで、事前構成された Lambda ローテーション関数でフルローテーションをサポートします。Secrets Manager は、データベースインスタンスを照会することによって必要なものをすべて学習するため、認証情報のみを指定する必要があります。

    1. データベースへのアクセスを許可するユーザー名とパスワードを入力します。このシークレットにアクセスするお客様が必要とするアクセス許可のみを持つユーザーを選択します。

    2. シークレットの保護されたテキストを暗号化するために使用する AWS KMS 暗号化キーを選択します。選択しない場合、Secrets Manager は、アカウントのデフォルトキーが存在するかどうかを調べ、存在する場合はそれを使用します。デフォルトのキーが存在しない場合は、Secrets Manager が自動的に作成します。また、[Add new key(新しいキーの追加)] を選択して、このシークレット専用のカスタム CMK を作成します。独自の AWS KMS CMK を作成するには、アカウントに CMK を作成するアクセス許可が必要です。

    3. リストからデータベースインスタンスを選択します。Secrets Manager は、選択したインスタンスを照会することによって、データベースに関する接続の詳細を取得します。

    Amazon Redshift

    このシークレットは Amazon Redshift クラスター用です。Secrets Manager は、データベースインスタンスを照会することによって必要なものをすべて学習するため、認証情報のみを指定する必要があります。

    1. データベースへのアクセスを許可するユーザーのユーザー名とパスワードを入力します。

    2. シークレットの保護されたテキストを暗号化するために使用する AWS KMS 暗号化キーを選択します。選択しない場合、Secrets Manager は、アカウントのデフォルトキーが存在するかどうかを調べ、存在する場合はそれを使用します。デフォルトのキーが存在しない場合は、Secrets Manager が自動的に作成します。また、[Add new key(新しいキーの追加)] を選択して、このシークレット専用のカスタム CMK を作成します。独自の AWS KMS CMK を作成するには、アカウントに CMK を作成するためのアクセス許可が必要です。

    3. 正しいデータベースエンジンを選択します。

    4. データベースサーバーの IP アドレス、データベース名、および TCP ポート番号を入力して、接続の詳細を指定します。

    DocumentDB database

    このシークレットは DocumentDB データベース用です。Secrets Manager は、データベースインスタンスを照会することによって必要なものをすべて学習するため、認証情報のみを指定する必要があります。

    1. データベースへのアクセスを許可するユーザーのユーザー名とパスワードを入力します。

    2. シークレットの保護されたテキストを暗号化するために使用する AWS KMS 暗号化キーを選択します。選択しない場合、Secrets Manager は、アカウントのデフォルトキーが存在するかどうかを調べ、存在する場合はそれを使用します。デフォルトのキーが存在しない場合は、Secrets Manager が自動的に作成します。また、[Add new key(新しいキーの追加)] を選択して、このシークレット専用のカスタム CMK を作成します。独自の AWS KMS CMK を作成するには、アカウントに CMK を作成するためのアクセス許可が必要です。

    3. 正しいデータベースエンジンを選択します。

    4. データベースサーバーの IP アドレス、データベース名、および TCP ポート番号を入力して、接続の詳細を指定します。

    Other databases

    このシークレットは、Secrets Manager がサポートする既知のデータベースサービス用です。ただし、Secrets Manager はデータベースに関する追加情報を提供する必要があります。このシークレットを更新するには、シークレットを解析してサービスとやり取りして、シークレットを更新する カスタム Lambda ローテーション関数を記述する必要があります。

    1. このシークレット情報で保護するデータベースへのアクセスを許可するユーザー名とパスワードを入力します。

    2. シークレットの保護されたテキストを暗号化するために使用する AWS KMS 暗号化キーを選択します。選択しない場合、Secrets Manager は、アカウントのデフォルトキーが存在するかどうかを調べ、存在する場合はそれを使用します。デフォルトのキーが存在しない場合は、Secrets Manager が自動的に作成します。また、[Add new key(新しいキーの追加)] を選択して、このシークレット専用のカスタム CMK を作成します。独自の AWS KMS CMK を作成するには、アカウントに CMK を作成するためのアクセス許可が必要です。

    3. データベースを実行するデータベースエンジンのタイプを選択します。

    4. データベースサーバーの IP アドレス、データベース名、および TCP ポート番号を入力して、接続の詳細を指定します。

    Other type of secret

    このシークレットは、Secrets Manager がネイティブに認識していないデータベースまたはサービス用です。シークレットの構造と詳細を指定する必要があります。このシークレットを更新するには、シークレットを解析してサービスとやり取りして、シークレットを更新する カスタム Lambda ローテーション関数を記述する必要があります。

    1. カスタムシークレットの詳細を [キー] と [] のペアの形式で指定します。たとえば、キーとして UserName を指定し、その値として適切なユーザー名を指定できます。パスワードの名前とパスワードのテキストを値として持つ 2 番目のキーを追加します。また、Database nameServer addressTCP port などのエントリを追加することもできます。必要な情報を格納するのに必要な数だけペアを追加できます。

      または、[プレーンテキスト] タブを選択して、任意の方法でシークレット値を入力することもできます。

    2. シークレットの保護されたテキストを暗号化するために使用する AWS KMS 暗号化キーを選択します。選択しない場合、Secrets Manager は、アカウントのデフォルトキーが存在するかどうかを調べ、存在する場合はそれを使用します。デフォルトのキーが存在しない場合は、Secrets Manager が自動的に作成します。また、[Add new key(新しいキーの追加)] を選択して、このシークレット専用のカスタム CMK を作成します。独自の AWS KMS CMK を作成するには、アカウントに CMK を作成するためのアクセス許可が必要です。

  4. [シークレット名] に、オプションのパスと名前 (例: production/MyAwesomeAppSecret または development/TestSecret) を入力します。スラッシュ文字を使用すると、デプロイ環境別にグループ化するなど、シークレットを階層に構造化できます。これは、シークレットを大規模に整理および管理する場合に便利です。オプションで説明を追加することもできます。後でこのシークレットを思い出すのに役立ちます。

    シークレット名に使用できるのは、ASCII 文字、数字、または次の記号のみです: /_+=.@-

  5. (オプション) [タグ] セクションで、1 つ以上のタグをシークレットに追加することができます。タグは、お客様が定義するキーと値で構成されます。タグは、AWS リソースの管理に役立ちます。リソースを組織の構造に関連付けるタグ (例: Key="Department"、Value="Accounting") を作成できます。これは、コストの配分と追跡に役立ちます。タグは、タグを使用するアプリケーションごとに、グループリソースにまとめて割り当てることができます (Key="AppName" and Value="HRDatabase。タグを作成する用途は問いません。シークレットのように、各リソースには複数のタグを付けることができます。詳細については、『AWS Answers』ウェブサイトの「AWS タグ付け戦略」を参照してください。

    重要

    シークレットに関する機密情報をタグに保存しないでください。機密情報は、情報が暗号で保護されているシークレットのシークレット値 (SecretString または SecretBinary フィールド) にのみ保存します。

  6. [名前]、[説明]、[タグ] を指定したら、[次へ] を選択します。

  7. (オプション) この時点で、シークレットのローテーションを設定することができます。ここではローテーションのない「基本」シークレットを扱っているため、[自動ローテーションを無効化] のままにして [次へ] を選択します。

    新規または既存のシークレットでローテーションを設定する方法については、「AWS Secrets Manager シークレットの更新」を参照してください。

  8. 設定を確認したら [Store secret (シークレットの保存)] を選択して、入力した内容すべてを Secrets Manager の新しいシークレットとして保存します。

Using the AWS CLI or AWS SDK operations

以下のコマンドを使用して、Secrets Manager に基本シークレットを作成します。

ここでは、別のタブのコンソールベースのシークレット作成と同等の処理を実行する AWS CLI コマンドの例を示します。このコマンドでは、この例の JSON テキスト構造 {"username":"anika","password":"aDM4N3*!8TT"} などのシークレットを、mycreds.json という名前のファイルに配置したことを前提にしています。

$ aws secretsmanager create-secret --name production/MyAwesomeAppSecret --secret-string file://mycreds.json { "SecretARN": "arn:aws:secretsmanager:region:accountid:secret:production/MyAwesomeAppSecret-AbCdEf", "SecretName": "production/MyAwesomeAppSecret", "SecretVersionId": "EXAMPLE1-90ab-cdef-fedc-ba987EXAMPLE" }

重要

使用する SecretString に任意の形式を使い、基本的なシークレットを作成できます。たとえば、シンプルな JSON キー値ペアを使用できます。たとえば、{"username":"someuser", "password":"securepassword"}。ただし、後でこのシークレットにローテーションを有効化する場合には、このシークレットで使用するローテーション関数によって予期される特定の構造を使用する必要があります。シークレット値を操作するために各ローテーション関数で必要となるものの詳細については、Lambda ローテーション関数の作成に使用できる AWS テンプレート の該当するローテーション値のエントリで「予測される SecretString 値」を参照してください。

AWS CLI によってパラメータは自動的に生成され提供されるため、ClientRequestToken パラメータは不要です。また、KmsKeyId パラメータも必要ありません。アカウントのデフォルトの Secrets Manager CMK を使用します。SecretString を使用している場合、SecretBinary は使用できません。SecretType は、Secrets Manager コンソールで使用するために予約されています。

シークレットを使用してデータベースにアクセスするアプリケーションを顧客が使用する作業環境では、アプリがシークレットにアクセスするために使用する IAM ユーザーまたはロールにアクセス許可を付与する必要があります。これを行うには、リソースベースのポリシーをシークレットに直接アタッチして、ユーザーまたはロールを Principal エレメントにリストすることで実行できます。または、Resource エレメントでシークレットを識別するポリシーをユーザーまたはロールに関連付けることができます。