その方法AWS Systems ManagerパラメータストアはAWS KMS - AWS Key Management Service

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

その方法AWS Systems ManagerパラメータストアはAWS KMS

とAWS Systems Managerパラメータストアでは、Secure String パラメータこれは、プレーンテキストのパラメータ名とと暗号化されたパラメーター値を持つパラメーターです。パラメータストアはAWS KMSは、セキュア文字列パラメータのパラメータ値を暗号化および復号化します。

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

機密データを管理するために、セキュアな文字列パラメータを作成できます。パラメータストアはAWS KMSカスタマーマスターキー (CMK) を使用して、セキュア文字列パラメーターのパラメーター値をユーザーが作成または変更するときに暗号化します。また、アクセス時に CMK を使用してパラメータ値を復号化します。「」を使用できます。AWS管理 CMKParameter Store がアカウント用に作成するか、独自のカスタマー管理 CMK

重要

パラメータストアは、 シンメトリック CMKのみをサポートします。 非対称型 CMK を使用してパラメータを暗号化することはできません。CMK が対称か非対称かを判断する方法については、「」を参照してください 対称 CMK と非対称 CMK の識別

Parameter Store は、 標準高度の 2 つのセキュリティで保護された文字列パラメータをサポートします。標準パラメータは、4096 バイトを上限とし、ユーザーが指定した CMK を使って直接暗号化および復号化されます。高度なセキュリティで保護された文字列パラメータを暗号化および復号化するために、Parameter Store はAWS 暗号化 SDK。標準のセキュア文字列パラメーターを高度なパラメーターに変換できますが、高度なパラメーターを標準パラメーターに変換することはできません。標準および高度なセキュリティで保護された文字列パラメーターの違いの詳細については、」Systems Manager の詳細パラメータについて()AWS Systems Managerユーザーガイド。

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

パラメータストアは、暗号化操作を実行しません。代わりに、それはAWS KMSを使用して、Secure String パラメータ値を暗号化および復号します。標準のセキュア文字列パラメータ値を作成または変更すると、Parameter Store は、AWS KMS Encryptオペレーション. この操作では、対称のAWS KMSCMK を使用してパラメータ値を暗号化する代わりに、CMK を直接使用してデータキー

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

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

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

標準のセキュリティで保護された文字列パラメーターを作成するには、システムマネージャー API で PutParameter 操作を使用します。Tier パラメータを省略するか、デフォルトの値である Standard を指定します。値が SecureStringType パラメータを含めます。AWS KMS CMK を指定するには、KeyId パラメータを使用します。デフォルトは、アカウントの AWS 管理 CMK である aws/ssm です。

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

次の例では、Systems Managerput-パラメータコマンドと、その--typeパラメータAWS CLIを使用して Secure String パラメータを作成します。コマンドはオプションの--tierおよび--key-idパラメーターストアは、標準のセキュア文字列パラメーターを作成し、それをAWS管理 CMK。

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

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

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

Parameter Store からセキュア文字列パラメータを取得すると、その値は暗号化されます。パラメータを取得するには、システムマネージャ API で GetParameter 操作を使用します。

次の例では、Systems Managerget-パラメータコマンドAWS CLIを取得します。MyParameterパラメータストアからパラメータストアを取得します。

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

返す前にパラメータ値を復号化するには、GetParameterWithDecryption パラメータを true に設定します。あなたが使用するときWithDecryptionを呼び出すと、パラメータストアはAWS KMS Decryptオペレーションを実行して、パラメータ値を復号します。その結果、GetParameter リクエストは、次の例に示すように、プレーンテキストパラメータ値を持つパラメータを返します。

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

次のワークフローは、パラメータストアがAWS KMSCMK を使用して、標準のセキュア文字列パラメータを暗号化および復号化します。

