AWS Systems Manager Parameter Store で AWS KMS を使用する方法 - AWS Key Management Service

「翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。」

AWS Systems Manager Parameter Store で AWS KMS を使用する方法

ではAWS Systems ManagerParameter Store、プレーンテキストsecure stringのパラメータ名と暗号化されたパラメータ値を持つパラメータであるパラメータを作成できます。 Parameter Store は AWS KMS を使用してsecure stringパラメータのパラメータ値を暗号化および復号します。

Parameter Store を使用すると、値を持つパラメータとしてデータを作成、保存、管理することができます。Parameter Store にパラメータを作成し、それを設計したポリシーとアクセス許可の対象となる複数のアプリケーションやサービスで使用することができます。パラメータの値を変更する必要がある場合は、エラーが発生しやすい変更を多数のソースで管理するのではなく、1 つのインスタンスを変更します。Parameter Store はパラメータ名の階層構造をサポートしているため、特定の用途に応じてパラメータを選別できます。

secure string パラメータを作成して、機密データを管理することができます。Parameter Store は、AWS KMS カスタマーマスターキー (CMKs) を使用して、secure string パラメータを作成または変更する際にそのパラメータ値を暗号化します。また、アクセス時に CMKs を使用してパラメータ値を復号します。アカウント用に AWS がCMK作成する Parameter Store 管理の を使用するか、独自のカスタマー管理の を指定できますCMK

重要

Parameter Store は、対称 CMKs のみをサポートしています。非対称 CMK を使用してパラメータを暗号化することはできません。CMK が対称か非対称かを判断する方法については、「対称および非対称 CMKs の識別」を参照してください。

Parameter Store はsecure string、スタンダードアドバンストの 2 つのパラメータ階層をサポートしています。標準パラメータは、4096 バイトを上限とし、ユーザーが指定した CMK を使って直接暗号化および復号されます。アドバンストの secure string パラメータを暗号化および復号化するには、Parameter Store は AWS 暗号化 SDK を使用したエンベロープ暗号化を行います。標準の secure string パラメータをアドバンストパラメータに変換することはできますが、アドバンストパラメータを標準パラメータに変換することはできません。標準パラメータとアドバンストsecure stringパラメータの違いの詳細については、の「アドバンストパラメータSystems Managerについて」を参照してくださいAWS Systems Manager ユーザーガイド。

標準 Secure String パラメータの保護

Parameter Store は暗号化オペレーションを実行しません。代わりに、AWS KMS を使用して、secure string パラメータ値を暗号化および復号します。標準の secure string パラメータ値を作成または変更すると、Parameter Store は AWS KMS暗号化オペレーションを呼び出します。このオペレーションでは、 を使用してAWS KMSデータCMKCMKキーを生成する代わりに、対称 を直接使用してパラメータ値を暗号化します。

CMK がパラメータ値を暗号化するために使用する Parameter Store を選択できます。CMK を指定しない場合、Parameter Store は AWS がアカウントに自動的に作成する CMK 管理の Systems Manager を使用します。この CMK には aws/ssm エイリアスがあります。

アカウントaws/ssmCMKのデフォルトを表示するには、 API で DescribeKeyAWS KMS オペレーションを使用します。次の例では、describe-key エイリアス名を持つ AWS Command Line Interface (AWS CLI) の aws/ssm コマンドを使用します。

aws kms describe-key --key-id alias/aws/ssm

標準secure stringパラメータを作成するには、 API で PutParameterSystems Manager オペレーションを使用します。Tier パラメータを省略するか、デフォルトの値である Standard を指定します。値が の Type パラメータを含めますSecureString。AWS KMS CMK を指定するには、KeyId パラメータを使用します。デフォルトは、アカウントの AWS 管理 CMK である aws/ssm です。

Parameter Store は AWS KMS とプレーンテキストパラメータ値を使用して Encrypt CMK オペレーションを呼び出します。AWS KMS は暗号化したパラメータ値を返します。この値を Parameter Store はパラメータ名とともに保存します。

