

• AWS Systems Manager CloudWatch ダッシュボードは、2026 年 4 月 30 日以降は利用できなくなります。お客様は、これまでと同様に Amazon CloudWatch コンソールを使用して、Amazon CloudWatch ダッシュボードの表示、作成、管理を継続できます。詳細については、「[Amazon CloudWatch ダッシュボードのドキュメント](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/CloudWatch_Dashboards.html)」を参照してください。

# AWS Systems Manager Parameter Store SecureString パラメータの AWS KMS 暗号化
<a name="secure-string-parameter-kms-encryption"></a>

AWS Systems Manager Parameter Store を使用すると、プレーンテキストのパラメータ名および暗号化されたパラメータ値を持つ [SecureString パラメータ](https://docs.aws.amazon.com//systems-manager/latest/userguide/systems-manager-parameter-store.html#what-is-a-parameter)を作成できます。Parameter Store は AWS KMS を使用して、`SecureString` パラメータのパラメータ値を暗号化および復号します。

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

機密データを管理するために、`SecureString` パラメータを作成できます。Parameter Store は、`SecureString` パラメータを作成または変更する際に、AWS KMS keysを使用してそのパラメータ値を暗号化します。また、アクセス時に KMS キーを使用してパラメータ値を復号します。Parameter Store がアカウント用に作成した [AWS マネージドキー](https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#aws-managed-cmk)を使用することも、独自の[カスタマーマネージドキー](https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#customer-cmk)を指定することもできます。

**重要**  
Parameter Store は、[対称 KMS キー](https://docs.aws.amazon.com/kms/latest/developerguide/symm-asymm-choose-key-spec.html#symmetric-cmks)のみをサポートします。[非対称 KMS キー](https://docs.aws.amazon.com/kms/latest/developerguide/symmetric-asymmetric.html)を使用してパラメータを暗号化することはできません。KMS キーが対称か非対称かを判断する方法については、「*AWS Key Management Service デベロッパーガイド*」の「[さまざまなキータイプの特定](https://docs.aws.amazon.com/kms/latest/developerguide/identify-key-types.html)」を参照してください。

Parameter Store では、2 つの階層 (*標準*と*アドバンスト*) の `SecureString` パラメータをサポートしています。スタンダードパラメータは 4,096 バイトを上限とし、ユーザーが指定した KMS キーで直接、暗号化および復号されます。アドバンストの `SecureString` パラメータを暗号化および復号化するには、Parameter Store は [AWS Encryption SDK](https://docs.aws.amazon.com/encryption-sdk/latest/developer-guide/) を使用したエンベロープ暗号化を行います。標準の `SecureString` パラメータをアドバンストパラメータに変換することはできますが、アドバンストパラメータを標準パラメータに変換することはできません。標準とアドバンストの `SecureString` パラメータの違いの詳細については、「[パラメータ層の管理](parameter-store-advanced-parameters.md)」を参照してください。

**Topics**
+ [標準 SecureString パラメータの保護](#kms-encryption-securestring-standard)
+ [アドバンスト SecureString パラメータの保護](#kms-encryption-securestring-advanced)
+ [パラメータ値を暗号化および復号するためのアクセス許可の設定](#parameter-policy-kms-encryption)
+ [Parameter Store の暗号化コンテキスト](#parameter-store-kms-encryption-context)
+ [Parameter Store における KMS キーの問題のトラブルシューティング](#parameter-store-kms-cmk-troubleshooting)

## 標準 SecureString パラメータの保護
<a name="kms-encryption-securestring-standard"></a>

Parameter Store は暗号化オペレーションを実行しません。代わりに、AWS KMS を使用して、`SecureString` パラメータ値を暗号化および復号します。標準の `SecureString` パラメータ値を作成または変更すると、Parameter Store は AWS KMS[暗号化](https://docs.aws.amazon.com/kms/latest/APIReference/API_Encrypt.html)オペレーションを呼び出します。このオペレーションは、KMS キーを使用して[データキー](https://docs.aws.amazon.com/kms/latest/developerguide/data-keys.html)を生成するのではなく、対称暗号化 KMS キーを直接使用してパラメータ値を暗号化します。

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

アカウントのデフォルトの `aws/ssm` KMS キーを表示するには、AWS KMS API で [DescribeKey](https://docs.aws.amazon.com/kms/latest/APIReference/API_DescribeKey.html) オペレーションを使用します｡ 次の例では、`aws/ssm` エイリアス名を持つ AWS Command Line Interface (AWS CLI) の `describe-key` コマンドを使用します。

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

標準 `SecureString` パラメータを作成するには、Systems Manager API で [PutParameter](https://docs.aws.amazon.com/systems-manager/latest/APIReference/API_PutParameter.html) オペレーションを使用します。`Tier` パラメータを省略するか、デフォルトの値である `Standard` を指定します。値が `SecureString` の `Type` パラメータを含めます。KMS キーを指定するには、`KeyId` パラメータを使用します。デフォルトは、アカウントの AWS マネージドキー である `aws/ssm` です。

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

次の例では、AWS CLI で Systems Manager の [put-parameter](https://docs.aws.amazon.com/cli/latest/reference/ssm/put-parameter.html) コマンドとその `--type` パラメータを使用して、`SecureString` パラメータを作成します。このコマンドはオプションの `--tier` および `--key-id` パラメータを省略するため、Parameter Store は標準 `SecureString` パラメータを作成し、それを AWS マネージドキーで暗号化します。

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

次の類似した例では、`--key-id` パラメータを使用して[カスタマーマネージドキー](https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#customer-cmk)を指定します。この例では、KMS キー ID を使用して KMS キーを識別しますが、任意の有効な KMS キー識別子を使用することができます。このコマンドは `Tier` パラメータ (`--tier`) を省略するため、Parameter Store は、アドバンストではなく標準の `SecureString` パラメータを作成します。

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

Parameter Store から `SecureString` パラメータを取得すると、その値が暗号化されます。パラメータを取得するには、Systems Manager API で [GetParameter](https://docs.aws.amazon.com/systems-manager/latest/APIReference/API_GetParameter.html) オペレーションを使用します。

次の例では、AWS CLI で Systems Manager の [get-parameter](https://docs.aws.amazon.com/cli/latest/reference/ssm/get-parameter.html) コマンドを使用して、Parameter Store から値を復号せずに `MyParameter` パラメータを取得します。

```
aws ssm get-parameter --name MyParameter
```

```
{
    "Parameter": {
        "Type": "SecureString", 
        "Name": "MyParameter", 
        "Value": "AQECAHgnOkMROh5LaLXkA4j0+vYi6tmM17Lg"
    }
}
```

返す前にパラメータ値を復号するには、`GetParameter` の `WithDecryption` パラメータを `true` に設定します。`WithDecryption` を使用すると、Parameter Store はユーザーに代わって AWS KMS [Decrypt](https://docs.aws.amazon.com/kms/latest/APIReference/API_Decrypt.html) オペレーションを呼び出して､パラメータ値を復号します。その結果、`GetParameter` リクエストは、次の例に示すように、プレーンテキストパラメータ値を持つパラメータを返します。

```
aws ssm get-parameter \
    --name MyParameter \
    --with-decryption
```

```
{
    "Parameter": {
        "Type": "SecureString", 
        "Name": "MyParameter", 
        "Value": "secret_value"
    }
}
```

次のワークフローは、Parameter Store が KMS キーを使用して標準 `SecureString` パラメータを暗号化および復号する方法を示しています。

### スタンダードパラメータの暗号化
<a name="kms-encryption-securestring-standard-encrypt"></a>

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

1. AWS KMS は、指定された KMS キーと暗号化コンテキストを使用して、パラメータ値を暗号化します。暗号化テキストを Parameter Store に返し、そこでパラメータ名と暗号化された値が保存されます。  
![\[標準 SecureString パラメータ値の暗号化\]](http://docs.aws.amazon.com/ja_jp/systems-manager/latest/userguide/images/service-pstore-standard.png)

### 標準パラメータの復号
<a name="kms-encryption-securestring-standard-decrypt"></a>

1. `GetParameter` リクエストに `WithDecryption` パラメータを含めた場合、Parameter Store は、暗号化された `SecureString` パラメータ値と [Parameter Store 暗号化コンテキスト](#parameter-store-kms-encryption-context)を `Decrypt` リクエストと一緒に AWS KMS に送信します。

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

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

## アドバンスト SecureString パラメータの保護
<a name="kms-encryption-securestring-advanced"></a>

`PutParameter` を使用してアドバンスト `SecureString` パラメータを作成する場合、Parameter Store は AWS Encryption SDK および対称暗号化 AWS KMS keyによる[エンベロープ暗号化](https://docs.aws.amazon.com/encryption-sdk/latest/developer-guide/how-it-works.html#envelope-encryption)を使用してパラメータ値を保護します。アドバンストパラメータ値は、それぞれ一意のデータキーで暗号化され、そのデータキーは KMS キーで暗号化されます。アカウントの [AWS マネージドキー](https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#aws-managed-cmk) (`aws/ssm`) または任意のカスタマーマネージドキーを使用できます。

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

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

アドバンスト `SecureString` パラメータを作成するには、Systems Manager API で [PutParameter](https://docs.aws.amazon.com/systems-manager/latest/APIReference/API_PutParameter.html) オペレーションを使用します。`Tier` パラメータの値を `Advanced` に設定します。値が `SecureString` の `Type` パラメータを含めます。KMS キーを指定するには、`KeyId` パラメータを使用します。デフォルトは、アカウントの AWS マネージドキー である `aws/ssm` です。

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

次の類似した例では、`--key-id` パラメータを使用して[カスタマーマネージドキー](https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#customer-cmk)を指定します。例では、KMS キーの Amazon リソースネーム (ARN) を使用していますが、任意の有効な KMS キー識別子を使用することもできます。

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

Parameter Store から `SecureString` パラメータを取得すると、その値は、AWS Encryption SDK が返した暗号化されたメッセージとなります。パラメータを取得するには、Systems Manager API で [GetParameter](https://docs.aws.amazon.com/systems-manager/latest/APIReference/API_GetParameter.html) オペレーションを使用します。

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

```
aws ssm get-parameter --name MyParameter
```

```
{
    "Parameter": {
        "Type": "SecureString", 
        "Name": "MyParameter", 
        "Value": "AQECAHgnOkMROh5LaLXkA4j0+vYi6tmM17Lg"
    }
}
```

返す前にパラメータ値を復号するには、`GetParameter` の `WithDecryption` パラメータを `true` に設定します。`WithDecryption` を使用すると、Parameter Store はユーザーに代わって AWS KMS [Decrypt](https://docs.aws.amazon.com/kms/latest/APIReference/API_Decrypt.html) オペレーションを呼び出して､パラメータ値を復号します。その結果、`GetParameter` リクエストは、次の例に示すように、プレーンテキストパラメータ値を持つパラメータを返します。

```
aws ssm get-parameter \
    --name MyParameter \
    --with-decryption
```

```
{
    "Parameter": {
        "Type": "SecureString", 
        "Name": "MyParameter", 
        "Value": "secret_value"
    }
}
```

アドバンスト `SecureString` パラメータを標準パラメータに変換することはできますが、標準 `SecureString` をアドバンストに変換することはできません。標準 `SecureString` パラメータをアドバンスト `SecureString` に変換するには、`Overwrite` パラメータを使った `PutParameter` オペレーションを実行します。`Type` は `SecureString`、 `Tier` 値は `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 キーを使用してアドバンスト `SecureString` パラメータを暗号化および復号する方法を示しています。

### アドバンストパラメータの暗号化
<a name="kms-encryption-securestring-advanced-encrypt"></a>

1. `PutParameter` を使用してアドバンスト `SecureString` パラメータを作成する場合、Parameter Store は AWS Encryption SDK および AWS KMS を使用してパラメータ値を暗号化します。Parameter Store は、パラメータ値、ユーザーが指定した KMS キー、および [Parameter Store 暗号化コンテキスト](#parameter-store-kms-encryption-context)を使用して AWS Encryption SDK を呼び出します。

1. AWS Encryption SDK は、ユーザーが指定した KMS キーの識別子と Parameter Store 暗号化コンテキストを [GenerateDataKey](https://docs.aws.amazon.com/kms/latest/APIReference/API_GenerateDataKey.html) リクエストと一緒に AWS KMS に送信します。AWS KMS は一意のデータキーの 2 つのコピーを返します。1 つはプレーンテキストで、もう 1 つは KMS キーで暗号化されています。（暗号化コンテキストは、データキーを暗号化するときに使用します）。

1. AWS Encryption SDK はプレーンテキストのデータキーを使ってパラメータ値を暗号化し、[暗号化されたメッセージ](https://docs.aws.amazon.com/encryption-sdk/latest/developer-guide/concepts.html#message)を戻します。このメッセージは、暗号化されたパラメータ値、暗号化されたデータキー、そして Parameter Store 暗号化コンテキストなどのその他のデータを含みます。

1. Parameter Store は、暗号化されたメッセージをパラメータ値として保存します。  
![\[アドバンスト SecureString パラメータ値の暗号化\]](http://docs.aws.amazon.com/ja_jp/systems-manager/latest/userguide/images/service-pstore-advanced.png)

### アドバンストパラメータの復号
<a name="kms-encryption-securestring-advanced-decrypt"></a>

1. アドバンスト `SecureString` パラメータを取得するための `GetParameter` リクエストに、`WithDecryption` パラメータを含めることができます。これを行うと、Parameter Store は[暗号化されたメッセージ](https://docs.aws.amazon.com/encryption-sdk/latest/developer-guide/concepts.html#message)をパラメータ値から AWS Encryption SDK の復号化メソッドに渡します。

1. AWS Encryption SDK は AWS KMS [Decrypt](https://docs.aws.amazon.com/kms/latest/APIReference/API_Decrypt.html) オペレーションを呼び出します。これは、暗号化されたメッセージから暗号化されたデータキーと Parameter Store 暗号化コンテキストを渡します。

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

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

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

## パラメータ値を暗号化および復号するためのアクセス許可の設定
<a name="parameter-policy-kms-encryption"></a>

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

AWS Identity and Access Management (IAM) ポリシーを使用して、ユーザーが Systems Manager の `PutParameter` および `GetParameter` オペレーションを呼び出すアクセス許可を許可または拒否できます。

カスタマーマネージドキーを使用して `SecureString` パラメータ値を暗号化している場合は、IAM ポリシーとキーポリシーを使用して、暗号化と復号のアクセス許可を管理できます。ただし、デフォルトの `aws/ssm` KMS キーに対してアクセス制御ポリシーを確立することはできません。カスタマーマネージドキーへのアクセスを制御する方法の詳細については、「*AWS Key Management Service デベロッパーガイド*」の「[KMS キーのアクセスとアクセス許可](https://docs.aws.amazon.com/kms/latest/developerguide/control-access.html)」を参照してください。

次の例は、標準 `SecureString` パラメータ用に設計された IAM ポリシーを示しています。これにより、ユーザーは `FinancialParameters` パス内のすべてのパラメータに対して Systems Manager `PutParameter` オペレーションを呼び出すことができます。このポリシーにより、ユーザーはサンプルカスタマーマネージドキーで AWS KMS `Encrypt` オペレーションを呼び出すこともできます。

------
#### [ JSON ]

****  

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

------

次の例は、アドバンスト `SecureString` パラメータ用に設計された IAM ポリシーを示しています。これにより、ユーザーは `ReservedParameters` パス内のすべてのパラメータに対して Systems Manager `PutParameter` オペレーションを呼び出すことができます。このポリシーにより、ユーザーはサンプルカスタマーマネージドキーで AWS KMS `GenerateDataKey` オペレーションを呼び出すこともできます。

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "ssm:PutParameter"
            ],
            "Resource": "arn:aws:ssm:us-east-1:111122223333:parameter/ReservedParameters/*"
        },
        {
            "Effect": "Allow",
            "Action": [
                "kms:GenerateDataKey"
            ],
            "Resource": "arn:aws:kms:us-east-1:111122223333:key/key-id"
        }
    ]
}
```

------

最後の例も、標準またはアドバンスト `SecureString` パラメータに使用できる IAM ポリシーを示します。これにより、ユーザーは `ITParameters` パス内のすべてのパラメータに対して Systems Manager の `GetParameter` オペレーション (および関連する操作) を呼び出すことができます。このポリシーにより、ユーザーはサンプルカスタマーマネージドキーで AWS KMS `Decrypt` オペレーションを呼び出すこともできます。

------
#### [ JSON ]

****  

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

------

## Parameter Store の暗号化コンテキスト
<a name="parameter-store-kms-encryption-context"></a>

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

また、暗号化コンテキストを使用して、監査レコードおよびログ内の暗号化オペレーションを識別することもできます。暗号化コンテキストは､[AWS CloudTrail](https://docs.aws.amazon.com/awscloudtrail/latest/userguide/cloudtrail-user-guide.html) ログなどのログにプレーンテキストで表示されます。

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-id:account-id:parameter/parameter-name"
```

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

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

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

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

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

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

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

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

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "ssm:GetParameter*"
            ],
            "Resource": "arn:aws:ssm:us-east-1:111122223333:parameter/MyParameter"
        },
        {
            "Effect": "Allow",
            "Action": [
                "kms:Decrypt"
            ],
            "Resource": "arn:aws:kms:us-east-1:111122223333:key/key-id",
            "Condition": {
                "StringEquals": {
                    "kms:EncryptionContext:PARAMETER_ARN":"arn:aws:ssm:us-east-1:111122223333:parameter/MyParameter"
                }
            }
        }
    ]
}
```

------

## Parameter Store における KMS キーの問題のトラブルシューティング
<a name="parameter-store-kms-cmk-troubleshooting"></a>

`SecureString` パラメータに対してオペレーションを実行するには、Parameter Store は、ユーザーが意図したオペレーションに対して指定した AWS KMS KMS キーを使用できる必要があります。KMS キーに関連する Parameter Store の失敗のほとんどは、次の問題が原因で発生します。
+ アプリケーションが使用している認証情報には、KMS キーで指定されたアクションを実行するアクセス許可はありません。

  このエラーを解決するには、異なる認証情報を使用してアプリケーションを実行するか、オペレーションを妨げている IAM またはキーポリシーを修正します。AWS KMS IAM ポリシーとキーポリシーの詳細については、「*AWS Key Management Service デベロッパーガイド*」の「[KMS キーのアクセスとアクセス許可](https://docs.aws.amazon.com/kms/latest/developerguide/control-access.html)」を参照してください。
+ KMS キーが見つからない。

  これは通常、KMS キーに誤った識別子を使用した場合に発生します。KMS キーの[正しい識別子を見つけて](https://docs.aws.amazon.com/kms/latest/developerguide/find-cmk-id-arn.html)、再度コマンドを試行します。
+ KMS キーが有効になっていない。これが発生すると、Parameter Store は  からの詳細なエラーメッセージとともに InvalidKeyIdAWS KMS 例外を返します。KMS キーのキーステータスが `Disabled` の場合は、[有効にします](https://docs.aws.amazon.com/kms/latest/developerguide/enabling-keys.html)。`Pending Import` の場合は、[インポート手順](https://docs.aws.amazon.com/kms/latest/developerguide/importing-keys.html)を実施してください。キーステータスが `Pending Deletion` の場合は、[キーの削除をキャンセルする](https://docs.aws.amazon.com/kms/latest/developerguide/deleting-keys-scheduling-key-deletion.html)か、別の KMS キーを使用します。

  KMS キーの[キー状態](https://docs.aws.amazon.com/kms/latest/developerguide/key-state.html)を検索するには、[DescribeKey](https://docs.aws.amazon.com/kms/latest/APIReference/API_DescribeKey.html) オペレーションを使用します。