標準パラメータの暗号化

  1. あなたが使用するときPutParameterを使用して Secure String パラメータを作成すると、EncryptリクエストはAWS KMS。このリクエストには、プレーンテキストのパラメータ値、選択した CMK、および パラメータストアの暗号化コンテキストが含まれます。への送信時AWS KMSセキュリティ保護された文字列パラメーターのプレーンテキスト値は、Transport Layer Security (TLS) によって保護されます。

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

    
              標準のセキュア文字列パラメータ値の暗号化

標準パラメータの復号

  1. 含めるとWithDecryptionパラメータをGetParameterリクエストを送信すると、パラメータストアはDecryptリクエストはAWS KMSは、暗号化されたSecure String パラメータ値とパラメータストアの暗号化コンテキスト

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

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

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

あなたが使用するときPutParameter高度なセキュリティで保護された文字列パラメータを作成するには、Parameter Store はエンベロープ暗号化とAWS 暗号化 SDKと対称AWS KMSカスタマーマスターキー (CMK) を使用してパラメータ値を保護します。アドバンストパラメータ値は、それぞれ一意のデータキーで暗号化され、そのデータキーは AWS KMS CMK で暗号化されます。アカウント用の AWS 管理 CMK (aws/ssm) か、任意のカスタマー管理 CMK を使用できます。

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

セキュア文字列パラメータ値ごとに、Parameter Store はAWS 暗号化 SDKが持つ一意のデータキーを使ってパラメータ値を暗号化するにはAWS KMSが生成する (GenerateDataKey). -AWS 暗号化 SDKはパラメータストアに戻ります暗号化されたメッセージ暗号化されたパラメータ値と一意のデータキーの暗号化されたコピーが含まれます。Parameter Store は、暗号化されたメッセージ全体をセキュア文字列パラメータ値に格納します。次に、高度なセキュリティで保護された文字列パラメータ値を取得すると、Parameter Store は、AWS 暗号化 SDKパラメータ値を復号します。これには、AWS KMS を呼び出して、暗号化されたデータを復号化する必要があります。

高度なセキュリティで保護された文字列パラメーターを作成するには、システムマネージャー API で PutParameter 操作を使用します。Tier パラメータの値を Advanced に設定します。値が SecureStringType パラメータを含めます。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

Parameter Store からセキュア文字列パラメータを取得すると、その値は、AWS 暗号化 SDKが返されました。パラメータを取得するには、システムマネージャ API で GetParameter 操作を使用します。

次の例では、Systems Manager GetParameter 操作を使用して、値を復号化せずにパラメータストアからパラメータを取得します。 MyParameter

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

返す前にパラメータ値を復号化するには、GetParameterWithDecryption パラメータを true に設定します。あなたが使用するときWithDecryptionを呼び出すと、パラメータストアはAWS KMS Decryptオペレーションを実行して、パラメータ値を復号します。その結果、GetParameter リクエストは、次の例に示すように、プレーンテキストパラメータ値を持つパラメータを返します。

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

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

使用すると、Overwriteパラメーターの場合、パラメーターストアは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

次のワークフローは、パラメータストアがAWS KMSCMK を使用して、高度なセキュア文字列パラメータを暗号化および復号化します。

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

  1. あなたが使用するときPutParameter高度なセキュリティで保護された文字列パラメータを作成するには、Parameter Store はAWS 暗号化 SDKおよびAWS KMSパラメータ値を暗号化します。パラメータストアはAWS 暗号化 SDKをパラメータ値とAWS KMSCMK、およびパラメータストアの暗号化コンテキスト

  2. -AWS 暗号化 SDKはGenerateDataKeyリクエストはAWS KMS指定した CMK の識別子およびパラメータストアの暗号化コンテキストに置き換えます。AWS KMSは、一意のデータキーの 2 つのコピーを返します。1 つはプレーンテキストで、もう 1 つは CMK で暗号化されています。(暗号化コンテキストは、データキーを暗号化するときに使用します)。

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

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

    
              高度なセキュリティで保護された文字列パラメータ値の暗号化

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

  1. GetParameter リクエストに WithDecryption パラメータを含めると、高度なセキュア文字列パラメータを取得できます。これを行うと、パラメータストアは暗号化されたメッセージの復号化メソッドにAWS 暗号化 SDK。

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

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

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

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

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