次の例では、 で Systems Manager put-parameter コマンドとその--typeパラメータAWS CLIを使用してsecure stringパラメータを作成します。このコマンドはオプションの --tier および --key-id パラメータを省略するため、Parameter Store は標準の secure string パラメータを作成し、それを AWS 管理 CMK を使って暗号化します。

aws ssm put-parameter --name MyParameter --value "secret_value" --type SecureString

次の例では、--key-id パラメータを使用して類似したカスタマー管理の CMK を指定します。この例では、CMK ID を使用して CMK を識別していますが、任意の有効な CMK 識別子を使用することもできます。このコマンドは Tier パラメータ (--tier) を省略するため、Parameter Store は、アドバンストではなく標準の secure string パラメータを作成します。

aws ssm put-parameter --name param1 --value "secret" --type SecureString --key-id 1234abcd-12ab-34cd-56ef-1234567890ab

secure string から Parameter Store パラメータを取得すると、その値が暗号化されます。パラメーターを取得するには、 API で GetParameter Systems Manager オペレーションを使用します。

次の例では、Systems Manager で get-parameterAWS CLI コマンドを使用して、値を復号化することなく MyParameter から Parameter Store パラメーターを取得します。

$ aws ssm get-parameter --name MyParameter { "Parameter": { "Type": "SecureString", "Name": "MyParameter", "Value": "AQECAHgnOkMROh5LaLXkA4j0+vYi6tmM17Lg/9E464VRo68cvwAAAG8wbQYJKoZIhvcNAQcGoGAwXgIBADBZBgkqhkiG9w0BBwEwHgYJYZZIAWUDBAEuMBEEDImYOw44gna0Jm00hAIBEIAsjgr7mum1EnnXzE3xM8bGle0oKYcfVCHtBkfjIeZGTgL6Hg0fSDnpMHdcSXY=" } }

返す前にパラメータ値を復号化するには、WithDecryptionGetParameter パラメータを true に設定します。WithDecryption を使用すると、Parameter Store はユーザーに代わって AWS KMS Decrypt オペレーションを呼び出して、パラメータ値を復号します。その結果、GetParameter リクエストは、次の例に示すように、プレーンテキストパラメータ値を持つパラメータを返します。

$ aws ssm get-parameter --name MyParameter --with-decryption { "Parameter": { "Type": "SecureString", "Name": "MyParameter", "Value": "secret_value" } }

次のワークフローでは、Parameter Store が AWS KMS CMK を使って標準の secure string パラメータを暗号化および復号します。

標準パラメータの暗号化

  1. PutParameter を使って secure string パラメータを作成する場合、Parameter Store は、Encrypt に AWS KMS リクエストを送信します。このリクエストには、プレーンテキストのパラメータ値、ユーザーが選択した CMK、Parameter Store 暗号化コンテキストが含まれます。AWS KMS への送信時に、secure string パラメータのプレーンテキスト値は、Transport Layer Security (TLS) によって保護されます。

  2. AWS KMS は、指定の CMK と暗号化コンテキストを使ってパラメータ値を暗号化します。暗号化テキストを Parameter Store に返し、そこでパラメータ名と暗号化された値が保存されます。

    
              標準 secure string パラメータ値の暗号化

標準パラメータの復号

  1. WithDecryption リクエストに GetParameter パラメータを含めると、 Parameter Store は暗号化されたDecryptパラメータ値とAWS KMSsecure string暗号化コンテキストParameter Storeを使用して にリクエストを送信します。

  2. AWS KMS は、同じ CMK と指定の暗号化コンテキストを使って、暗号化された値を復号します。これは、プレーンテキストの (復号化された) パラメータ値を Parameter Store に返します。送信中、プレーンテキストのデータは TLS によって保護されます。

  3. Parameter Store は、プレーンテキストパラメータ値を GetParameter レスポンスで返します。

アドバンストの Secure String パラメータの保護

