基本的なシークレットを作成する - AWS Secrets Manager

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

AWS Secrets Manager を使用すると、最小限の労力で基本的なシークレットを保存することができます。基本的なシークレットは、最低限のメタデータと 1 つの暗号化されたシークレット値で構成されます。Secrets Manager ではシークレットを保存し、AWSCURRENT を使用してそのシークレットに自動的にラベルを付けます。

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

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

Using the Secrets Manager console
最小限必要なアクセス権限

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

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

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

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

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

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

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

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

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

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

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

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

    注記

    Systems Manager パラメータストアにシークレットを追加する場合は、ディレクトリ構造にスラッシュを追加する必要があります。詳細については、AWS Systems Manager ドキュメントの「パラメータを階層に編成」を参照してください。

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

    重要

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

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

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

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

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

Amazon RDS

このタイプのシークレットは、サポートされているデータベースサービスの 1 つに対して使用します。これらのサービスに対し、Secrets Manager は、事前設定済みの 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 は他のタイプのデータベースをサポートし、これらのタイプにこのシークレットを使用します。ただし、データベースに関する追加情報を提供する必要があります。このシークレットを更新するには、シークレットを解析してサービスとやり取りして、シークレットを更新する カスタム 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 を作成するためのアクセス許可が必要です。

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 値」のエントリを参照してください。

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

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