標準のセキュア文字列パラメータ値を暗号化するには、ユーザーに kms:Encrypt 権限が必要です。高度なセキュリティで保護された文字列パラメータ値を暗号化するには、ユーザーに kms:GenerateDataKey 権限が必要です。どちらのタイプのセキュア文字列パラメータ値を復号化するには、ユーザーに kms:Decrypt 権限が必要です。

IAM ポリシーを使用して、ユーザーがシステムマネージャー PutParameterGetParameter オペレーションを呼び出すアクセス許可を許可または拒否できます。

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

次の例は、標準のセキュア文字列パラメータ用に設計された IAM ポリシーを示しています。これにより、ユーザーは FinancialParameters パス内のすべてのパラメータに対して Systems Manager PutParameter 操作を呼び出すことができます。また、ユーザーは、例にあるカスタマー管理 CMK で AWS KMS Encrypt オペレーションを呼び出すこともできます。

{ "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 ポリシーを示しています。これにより、ユーザーは ReservedParameters パス内のすべてのパラメータに対して Systems Manager PutParameter 操作を呼び出すことができます。また、ユーザーは、例にあるカスタマー管理 CMK で AWS KMS GenerateDataKey オペレーションを呼び出すこともできます。

{ "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" } ] }

最後の例では、標準または高度なセキュア文字列パラメータに使用できる IAM ポリシーも示しています。これにより、ユーザーは ITParameters パス内のすべてのパラメータに対して Systems Manager の GetParameter 操作 (および関連する操作) を呼び出すことができます。また、ユーザーは、例にあるカスタマー管理 CMK で AWS KMS Decrypt オペレーションを呼び出すこともできます。

{ "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" } ] }

パラメータストアの暗号化コンテキスト

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

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

-AWS 暗号化 SDKは暗号化コンテキストを使用しますが、処理方法は異なります。Parameter Store は、暗号化メソッドに暗号化コンテキストを提供します。AWS 暗号化 SDK は、暗号的に暗号化コンテキストを暗号化されたデータにバインドします。また、暗号化されたメッセージを返す際、ヘッダーに暗号化コンテキストをプレーンテキストとして含めます。ただし、AWS KMS とは異なり、AWS 暗号化 SDK の復号化メソッドは、入力として暗号化コンテキストを取りません。代わりに、データを復号化すると、AWS 暗号化 SDKは、暗号化されたメッセージから暗号化コンテキストを取得します。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"

暗号化されたセキュア文字列パラメータ値を復号化するには、AWS KMS Decrypt正しい暗号化コンテキストと、Systems Manager がGetParameterオペレーションが戻ります。ただし、パラメータで GetParameter オペレーションを使用して、Parameter Store パラメータ値を復号化することをお勧めします。 WithDecryption

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

次の IAM ポリシーステートメント例では、ユーザーが MyParameter パラメータの get 値と、指定した 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 がAWS KMS意図した操作で指定した CMK。CMK に関連するパラメータストアの失敗のほとんどは、次の問題が原因で発生します。

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

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

  • CMK が見つかりません。

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

  • CMK が有効になっていません。これが発生すると、パラメータストアはInvalidKeyIdからの詳細なエラーメッセージとともにAWS KMS。CMK のステータスが Disabled の場合、有効にしますPending Import の場合は、インポート手順を完了してください。キーステータスが Pending Deletion の場合は、キーの削除をキャンセルするか、別の CMK を使用します。

    を見つけるにはキーの状態内の CMK のAWS KMSコンソール、カスタマー管理キーまたはAWSマネージドキーページについては、ステータス列。AWS KMS APIを使用して CMK のステータスを確認するには、DescribeKey オペレーションを使用します。