PutParameter を使用してアドバンストsecure stringパラメータを作成すると、 Parameter Store は でエンベロープ暗号化AWS 暗号化 SDKを使用し、対称 AWS KMS カスタマーマスターキー (CMK) を使用してパラメータ値を保護します。アドバンストパラメータ値は、それぞれ一意のデータキーで暗号化され、そのデータキーは AWS KMS CMK で暗号化されます。アカウント用の AWS 管理 CMK (aws/ssm) か、任意のカスタマー管理 CMK を使用できます。

AWS 暗号化 SDK は、オープンソースのクライアント側ライブラリで、業界標準とベストプラクティスに沿ったデータの暗号化および復号化に役立ちます。これは、複数のプラットフォームと、コマンドラインインターフェイスを含む複数のプログラミング言語でサポートされています。ソースコードを表示し、GitHub での開発に貢献することができます。

各 secure string パラメータ値に対して、Parameter Store は AWS 暗号化 SDK を呼び出し、AWS KMS が生成する一意のデータキー (GenerateDataKey) を使ってパラメータ値を暗号化します。はAWS 暗号化 SDK、Parameter Store暗号化されたパラメータ値と一意のデータキーの暗号化されたコピーを含む暗号化されたメッセージhttps://docs.aws.amazon.com/encryption-sdk/latest/developer-guide/concepts.html#messageに戻ります。 Parameter Store は、暗号化されたメッセージ全体をsecure stringパラメータ値に保存します。その後、アドバンスト secure string パラメータ値を取得すると、Parameter Store は AWS 暗号化 SDK を使ってパラメータ値を復号化します。これには、AWS KMS を呼び出して、暗号化されたデータを復号化する必要があります。

アドバンストsecure stringパラメータを作成するには、 API で PutParameterSystems Manager オペレーションを使用します。Tier パラメータの値を に設定しますAdvanced。値が のTypeパラメータを含めますSecureString。AWS KMS CMK を指定するには、KeyId パラメータを使用します。デフォルトは、アカウントの AWS 管理 CMK である aws/ssm です。

aws ssm put-parameter --name MyParameter --value "secret_value" --type SecureString --tier Advanced

次の例では、--key-id パラメータを使用して類似したカスタマー管理の CMK を指定します。例では、CMK の Amazon リソースネーム (ARN) を使用していますが、有効な CMK ID を使用することもできます。

aws ssm put-parameter --name MyParameter --value "secret_value" --type SecureString --tier Advanced --key-id arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab

secure string から Parameter Store パラメータを取得すると、その値は、AWS 暗号化 SDK が返した暗号化されたメッセージとなります。パラメーターを取得するには、 API で GetParameter Systems Manager オペレーションを使用します。

次の例では、Systems Manager GetParameter オペレーションを使用して MyParameter から値を復号化せずに Parameter Store パラメータを取得します。

$ aws ssm get-parameter --name MyParameter { "Parameter": { "Type": "SecureString", "Name": "MyParameter", "Value": "AQECAHgnOkMROh5LaLXkA4j0+vYi6tmM17Lg/9E464VRo68cvwAAAG8wbQYJKoZIhvcNAQcGoGAwXgIBADBZBgkqhkiG9w0BBwEwHgYJYZZIAWUDBAEuMBEEDImYOw44gna0Jm00hAIBEIAsjgr7mum1EnnXzE3xM8bGle0oKYcfVCHtBkfjIeZGTgL6Hg0fSDnpMHdcSXY=" } }

返す前にパラメータ値を復号化するには、WithDecryptionGetParameter パラメータを true に設定します。WithDecryption を使用すると、Parameter Store はユーザーに代わって AWS KMS Decrypt オペレーションを呼び出して、パラメータ値を復号します。その結果、GetParameter リクエストは、次の例に示すように、プレーンテキストパラメータ値を持つパラメータを返します。

$ aws ssm get-parameter --name MyParameter --with-decryption { "Parameter": { "Type": "SecureString", "Name": "MyParameter", "Value": "secret_value" } }

