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

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

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

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

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

機密データを管理するために、セキュアな文字列パラメータを作成できます。Parameter Store は、AWS KMS keys を使用して、ユーザーが作成または変更した際に、Secure String パラメータのパラメータ値を暗号化します。また、アクセス時に KMS キーを使用してパラメータ値を復号します。Parameter Store がアカウント用に作成する AWS マネージドキー を使用するか、独自のカスタマーマネージドキーを指定できます。

重要

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

Parameter Store は、スタンダードとアドバンストの 2 つのセキュリティで保護された文字列パラメータをサポートします。スタンダードパラメータは 4,096 バイトを上限とし、ユーザーが指定した KMS キーで直接、暗号化および復号されます。アドバンスト Secure String パラメータを暗号化および復号するために、Parameter Store は AWS Encryption SDK でエンベロープ暗号化を使用します。スタンダード Secure String パラメータをアドバンストパラメータに変換できますが、アドバンストパラメータをスタンダードパラメータに変換することはできません。スタンダードとアドバンスト Secure String パラメータの違いの詳細については、AWS Systems Manager ユーザーガイドの Systems Manager のアドバンストパラメータについてを参照してください。

スタンダード Secure String パラメータの保護

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

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

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

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

標準の Secure String パラメータを作成するには、Systems Manager API の PutParameterオペレーションを使用します。Tier パラメータを省略するか、デフォルトの値である Standard を指定します。値が SecureStringType パラメータを含めます。KMS キーを指定するには、KeyId パラメータを使用します。デフォルトは、アカウントの AWS マネージドキー である aws/ssm です。

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

次の例では、AWS CLI で Systems Manager put-parameter コマンドとその --type パラメータを使用して、Secure String パラメータを作成します。コマンドではオプションの --tier パラメータと --key-id パラメータが省略されるため、Parameter Store はスタンダード Secure String パラメータを作成し、AWS マネージドキー で暗号化します。

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

次の類似した例では、--key-id パラメータを使用してカスタマーマネージドキーを指定します。この例では、KMS キー ID を使用して KMS キーを識別しますが、任意の有効な KMS キー識別子を使用することができます。コマンドでは Tier パラメータ (--tier) を省略するため、Parameter Store では、アドバンストパラメータではなく、スタンダード Secure String パラメータが作成されます。

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

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

次の例では、AWS CLI の Systems Manager get-parameter コマンドを使用して、値を復号せずに Parameter Store から MyParameter パラメータを取得します。

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

返す前にパラメータ値を復号するには、GetParameterWithDecryption パラメータを 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 が KMS キーを使用してスタンダード Secure String パラメータを暗号化および復号する方法を示しています。

スタンダードパラメータの暗号化

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

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

    
              スタンダード Secure String パラメータ値の暗号化

標準パラメータの復号

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

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

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

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

PutParameter を使用してアドバンスト Secure String パラメータを作成する場合、Parameter Store は AWS Encryption SDK および対称暗号化 AWS KMS key によるエンベロープ暗号化を使用してパラメータ値を保護します。アドバンストパラメータ値は、それぞれ一意のデータキーで暗号化され、そのデータキーは KMS キーで暗号化されます。アカウントの AWS マネージドキー (aws/ssm) または任意のカスタマーマネージドキーを使用できます。

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

Secure String パラメータ値ごとに、Parameter Store は を呼び出しAWS Encryption SDK、 AWS KMSが生成する一意のデータキー () を使用してパラメータ値を暗号化しますGenerateDataKey。AWS Encryption SDK は、暗号化されたパラメータ値と一意のデータキーの暗号化されたコピーを含む、暗号化されたメッセージを Parameter Store に返します。Parameter Store は、暗号化されたメッセージ全体を Secure String パラメータ値に格納します。次に、アドバンスト Secure String パラメータ値を取得すると、Parameter Store は AWS Encryption SDK を使用してパラメータ値を復号します。これには、AWS KMS を呼び出して、暗号化されたデータを復号する必要があります。

アドバンスト Secure String パラメータを作成するには、Systems Manager API の PutParameterオペレーションを使用します。Tier パラメータの値を Advanced に設定します。値が SecureStringType パラメータを含めます。KMS キーを指定するには、KeyId パラメータを使用します。デフォルトは、アカウントの AWS マネージドキー である aws/ssm です。

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

次の類似した例では、--key-id パラメータを使用してカスタマーマネージドキーを指定します。例では、KMS キーの Amazon リソースネーム (ARN) を使用していますが、任意の有効な KMS キー識別子を使用することもできます。

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 から Secure String パラメータを取得する場合、その値は AWS Encryption SDK から返される暗号化されたメッセージです。パラメータを取得するには、Systems Manager API の GetParameter オペレーションを使用します。

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

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

返す前にパラメータ値を復号するには、GetParameterWithDecryption パラメータを 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 に変換するには、Overwrite パラメータで PutParameter オペレーションを使用します。TypeSecureStringTier 値は Advanced である必要があります。カスタマーマネージドキーを識別する KeyId パラメータはオプションです。省略すると、Parameter Store はアカウントの AWS マネージドキー を使用します。スタンダードパラメータの暗号化に異なる KMS キーを使用した場合でも、プリンシパルが使用を許可されている任意の KMS キーを指定することができます。

Overwrite パラメータを使用する際、Parameter Store は AWS Encryption 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 が KMS キーを使用して、アドバンスト Secure String パラメータを暗号化および復号する方法を示しています。

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

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

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

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

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

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

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

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

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

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

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

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

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

スタンダードの Secure String パラメータ値を暗号化するには、ユーザーに kms:Encrypt 権限が必要です。アドバンスト Secure String パラメータ値を暗号化するには、ユーザーに kms:GenerateDataKey 権限が必要です。どちらのタイプの Secure String パラメータ値を復号するにも、ユーザーに kms:Decrypt 権限が必要です。

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

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

次の例は、スタンダードの Secure String パラメータ用に設計された IAM ポリシーを示しています。これにより、ユーザーは FinancialParameters パス内のすべてのパラメータに対して Systems Manager PutParameter オペレーションを呼び出すことができます。このポリシーにより、ユーザーはサンプルカスタマーマネージドキーで 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" } ] }

次の例は、アドバンスト Secure String パラメータ用に設計された IAM ポリシーを示しています。これにより、ユーザーは ReservedParameters パス内のすべてのパラメータに対して Systems Manager PutParameter オペレーションを呼び出すことができます。このポリシーにより、ユーザーはサンプルカスタマーマネージドキーで 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" } ] }

最後の例では、スタンダードまたはアドバンスト Secure String パラメータに使用できる IAM ポリシーも示しています。これにより、ユーザーは ITParameters パス内のすべてのパラメータに対して Systems Manager の GetParameter オペレーション (および関連する操作) を呼び出すことができます。このポリシーにより、ユーザーはサンプルカスタマーマネージドキーで 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" } ] }

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

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

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

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

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

  • キー: PARAMETER_ARN

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

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

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

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

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

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

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

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

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

次の IAM ポリシーステートメントの例では、ユーザーが MyParameter パラメータの get 値と、指定した KMS キーを使用してその値を復号できるようにします。ただし、アクセス許可は、暗号化コンテキストが指定された文字列と一致する場合にのみ適用されます。これらのアクセス許可は他のパラメータや KMS キーには適用されません。また、暗号化コンテキストが文字列と一致しない場合、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" } } } ] }

Parameter Store で KMS キーの問題をトラブルシューティングする

Secure String パラメータに対して任意のオペレーションを実行するには、Parameter Store が目的のオペレーションに対して、指定した AWS KMS KMS キーを使用できる必要があります。KMS キーに関連する Parameter Store の障害のほとんどは、次の問題に起因します。

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

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

  • KMS キーが見つからない。

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

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

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