アドバンスト secure string パラメータを標準パラメータに変換することはできますが、標準 secure string をアドバンストに変換することはできません。標準 secure string パラメータをアドバンスト secure string に変換するには、PutParameter パラメータを使った Overwrite オペレーションを実行します。TypeSecureStringTier値は である必要がありますAdvanced。カスタマー管理 KeyId を特定する CMK パラメータの使用は任意です。このパラメータを省略すると、Parameter Store は、アカウント用の AWS 管理 CMK を使用します。標準パラメータの暗号化に使用した CMK とは異なる場合でも、プリンシパルが使用を許可されている任意の CMK を指定することができます。

Overwrite パラメータを使用すると、Parameter Store は AWS 暗号化 SDK を使用してパラメータ値を暗号化します。続いて、新たに暗号化されたメッセージを Parameter Store に保存します。

$ aws ssm put-parameter --name myStdParameter --value "secret_value" --type SecureString --tier Advanced --key-id 1234abcd-12ab-34cd-56ef-1234567890ab --overwrite

次のワークフローでは、Parameter Store が AWS KMS CMK を使ってアドバンストの secure string パラメータを暗号化および復号します。

アドバンストパラメータの暗号化

  1. PutParameter を使用してアドバンストsecure stringパラメータを作成すると、 は Parameter Store と AWS 暗号化 SDK を使用してパラメータ値をAWS KMS暗号化します。 はパラメータ値Parameter StoreAWS 暗号化 SDK、指定した 、暗号化AWS KMSCMKコンテキストParameter Storeを使用して を呼び出します。

  2. はAWS 暗号化 SDK、指定した の識別子と暗号化コンテキストを使用してAWS KMSGenerateDataKeyCMK リクエストを Parameter Store に送信します。 AWS KMS は、一意のデータキーの 2 つのコピーを返します。プレーンテキストで 1 つ、 で暗号化されていますCMK。(暗号化コンテキストは、データキーを暗号化するときに使用します)。

  3. AWS 暗号化 SDK はプレーンテキストのデータキーを使ってパラメータ値を暗号化し、暗号化されたメッセージを戻します。このメッセージは、暗号化されたパラメータ値、暗号化されたデータキー、そして Parameter Store 暗号化コンテキストなどのその他のデータを含みます。

  4. Parameter Store は、暗号化されたメッセージをパラメータ値として保存します。

    
              アドバンスト secure string パラメータ値の暗号化

アドバンストパラメータの復号

  1. アドバンスト WithDecryption パラメータを取得するための GetParameter リクエストに、secure string パラメータを含めることができます。これを行うと、Parameter Store は暗号化されたメッセージをパラメータ値から AWS 暗号化 SDK の復号化メソッドに渡します。

  2. AWS 暗号化 SDK は KMS Decrypt オペレーションを呼び出します。これは、暗号化されたメッセージから暗号化されたデータキーと Parameter Store 暗号化コンテキストを渡します。

  3. AWS KMS は、CMK と Parameter Store 暗号化コンテキストを使って、暗号化されたデータキーを復号します。続いて、プレーンテキストの (復号化された) データキーを AWS 暗号化 SDK に返します。

  4. AWS 暗号化 SDK は、プレーンテキストのデータキーを使ってパラメータ値を復号化し、プレーンテキストのパラメータ値を Parameter Store に返します。

  5. Parameter Store は暗号化コンテキストを検証し、プレーンテキストパラメータ値を GetParameter レスポンスで返します。

パラメータ値を暗号化および復号するためのアクセス許可の設定

ユーザーが標準 secure string パラメータの値を暗号化するには、kms:Encrypt アクセス許可が必要です。ユーザーがアドバンスト secure string パラメータの値を暗号化するには、kms:GenerateDataKey アクセス許可が必要です。ユーザーがいずれかのタイプの secure string パラメータの値を復号化するには、kms:Decrypt アクセス許可が必要です。

IAM ポリシーを使用し、ユーザーに対して Systems Manager PutParameter および GetParameter オペレーションを呼び出すためのアクセス許可を許可または拒否できます。

カスタマー管理の CMKs を使用して secure string パラメータ値を暗号化している場合は、IAM ポリシーとキーポリシーを使用して暗号化および復号のアクセス許可を管理できます。ただし、デフォルトの aws/ssm CMK に対してアクセス許可ポリシーを確立することはできません。カスタマー管理の CMKs へのアクセスを制御する方法の詳細については、「AWS KMS の認証とアクセスコントロール」を参照してください。

次の例は、標準 IAM パラメータ用に設計された secure string ポリシーです。このポリシーによって、ユーザーは、Systems Manager パスのすべてのパラメータに対して PutParameter FinancialParameters オペレーションの呼び出しを許可されます。このポリシーにより、ユーザーは、例にあるカスタマー管理 AWS KMS で Encrypt CMK オペレーションを呼び出すこともできます。

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "ssm:PutParameter" ], "Resource": "arn:aws:ssm:us-west-2:111122223333:parameter/FinancialParameters/*" }, { "Effect": "Allow", "Action": [ "kms:Encrypt" ], "Resource": "arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab" } ] }

次の例は、アドバンスト IAM パラメータ用に設計された secure string ポリシーです。このポリシーによって、ユーザーは、Systems Manager パスのすべてのパラメータに対して PutParameter ReservedParameters オペレーションの呼び出しを許可されます。このポリシーにより、ユーザーは、例にあるカスタマー管理 AWS KMS で GenerateDataKey CMK オペレーションを呼び出すこともできます。

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "ssm:PutParameter" ], "Resource": "arn:aws:ssm:us-west-2:111122223333:parameter/ReservedParameters/*" }, { "Effect": "Allow", "Action": [ "kms:GenerateDataKey" ], "Resource": "arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab" } ] }

最後の例も、標準またはアドバンスト secure string パラメータに使用できる IAM ポリシーを示します。このポリシーによって、ユーザーは、Systems Manager パスのすべてのパラメータに対して GetParameter ITParameters オペレーション (および関連するオペレーション) の呼び出しを許可されます。このポリシーにより、ユーザーは、例にあるカスタマー管理 AWS KMS で Decrypt CMK オペレーションを呼び出すこともできます。

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "ssm:GetParameter*" ], "Resource": "arn:aws:ssm:us-west-2:111122223333:parameter/ITParameters/*" }, { "Effect": "Allow", "Action": [ "kms:Decrypt" ], "Resource": "arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab" } ] }

Parameter Store の暗号化コンテキスト

暗号化コンテキスト は、一連のキーと値のペアを含む任意非シークレットデータです。データを暗号化するリクエストに暗号化コンテキストを組み込むと、AWS KMS は暗号化コンテキストを暗号化されたデータに暗号化してバインドします。データを復号化するには、同じ暗号化コンテキストに渡す必要があります。

また、暗号化コンテキストを使用して、監査レコードおよびログ内の暗号化オペレーションを識別することもできます。暗号化コンテキストは、AWS CloudTrail ログなどのログにプレーンテキストで表示されます。

AWS 暗号化 SDK も暗号化コンテキストを取りますが、その処理方法は異なります。Parameter Store が暗号化メソッドの暗号化コンテキストを指定します。AWS 暗号化 SDK は、暗号的に暗号化コンテキストを暗号化されたデータにバインドします。また、暗号化されたメッセージを返す際、ヘッダーに暗号化コンテキストをプレーンテキストとして含めます。ただし、AWS KMS とは異なり、AWS 暗号化 SDK の復号化メソッドは、入力として暗号化コンテキストを取りません。その代わり、AWS 暗号化 SDK は、データを復号化する際に暗号化されたメッセージから暗号化コンテキストを取得します。Parameter Store は、暗号化コンテキストに指定の値が含まれていることを検証してから、プレーンテキストパラメータ値を返します。

Parameter Store は、暗号化オペレーションで次の暗号化コンテキストを使用します。

  • キー: PARAMETER_ARN

  • 値: 暗号化されるパラメータの Amazon リソースネーム (ARN)。

暗号化コンテキストの形式は以下のとおりです。

"PARAMETER_ARN":"arn:aws:ssm:<REGION_NAME>:<ACCOUNT_ID>:parameter/<parameter-name>"

たとえば Parameter Store は、サンプルの MyParameter アカウントとリージョンで、AWS パラメータを暗号化および復号する呼び出しにこの暗号化コンテキストを含めます。

"PARAMETER_ARN":"arn:aws:ssm:us-west-2:111122223333:parameter/MyParameter"

パラメータが Parameter Store 階層パスにある場合、パスと名前は暗号化コンテキストに組み込まれます。たとえば、サンプルの MyParameter アカウントとリージョンのパス /ReadableParameters で AWS パラメータを暗号化および復号化するときに、この暗号化コンテキストが使用されます。

"PARAMETER_ARN":"arn:aws:ssm:us-west-2:111122223333:parameter/ReadableParameters/MyParameter"

正しい暗号化コンテキストと、secure string AWS KMS オペレーションが返す暗号化されたパラメータ値を使用して Decrypt Systems Manager オペレーションを呼び出し、暗号化された GetParameter パラメータ値を復号化することができます。ただし、Parameter Store パラメータ値の復号化には、GetParameter オペレーションと WithDecryption パラメータを使用することをお勧めします。

暗号化コンテキストを IAM ポリシーに含めることもできます。たとえば、ユーザーが特定の 1 つのパラメータ値またはパラメータ値のセットのみを復号化できるようにすることができます。

次の例の IAM ポリシーステートメントでは、ユーザーは MyParameter パラメータの値を取得し、指定された CMK を使用してその値を復号できます。ただし、アクセス許可は、暗号化コンテキストが指定された文字列と一致する場合にのみ適用されます。これらのアクセス許可は他のパラメータや CMK には適用されず、暗号化コンテキストが文字列と一致しない場合、GetParameter の呼び出しは失敗します。

このようなポリシーステートメントを使用するときは、事前にサンプルの ARN を有効な値で置き換えてください。

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "ssm:GetParameter*" ], "Resource": "arn:aws:ssm:us-west-2:111122223333:parameter/MyParameter", }, { "Effect": "Allow", "Action": [ "kms:Decrypt" ], "Resource": "arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab", "Condition": { "StringEquals": { "kms:EncryptionContext:PARAMETER_ARN":"arn:aws:ssm:us-west-2:111122223333:parameter/MyParameter" } } } ] }

CMK での Parameter Store の問題のトラブルシューティング

secure string パラメータに対してオペレーションを実行するには、Parameter Store は、指定したオペレーションに指定した AWS KMS CMK を使用できる必要があります。Parameter Store に関する CMKs の失敗の大部分は、次の問題によって引き起こされます。

  • アプリケーションが使用している認証情報には、CMK で指定されたアクションを実行するアクセス許可がありません。

    このエラーを解決するには、異なる認証情報を使用してアプリケーションを実行するか、オペレーションを妨げている IAM またはキーポリシーを修正します。AWS KMS IAM とキーポリシーのヘルプについては、「AWS KMS の認証とアクセスコントロール」を参照してください。

  • CMK が見つかりません。

    これは、通常 CMK に誤った識別子を使用した場合に発生します。の正しい識別子を見つけ、もう一度 コマンドCMKを試してください。

  • CMK は有効になっていません。これが発生すると、 Parameter Store は を返します。InvalidKeyId 例外 ( からの詳細なエラーメッセージを含むAWS KMS)。CMK の状態が Disabled の場合、有効にしますPending Import の場合は、インポート手順を完了してください。キーの状態が Pending Deletion の場合は、キーの削除をキャンセルするか、別の CMK を使用します。

    コンソールで のCMKキーステータスAWS KMSを確認するには、[カスタマー管理型のキーまたは AWS 管理型のキー] ページで、[ステータス] 列を参照してください。AWS KMS APIを使用して CMK の状態を確認するには、DescribeKey オペレーションを使用します。