

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

# アクセス AWS Key Management Service
<a name="accessing-kms"></a>

は以下の AWS KMS 方法で を操作できます。

**Topics**
+ [AWS マネジメントコンソール](#kms-console)
+ [AWS Command Line Interface](#kms-cli)
+ [AWS KMS REST API](#kms-api)
+ [AWS SDKs](#kms-sdk)
+ [AWS SDK でのこのサービスの使用](sdk-general-information-section.md)
+ [AWS Encryption SDK](#crypto-sdk)
+ [AWS KMS 結果整合性](#programming-eventual-consistency)
+ [でのハイブリッドポスト量子 TLS の使用 AWS KMS](pqtls.md)
+ [VPC エンドポイント AWS KMS を介して に接続する](kms-vpc-endpoint.md)
+ [デュアルスタックエンドポイントのサポート](ipv6-kms.md)

## AWS マネジメントコンソール
<a name="kms-console"></a>

コンソールは、 AWS KMS および AWS リソースを管理するためのウェブベースのユーザーインターフェイスです。にサインアップしている場合は AWS アカウント、 にサインイン AWS マネジメントコンソール し、 AWS マネジメントコンソール ホームページ AWS KMS から を選択することで、 AWS KMS コンソールにアクセスできます。

### AWS KMS コンソールを使用するために必要なアクセス許可
<a name="console-permissions"></a>

 AWS KMS コンソールを使用するには、ユーザーが 内の AWS KMS リソースを操作できるようにする最小限のアクセス許可のセットが必要です AWS アカウント。これらの AWS KMS アクセス許可に加えて、ユーザーには、IAM ユーザーおよび IAM ロールを一覧表示するためのアクセス許可も必要です。これらの最小限必要なアクセス許可よりも制限された IAM ポリシーを作成した場合、 AWS KMS コンソールは、その IAM ポリシーを使用するユーザーの意図したとおりには機能しません。

 AWS KMS コンソールへの読み取り専用アクセスをユーザーに許可するために必要な最小限のアクセス権限については、「[AWS KMS コンソールでの KMS キーの表示をユーザーに許可する](customer-managed-policies.md#iam-policy-example-read-only-console)」を参照してください。

ユーザーが AWS KMS コンソールを使用して KMS キーを作成および管理できるようにするには、「」で説明されているように、**AWSKeyManagementServicePowerUser** 管理ポリシーをユーザーにアタッチします[AWS の 管理ポリシー AWS Key Management Service](security-iam-awsmanpol.md)。

[AWS SDK](https://aws.amazon.com/tools/#sdk)、[AWS Command Line Interface](https://docs.aws.amazon.com/cli/latest/userguide/)、もしくは [AWS Tools for PowerShell](https://docs.aws.amazon.com/powershell/latest/userguide/) を経由して AWS KMS API を使用するユーザーに対して、最小限のコンソールアクセス許可を付与する必要はありません。ただし、API を使用する権限をこれらのユーザーに付与する必要があります。詳細については、「[アクセス許可に関するリファレンス](kms-api-permissions-reference.md)」を参照してください。

## AWS Command Line Interface
<a name="kms-cli"></a>

 AWS CLI ツールを使用して、システムのコマンドラインでコマンドを発行したり、スクリプトを構築したりして、タスク AWS ( を含む AWS KMS) を実行できます。

 AWS KMS で を使用する方法の詳細については AWS CLI、[AWS CLI 「 コマンドリファレンス](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/kms/index.html)」を参照してください。

## AWS KMS REST API
<a name="kms-api"></a>

 のアーキテクチャ AWS KMS は、プログラミング言語に依存しないように設計されています。REST API は への HTTP インターフェイスです AWS KMS。REST API では、標準の HTTP リクエストを使用してキーを作成、取得、削除できます。

 の使用の詳細については AWS KMS REST API、 [AWS Key Management Service API リファレンス](https://docs.aws.amazon.com/kms/latest/APIReference/Welcome.html)を参照してください。

## AWS SDKs
<a name="kms-sdk"></a>

AWS はSDKs (ソフトウェア開発キット) を提供します。 JavaScript AWS SDKs は、 AWS KMS および へのプログラムによるアクセスを作成するのに便利です AWS。 AWS KMS はRESTサービスです。基盤となる AWS KMS REST API をラップし、プログラミングタスクを簡素化する AWS SDK ライブラリ AWS KMS を使用して、 にリクエストを送信できます。ダウンロードしてインストールする方法など AWS SDKs、 の詳細については、「 [で構築するツール AWS](https://aws.amazon.com/developer/tools)」を参照してください。

[AWS SDKs AWS KMS を使用するためのコード例](service_code_examples.md) は、 AWS KMS を通じて を使用するための良い出発点を提供します AWS SDKs。

# AWS SDK でのこのサービスの使用
<a name="sdk-general-information-section"></a>

AWS Software Development Kit (SDKsは、多くの一般的なプログラミング言語で使用できます。各 SDK には、デベロッパーが好みの言語でアプリケーションを簡単に構築できるようになる API、コード例、およびドキュメントが提供されています。


| SDK ドキュメント | コード例 | 
| --- | --- | 
| [AWS SDK for C\$1\$1](https://docs.aws.amazon.com/sdk-for-cpp) | [AWS SDK for C\$1\$1 コード例](https://github.com/awsdocs/aws-doc-sdk-examples/tree/main/cpp) | 
| [AWS CLI](https://docs.aws.amazon.com/cli) | [AWS CLI コード例](https://docs.aws.amazon.com/code-library/latest/ug/cli_2_code_examples.html) | 
| [AWS SDK for Go](https://docs.aws.amazon.com/sdk-for-go) | [AWS SDK for Go コード例](https://github.com/awsdocs/aws-doc-sdk-examples/tree/main/gov2) | 
| [AWS SDK for Java](https://docs.aws.amazon.com/sdk-for-java) | [AWS SDK for Java コード例](https://github.com/awsdocs/aws-doc-sdk-examples/tree/main/javav2) | 
| [AWS SDK for JavaScript](https://docs.aws.amazon.com/sdk-for-javascript) | [AWS SDK for JavaScript コード例](https://github.com/awsdocs/aws-doc-sdk-examples/tree/main/javascriptv3) | 
| [AWS SDK for Kotlin](https://docs.aws.amazon.com/sdk-for-kotlin) | [AWS SDK for Kotlin コード例](https://github.com/awsdocs/aws-doc-sdk-examples/tree/main/kotlin) | 
| [AWS SDK for .NET](https://docs.aws.amazon.com/sdk-for-net) | [AWS SDK for .NET コード例](https://github.com/awsdocs/aws-doc-sdk-examples/tree/main/dotnetv3) | 
| [AWS SDK for PHP](https://docs.aws.amazon.com/sdk-for-php) | [AWS SDK for PHP コード例](https://github.com/awsdocs/aws-doc-sdk-examples/tree/main/php) | 
| [AWS Tools for PowerShell](https://docs.aws.amazon.com/powershell) | [AWS Tools for PowerShell コード例](https://docs.aws.amazon.com/code-library/latest/ug/powershell_5_code_examples.html) | 
| [AWS SDK for Python (Boto3)](https://docs.aws.amazon.com/pythonsdk) | [AWS SDK for Python (Boto3) コード例](https://github.com/awsdocs/aws-doc-sdk-examples/tree/main/python) | 
| [AWS SDK for Ruby](https://docs.aws.amazon.com/sdk-for-ruby) | [AWS SDK for Ruby コード例](https://github.com/awsdocs/aws-doc-sdk-examples/tree/main/ruby) | 
| [AWS SDK for Rust](https://docs.aws.amazon.com/sdk-for-rust) | [AWS SDK for Rust コード例](https://github.com/awsdocs/aws-doc-sdk-examples/tree/main/rustv1) | 
| [AWS SDK for SAP ABAP](https://docs.aws.amazon.com/sdk-for-sapabap) | [AWS SDK for SAP ABAP コード例](https://github.com/awsdocs/aws-doc-sdk-examples/tree/main/sap-abap) | 
| [AWS SDK for Swift](https://docs.aws.amazon.com/sdk-for-swift) | [AWS SDK for Swift コード例](https://github.com/awsdocs/aws-doc-sdk-examples/tree/main/swift) | 

**可用性の例**  
必要なものが見つからなかった場合。このページの下側にある [**Provide feedback**] リンクから、コードの例をリクエストしてください。

## AWS Encryption SDK
<a name="crypto-sdk"></a>

 AWS Encryption SDK は、アプリケーションにクライアント側の暗号化を実装するためのツールです。KMS へのフルアクセスは提供しませんが、代わりに と統合するか AWS KMS、KMS キーを参照せずにスタンドアロン SDK として使用できます。Java、JavaScript 、C、Python、およびその他のプログラミング言語のライブラリをご用意しています。

詳細については、[AWS Encryption SDK デベロッパーガイド](https://docs.aws.amazon.com/encryption-sdk/latest/developer-guide/introduction.html)を参照してください。

AWS KMS key ポリシーと IAM ポリシー

## AWS KMS 結果整合性
<a name="programming-eventual-consistency"></a>

 AWS KMS API は、システムの分散性により[、結果整合性](https://en.wikipedia.org/wiki/Eventual_consistency)モデルに従います。その結果、 AWS KMS リソースへの変更は、実行した後続のコマンドにすぐに表示されない場合があります。

 AWS KMS API コールを実行すると、変更が全体で利用可能になるまでに少し時間がかかる場合があります AWS KMS。通常、変更がシステム全体に反映されるまでに数秒もかかりませんが、場合によっては数分かかることがあります。この間、`InvalidStateException` または `NotFoundException` などの予期しないエラーが発生することがあります。たとえば、 を呼び出した`GetParametersForImport`直後に を呼び出す`NotFoundException`と、 を返す AWS KMS 可能性があります`CreateKey`。

短い待機期間後にオペレーションを自動的に再試行するように、 AWS KMS クライアントに再試行戦略を設定することをお勧めします。詳細については、 AWS SDK とツールのリファレンスガイドの「[再試行動作](https://docs.aws.amazon.com/sdkref/latest/guide/feature-retry-behavior.html)」を参照してください。

API 呼び出し関連のグラントでは、[グラントトークンを使用](using-grant-token.md)して潜在的な遅延を回避し、グラント内のアクセス許可をすぐに使用できます。詳細については、「[結果整合性 (グラント用)](grants.md#terms-eventual-consistency)」を参照してください。

# でのハイブリッドポスト量子 TLS の使用 AWS KMS
<a name="pqtls"></a>

AWS Key Management Service (AWS KMS) は、Transport Layer Security (TLS) ネットワーク暗号化プロトコルのハイブリッドポスト量子キー交換オプションをサポートしています。この TLS オプションは、 AWS KMS API エンドポイントに接続するときに使用できます。これらのオプションのハイブリッドポスト量子キー交換機能は、現在使用している TLS 暗号化と同等以上に安全であり、セキュリティ上のさらなる長期的な利点をもたらす可能性があります。ただし、現在使用されている従来のキー交換プロトコルと比較して、レイテンシーとスループットに影響します。

 AWS Key Management Service (AWS KMS) に送信するデータは、Transport Layer Security (TLS) 接続によって提供される暗号化によって転送中に保護されます。 AWS KMS が TLS セッションでサポートしている従来の暗号スイートにより、現在のテクノロジーではキー交換メカニズムに対するブルートフォース攻撃は実行不可能です。しかし、大規模な量子コンピューティングが将来実用的になると、TLS 鍵交換メカニズムで使用される従来の暗号スイートは、これらの攻撃の影響を受けやすくなります。TLS 接続を介して渡されるデータの長期的な機密性に依存するアプリケーションを開発している場合は、大規模な量子コンピュータが使用できるようになる前に、ポスト量子暗号に移行する計画を検討する必要があります。 AWS は、この未来に備えており、準備も万全にしておく必要があります。

現在暗号化されているデータを将来の潜在的な攻撃から保護するために、 AWS は量子耐性アルゴリズムまたは*ポスト量子*アルゴリズムの開発に暗号コミュニティに参加しています。クラシック要素とポスト量子要素を組み合わせた*ハイブリッド*ポスト量子キー交換暗号スイート AWS KMS を に実装しました。これにより、TLS 接続がクラシック暗号スイートと同等以上に強力になります。

これらのハイブリッド暗号スイートは、[ほとんどの AWS リージョン](#pqtls-regions)本稼働ワークロードで使用できます。ただし、ハイブリッド暗号スイートのパフォーマンス特性と帯域幅要件は従来のキー交換メカニズムとは異なるため、さまざまな条件下で [AWS KMS API コールでテスト](pqtls-how-to.md#pqtls-testing)することをお勧めします。

**フィードバック**

これまでと同様、皆様のフィードバックや私たちのオープンソースリポジトリへの参加はいつでも歓迎です。特に、この新しい種類の TLS トラフィックが皆様のインフラストラクチャとどのように相互作用するかをぜひお聞かせください。
+ このトピックに関するフィードバックを提供するには、このページの右下隅にある [**フィードバック**] リンクを使用してください。
+ これらのハイブリッド暗号スイートは、GitHub の [https://github.com/aws/s2n-tls](https://github.com/aws/s2n-tls) リポジトリのオープンソースで開発されています。暗号スイートのユーザビリティに関するフィードバックを提供したり、新しいテスト条件や結果を共有したりするには、s2n-tls リポジトリで[課題を作成](https://github.com/aws/s2n-tls/issues)してください。
+ [https://github.com/aws-samples/aws-kms-pq-tls-example](https://github.com/aws-samples/aws-kms-pq-tls-example) GitHub リポジトリ AWS KMS の でハイブリッドポスト量子 TLS を使用するためのコードサンプルを記述しています。ハイブリッド暗号スイートを使用する AWS KMS ように HTTP クライアントを設定する方法について質問したり、アイデアを共有したりするには、aws-kms-pq-tls-exampleリポジトリで[問題を作成します](https://github.com/aws-samples/aws-kms-pq-tls-example/issues)。

**サポート AWS リージョン**

のポスト量子 TLS AWS KMS は、 が AWS KMS サポート AWS リージョン するすべての で使用できます。

それぞれの AWS KMS エンドポイントのリストについては AWS リージョン、の[AWS Key Management Service 「エンドポイントとクォータ](https://docs.aws.amazon.com/general/latest/gr/kms.html)」を参照してください*Amazon Web Services 全般のリファレンス*。FIPS エンドポイントの詳細については、「Amazon Web Services 全般のリファレンス」の「[FIPS エンドポイント](https://docs.aws.amazon.com/general/latest/gr/rande.html#FIPS-endpoints)」を参照してください。

## TLS におけるハイブリッドポスト量子キー交換について
<a name="PQTLS-concepts"></a>

AWS KMS は、ハイブリッドポスト量子キー交換暗号スイートをサポートしています。Linux システムで AWS SDK for Java 2.x および AWS Common Runtime を使用して、これらの暗号スイートを使用する HTTP クライアントを設定できます。次に、HTTP クライアントを使用して AWS KMS エンドポイントに接続するたびに、ハイブリッド暗号スイートが使用されます。

この HTTP クライアントは、TLS プロトコルのオープンソース実装である [https://github.com/aws/s2n-tls](https://github.com/aws/s2n-tls) を使用します。s2n-tls が使用するハイブリッド暗号スイートは、直接データ暗号化ではなく、キー交換専用に実装されています。キー交換中、クライアントとサーバーは、転送中にデータの暗号化と復号に使用するキーを計算します。

s2n-tls が使用しているアルゴリズムは、[Elliptic Curve Diffie-Hellman](https://en.wikipedia.org/wiki/Elliptic-curve_Diffie%E2%80%93Hellman) (ECDH)、TLS で現在使用されている従来のキー交換アルゴリズム、[Module-Lattice-Based Key-Encapsulation Mechanism](https://csrc.nist.gov/pubs/fips/203/final) (ML-KEM) 、米国国立標準技術研究所 (NIST) が[最初の標準ポスト量子キー合意アルゴリズとして指定](https://csrc.nist.gov/pubs/fips/203/final)した公開キー暗号化およびキー確立アルゴリズムを組み合わせたハイブリッドです。このメカニズムは、各アルゴリズムを独立して使用してキーを生成します。次に、2つのキーを暗号的に組み合わせます。s2n-tls では、プリファレンスリストで ECDH と ML-KEM を最初に配置するポスト量子 TLS を優先して、[HTTP クライアントを設定](pqtls-how-to.md)できます。互換性を確保するために、従来のキー交換アルゴリズムがプリファレンスリストに含まれていますが、プリファレンスの順序では低くなっています。

## でのハイブリッドポスト量子 TLS の使用 AWS KMS
<a name="pqtls-details"></a>

への呼び出しには、ハイブリッドポスト量子 TLS を使用できます AWS KMS。HTTP クライアントのテスト環境を設定するときは、次の点に注意してください。

**転送時の暗号化**

s2n-tls のハイブリッド暗号スイートは、転送中の暗号化のみに使用されます。クライアントから AWS KMS エンドポイントへの移動中にデータを保護します。 AWS KMS は、これらの暗号スイートを使用してデータを暗号化しません AWS KMS keys。

代わりに、 AWS KMS が KMS キーでデータを暗号化する場合、256 ビットキーによる対称暗号化と、すでに量子耐性がある Galois Counter Mode (AES-GCM) アルゴリズムを使用します。理論上の将来、256 ビット AES-GCM キーで作成された暗号文に対する大規模な量子コンピューティング攻撃は、[キーの効果的なセキュリティを 128 ビットに低下させます](https://www.etsi.org/images/files/ETSIWhitePapers/QuantumSafeWhitepaper.pdf)。このセキュリティレベルは、 AWS KMS 暗号文に対するブルートフォース攻撃を実行不可能にするのに十分です。

**サポートされているシステム**

s2n-tls のハイブリッド暗号スイートの使用は、現在 Linux システムでのみサポートされています。加えて、これらの暗号スイートは、 AWS SDK for Java 2.xなどの AWS 共通ランタイムをサポートする SDK でのみサポートされます。例については、[ハイブリッドポスト量子 TLS を設定する](pqtls-how-to.md)を参照してください。

**AWS KMS エンドポイント**

AWS KMS は、[FIPS 140-3 検証済みエンドポイントを含むすべてのエンドポイントでハイブリッドポスト量子 TLS ](https://docs.aws.amazon.com/general/latest/gr/kms.html)をサポートします。

# ハイブリッドポスト量子 TLS を設定する
<a name="pqtls-how-to"></a>

この手順では、 AWS 共通ランタイム HTTP クライアントの Maven 依存関係を追加します。次に、ポスト量子 TLS を優先する HTTP クライアントを設定します。次に、HTTP AWS KMS クライアントを使用する クライアントを作成します。

 AWS KMSでのハイブリッドポスト量子 TLS の設定と使用の完全な実例については、[https://github.com/aws-samples/aws-kms-pq-tls-example](https://github.com/aws-samples/aws-kms-pq-tls-example) リポジトリを参照してください。

**注記**  
プレビュー版として利用可能な AWS 共通ランタイム HTTP クライアントは、2023 年 2 月に一般公開されました。このリリースでは、`tlsCipherPreference` クラスと `tlsCipherPreference()` メソッドパラメータが、`postQuantumTlsEnabled()` メソッドパラメータに置き換えられました。プレビュー中にこの例を使用していた場合は、コードを更新する必要があります。

1.  AWS 共通ランタイムクライアントを Maven の依存関係に追加します。利用可能な最新バージョンを使用することをお勧めします。

   たとえば、このステートメント`2.30.22`は AWS 、共通ランタイムクライアントのバージョンを Maven の依存関係に追加します。

   ```
   <dependency>
       <groupId>software.amazon.awssdk</groupId>
       <artifactId>aws-crt-client</artifactId>
       <version>2.30.22</version>
   </dependency>
   ```

1. ハイブリッドポスト量子暗号スイートを有効にするには、プロジェクト AWS SDK for Java 2.x に を追加して初期化します。続いて、次の例に示すように、HTTP クライアントでハイブリッドポスト量子暗号スイートを有効にします。

   このコードでは、`postQuantumTlsEnabled()` メソッドパラメータを使用して、推奨されるハイブリッドポスト量子暗号スイートである ECDH with ML-KEM を優先する [AWS 共通ランタイム HTTP クライアント](https://docs.aws.amazon.com/sdk-for-java/latest/developer-guide/http-configuration-crt.html)を設定します。次に、設定された HTTP クライアントを使用して、 AWS KMS 非同期クライアントのインスタンス を構築します[https://sdk.amazonaws.com/java/api/latest/software/amazon/awssdk/services/kms/KmsAsyncClient.html](https://sdk.amazonaws.com/java/api/latest/software/amazon/awssdk/services/kms/KmsAsyncClient.html)。このコードが完了すると、`KmsAsyncClient` インスタンス上のすべての [AWS KMS API](https://docs.aws.amazon.com/kms/latest/APIReference/) リクエストは、ハイブリッドポスト量子 TLS を使用します。

   ```
   // Configure HTTP client
   SdkAsyncHttpClient awsCrtHttpClient = AwsCrtAsyncHttpClient.builder()
             .postQuantumTlsEnabled(true)
             .build();
   
   // Create the AWS KMS async client
   KmsAsyncClient kmsAsync = KmsAsyncClient.builder()
            .httpClient(awsCrtHttpClient)
            .build();
   ```

1. ハイブリッドポスト量子 TLS で AWS KMS 呼び出しをテストします。

   設定された AWS KMS クライアントで AWS KMS API オペレーションを呼び出すと、ハイブリッドポスト量子 TLS を使用して呼び出しが AWS KMS エンドポイントに送信されます。設定をテストするには、 などの AWS KMS API を呼び出します`[ListKeys](https://docs.aws.amazon.com/kms/latest/APIReference/API_ListKeys.html)`。

   ```
   ListKeysReponse keys = kmsAsync.listKeys().get();
   ```

## ハイブリッドポスト量子 TLS 設定をテストする
<a name="pqtls-testing"></a>

が呼び出すアプリケーションで、ハイブリッド暗号スイートを使用して次のテストを実行することを検討してください AWS KMS。
+ アプリケーションによって行われた AWS KMS API コールの CloudTrail ログエントリ`tlsDetails`のセクションを表示します。`keyExchange` フィールドには、 などのハイブリッドアルゴリズムについて言及する必要があります`X25519MLKEM768`。例については、[ポスト量子 TLS 接続を介した標準対称暗号化キーによる復号](ct-decrypt.md#ct-decrypt-default-pqtls)を参照してください。
+ ハイブリッドポスト量子 TLS を使用してベンチマークを実行します。ハイブリッドキー交換では、TLS ハンドシェイクの一部のメッセージのサイズと処理時間が長くなりますが、ほとんどの場合、全体的なパフォーマンスへの影響は認識できません。
+ 別の場所からの接続を試します。リクエストが受け取るネットワークパスによっては、ディープパケットインスペクション (DPI) を使用するレガシー中間ホスト、プロキシ、またはファイアウォールがリクエストをブロックしていることがわかる場合があります。これは、TLS ハンドシェイクの [ClientHello](https://datatracker.ietf.org/doc/html/rfc8446#section-4.1.2) パートで新しいキー交換グループを使用すること、またはより大きなキー交換メッセージによって発生する可能性があります。これらの問題を解決できない場合は、セキュリティチームまたは IT 管理者と協力して関連する設定を更新し、新しい TLS キー交換グループのブロックを解除してください。

## ポスト量子 TLS の詳細については、「」を参照してください。 AWS KMS
<a name="pqtls-see-also"></a>

でのハイブリッドポスト量子 TLS の使用の詳細については AWS KMS、次のリソースを参照してください。
+ ブログ投稿や研究論文へのリンクなど AWS、 での量子後暗号化の詳細については、[「Post-Quantum Cryptography](https://aws.amazon.com/security/post-quantum-cryptography/)」を参照してください。
+ s2n-tls の詳細については、「[新しいオープンソース TLS 実装である s2n-tls の導入](https://aws.amazon.com/blogs/security/introducing-s2n-a-new-open-source-tls-implementation/)」と「[s2n-tls の使用](https://github.com/aws/s2n-tls/tree/main/docs/usage-guide)」を参照してください。
+  AWS Common Runtime HTTP Client の詳細については、 *AWS SDK for Java 2.x デベロッパーガイド*[AWS の「CRT ベースの HTTP クライアントの設定](https://docs.aws.amazon.com/sdk-for-java/latest/developer-guide/http-configuration-crt.html)」を参照してください。
+ 米国国立標準技術研究所 (NIST) のポスト量子暗号プロジェクトの詳細については、「[Post-Quantum Cryptography](https://csrc.nist.gov/Projects/Post-Quantum-Cryptography)」(ポスト量子暗号化) を参照してください。
+ NIST ポスト量子暗号標準化については、「[Post-Quantum Cryptography Standardization](https://csrc.nist.gov/Projects/post-quantum-cryptography/post-quantum-cryptography-standardization)」(ポスト量子暗号標準化) を参照してください。

# VPC エンドポイント AWS KMS を介して に接続する
<a name="kms-vpc-endpoint"></a>

Virtual Private Cloud (VPC) のプライベートインターフェイスエンドポイント AWS KMS を介して に直接接続できます。インターフェイス VPC エンドポイントを使用する場合、VPC と 間の通信 AWS KMS は AWS ネットワーク内で完全に行われます。

AWS KMS は、 を搭載した Amazon Virtual Private Cloud (Amazon VPC) エンドポイントをサポートしています[AWS PrivateLink](https://docs.aws.amazon.com/vpc/latest/privatelink/)。各 VPC エンドポイントは、VPC サブネット内のプライベート IP アドレスを持つ 1 つ以上の [Elastic Network Interfaces](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/using-eni.html) (ENI) で表されます。

インターフェイス VPC エンドポイントは、インターネットゲートウェイ、NAT デバイス、VPN 接続、または AWS Direct Connect 接続 AWS KMS なしで VPC を直接 に接続します。VPC 内のインスタンスは、パブリック IP アドレスがなくても通信できます AWS KMS。

** リージョン**  
AWS KMS は、 [AWS KMS](https://docs.aws.amazon.com/general/latest/gr/kms.html) がサポートされているすべての AWS リージョン で VPC エンドポイントと VPC エンドポイントポリシーをサポートします。

** AWS KMS VPC エンドポイントに関する考慮事項**  
のインターフェイス VPC エンドポイントを設定する前に AWS KMS、「 *AWS PrivateLink ガイド*」の[「インターフェイスエンドポイントのプロパティと制限](https://docs.aws.amazon.com/vpc/latest/privatelink/vpce-interface.html#vpce-interface-limitations)」トピックを確認してください。  
AWS KMS VPC エンドポイントのサポートには以下が含まれます。  
+ VPC エンドポイントを使用して、VPC からすべての [AWS KMS API オペレーション](https://docs.aws.amazon.com/kms/latest/APIReference/API_Operations.html)を呼び出すことができます。
+  AWS KMS リージョンエンドポイントまたは [AWS KMS FIPS エンドポイント](https://docs.aws.amazon.com/general/latest/gr/kms.html)に接続するインターフェイス VPC エンドポイントを作成できます。
+  AWS CloudTrail ログを使用して、VPC エンドポイントを介して KMS キーの使用を監査できます。詳細については、「[VPC エンドポイントを使用する AWS KMS リクエストのログ記録](vpce-logging.md)」を参照してください。

**Topics**
+ [の VPC エンドポイントを作成する AWS KMS](vpce-create-endpoint.md)
+ [AWS KMS VPC エンドポイントに接続する](vpce-connect.md)
+ [VPC エンドポイントを使用して AWS KMS リソースへのアクセスを制御する](vpce-policy-condition.md)
+ [VPC エンドポイントを使用する AWS KMS リクエストのログ記録](vpce-logging.md)

# の VPC エンドポイントを作成する AWS KMS
<a name="vpce-create-endpoint"></a>

Amazon VPC コンソールまたは Amazon VPC API AWS KMS を使用して、 の VPC エンドポイントを作成できます。次のいずれかの値を使用して、「[インターフェイスエンドポイントを作成する](https://docs.aws.amazon.com/vpc/latest/privatelink/vpce-interface.html#create-interface-endpoint)」手順に従ってください。
+ の VPC エンドポイントを作成するには AWS KMS、次のサービス名を使用します。

  ```
  com.amazonaws.region.kms
  ```

  例えば、米国西部 (オレゴン) リージョン（`us-west-2`）では、サービス名は次のようになります。

  ```
  com.amazonaws.us-west-2.kms
  ```
+ [AWS KMS FIPS エンドポイント](https://docs.aws.amazon.com/general/latest/gr/kms.html)に接続する VPC エンドポイントを作成するには、次のサービス名を使用します。

  ```
  com.amazonaws.region.kms-fips
  ```

  例えば、米国西部 (オレゴン) リージョン（`us-west-2`）では、サービス名は次のようになります。

  ```
  com.amazonaws.us-west-2.kms-fips
  ```

VPC エンドポイントを使いやすくするために、VPC エンドポイントに対して[プライベート DNS 名](https://docs.aws.amazon.com/vpc/latest/privatelink/verify-domains.html)を有効にすることができます。**[Enable DNS Name]** (DNS 名を有効にする) オプションを選択すると、標準の AWS KMS DNS ホスト名が VPC エンドポイントに解決されます。例えば、`https://kms.us-west-2.amazonaws.com` はサービス名 `com.amazonaws.us-west-2.kms` に接続された VPC エンドポイントに解決されます。

このオプションにより VPC エンドポイントが使いやすくなります。 AWS SDKsと はデフォルトで標準の DNS AWS KMS ホスト名 AWS CLI を使用するため、アプリケーションとコマンドで VPC エンドポイント URL を指定する必要はありません。

詳細については、「AWS PrivateLink ガイド」の「[インターフェイスエンドポイントを介したサービスへアクセスする](https://docs.aws.amazon.com/vpc/latest/privatelink/vpce-interface.html#access-service-though-endpoint)」を参照してください。

# AWS KMS VPC エンドポイントに接続する
<a name="vpce-connect"></a>

 AWS SDK、、 AWS CLIまたは を使用して、VPC エンドポイント AWS KMS を介して に接続できます AWS Tools for PowerShell。VPC エンドポイントを指定するには、DNS 名を使用します。

例えば、この [list-keys](https://docs.aws.amazon.com/cli/latest/reference/kms/list-keys.html) コマンドは、 `endpoint-url` パラメータを使用して VPC エンドポイントを指定します。こうしたコマンドを使用するには、サンプルの VPC エンドポイント ID を、ご自身のアカウントのものに置き換えてください。

```
$ aws kms list-keys --endpoint-url https://vpce-1234abcdf5678c90a-09p7654s-us-east-1a.ec2.us-east-1.vpce.amazonaws.com
```

**必要なアクセス許可**  
VPC エンドポイントを使用する AWS KMS リクエストを成功させるには、プリンシパルに 2 つのソースからのアクセス許可が必要です。  
+ [キーポリシー](key-policies.md)、[IAM ポリシー](iam-policies.md)、[権限](grants.md)が リソース (KMS キーまたはエイリアス) でオペレーションを呼び出すために、プリンシパルにアクセス許可を付与する必要があります。
+ VPC エンドポイントポリシーは、エンドポイントを使用してリクエストを実行するためのアクセス権限をプリンシパルに付与する必要があります。
例えば、キーポリシーがプリンシパルに、特定の KMS キーで [Decrypt](https://docs.aws.amazon.com/kms/latest/APIReference/API_Decrypt.html) を呼び出すためのアクセス許可を付与します。ただし、VPC エンドポイントポリシーは、プリンシパルがエンドポイントを使用して、その KMS キー で `Decrypt` を呼び出すことを許可しない場合があります。  
または、VPC エンドポイントポリシーは、プリンシパルがエンドポイントを使用して、特定の KMS キーで [DisableKey](https://docs.aws.amazon.com/kms/latest/APIReference/API_DisableKey.html) を呼び出すことを許可する場合もあります。ただし、プリンシパルにキーポリシー、IAM ポリシー、または付与からのアクセス権限がない場合、リクエストは失敗します。  
エンドポイントの作成時に VPC エンドポイントポリシーを作成できます。また、VPC エンドポイントポリシーはいつでも変更できます。VPC マネジメントコンソール、または [CreateVPcendPoint](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_CreateVpcEndpoint.html) オペレーションまたは [ModifyVPcendPoint](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_ModifyVpcEndpoint.html) オペレーションを使用します。[AWS CloudFormation テンプレートを使用して](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-vpcendpoint.html) VPC エンドポイントポリシーを作成および変更することもできます。VPC マネジメントコンソールの使用方法については、AWS PrivateLink ガイドの「[Create an interface endpoint](https://docs.aws.amazon.com/vpc/latest/privatelink/vpce-interface.html#create-interface-endpoint)」および「[Modifying an interface endpoint](https://docs.aws.amazon.com/vpc/latest/privatelink/vpce-interface.html#modify-interface-endpoint)」を参照してください。

**プライベートホスト名**  
VPC エンドポイントの作成時にプライベートホスト名を有効にした場合は、CLI コマンドまたはアプリケーションの設定で VPC エンドポイント URL を指定する必要はありません。標準の AWS KMS DNS ホスト名は VPC エンドポイントに解決されます。 AWS CLI および SDKs はデフォルトでこのホスト名を使用するため、VPC エンドポイントの使用を開始して、スクリプトやアプリケーションを変更せずに AWS KMS リージョンエンドポイントに接続できます。  
プライベートホスト名を使用するには、VPC の `enableDnsHostnames` 属性と `enableDnsSupport` 属性を `true` に設定する必要があります。これらの属性を設定するには、 [ModifyVpcattribute](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_ModifyVpcAttribute.html) オペレーションを使用します。詳細については、「*Amazon VPC ユーザーガイド*」の「[VPC の DNS 属性](https://docs.aws.amazon.com/vpc/latest/userguide/vpc-dns.html#vpc-dns-updating)」を参照してください。

# VPC エンドポイントを使用して AWS KMS リソースへのアクセスを制御する
<a name="vpce-policy-condition"></a>

リクエストが VPC から送信されたとき、または VPC エンドポイントを使用する場合に、 AWS KMS リソースとオペレーションへのアクセスを制御できます。このためには、[キーポリシー](key-policies.md)または [IAM ポリシー](iam-policies.md)で、次のいずれかの[グローバル条件キー](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html#AvailableKeys)を使用します。
+ `aws:sourceVpce` 条件キーを使用して、VPC エンドポイントに基づいてアクセスを許可または制限します。
+ `aws:sourceVpc` 条件キーを使用して、プライベートエンドポイントをホストする VPC に基づいてアクセスを許可または制限します。

**注記**  
VPC エンドポイントに基づいてキーポリシーと IAM ポリシーを作成する場合は、注意が必要です。ポリシーステートメントで特定の VPC または VPC エンドポイントからのリクエストが要求されている場合、ユーザーに代わって AWS KMS リソースを使用する統合 AWS サービスからのリクエストは失敗する可能性があります。ヘルプについては、「[アクセス AWS KMS 許可を持つポリシーでの VPC エンドポイント条件の使用](conditions-aws.md#conditions-aws-vpce)」を参照してください。  
また、リクエストが [Amazon VPC エンドポイント](https://docs.aws.amazon.com/vpc/latest/userguide/vpc-endpoints.html)から送信される場合、`aws:sourceIP` 条件キーは無効です。リクエストを VPC エンドポイントに制限するには、`aws:sourceVpce` または `aws:sourceVpc` 条件キーを使用します。詳細については、「*AWS PrivateLink ガイド*」の [VPC エンドポイントと VPC エンドポイントサービスのアイデンティティおよびアクセス管理](https://docs.aws.amazon.com/vpc/latest/privatelink/vpc-endpoints-iam.html)のページを参照してください。

これらのグローバル条件キーを使用して、 AWS KMS keys (KMS キー）、エイリアス、および特定のリソースに依存しない [CreateKey](https://docs.aws.amazon.com/kms/latest/APIReference/API_CreateKey.html) などのオペレーションへのアクセスを制御できます。

例えば、次のサンプルキーポリシーでは、リクエストが指定された VPC エンドポイントを使用する場合にのみ、KMS キーを使用してユーザーが一部の暗号化オペレーションを実行できます。ユーザーがリクエストを行うと AWS KMS、リクエストの VPC エンドポイント ID がポリシー`aws:sourceVpce`の条件キー値と比較されます。一致しない場合、要求は拒否されます。

このようなポリシーを使用するには、プレースホルダー AWS アカウント ID と VPC エンドポイント IDsをアカウントの有効な値に置き換えます。

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

****  

```
{
    "Id": "example-key-1",
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Sid": "EnableIAMpolicies",
            "Effect": "Allow",
            "Principal": {"AWS":["111122223333"]},
            "Action": ["kms:*"],
            "Resource": "*"
        },
        {
            "Sid": "Restrict usage to my VPC endpoint",
            "Effect": "Deny",
            "Principal": "*",
            "Action": [
                "kms:Encrypt",
                "kms:Decrypt",
                "kms:ReEncrypt*",
                "kms:GenerateDataKey*"
            ],
            "Resource": "*",
            "Condition": {
                "StringNotEquals": {
                "aws:sourceVpce": "vpce-1234abcdf5678c90a"
                }
            }
        }

    ]
}
```

------

また、`aws:sourceVpc` 条件キーを使用して、VPC エンドポイントが存在する VPC に基づいて、KMS キーへのアクセスを制限することもできます。

次のサンプルキーポリシーでは、コマンドが `vpc-12345678` から送信される場合にのみ、KMS キーを管理するコマンドが許可されます。また、コマンドが `vpc-2b2b2b2b` から送信される場合にのみ、暗号化オペレーションで KMS キーを使用するコマンドが許可されます。ある VPC でアプリケーションが実行されていれば、このようなポリシーを使用できますが、管理機能のために 2 番目の切り離された VPC を使用します。

このようなポリシーを使用するには、プレースホルダー AWS アカウント ID と VPC エンドポイント IDsをアカウントの有効な値に置き換えます。

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

****  

```
{
    "Id": "example-key-2",
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Sid": "AllowAdministrativeActionsFromVPC",
            "Effect": "Allow",
            "Principal": {
                "AWS": "111122223333"
            },
            "Action": [
                "kms:Create*",
                "kms:Enable*",
                "kms:Put*",
                "kms:Update*",
                "kms:Revoke*",
                "kms:Disable*",
                "kms:Delete*",
                "kms:TagResource",
                "kms:UntagResource"
            ],
            "Resource": "*",
            "Condition": {
                "StringEquals": {
                    "aws:sourceVpc": "vpc-12345678"
                }
            }
        },
        {
            "Sid": "AllowKeyUsageFromVPC2b2b2b2b",
            "Effect": "Allow",
            "Principal": {
                "AWS": "111122223333"
            },
            "Action": [
                "kms:Encrypt",
                "kms:Decrypt",
                "kms:GenerateDataKey*"
            ],
            "Resource": "*",
            "Condition": {
                "StringEquals": {
                    "aws:sourceVpc": "vpc-2b2b2b2b"
                }
            }
        },
        {
            "Sid": "AllowReadActionsEverywhere",
            "Effect": "Allow",
            "Principal": {
                "AWS": "111122223333"
            },
            "Action": [
                "kms:Describe*",
                "kms:List*",
                "kms:Get*"
            ],
            "Resource": "*"
        }
    ]
}
```

------

# VPC エンドポイントを使用する AWS KMS リクエストのログ記録
<a name="vpce-logging"></a>

AWS CloudTrail は、VPC エンドポイントを使用するすべてのオペレーションを記録します。へのリクエストが VPC エンドポイント AWS KMS を使用する場合、VPC エンドポイント ID はリクエストを記録する[AWS CloudTrail ログ](logging-using-cloudtrail.md)エントリに表示されます。エンドポイント ID を使用して、 AWS KMS VPC エンドポイントの使用を監査できます。

ただし、CloudTrail ログには、他のアカウントのプリンシパルによってリクエストされたオペレーションや、他のアカウントの KMS キーとエイリアスに対する AWS KMS オペレーションのリクエストは含まれません。また、お客様の VPC 保護のため、VPC エンドポイントポリシーによって拒否されたが、それ以外の場合には許可されていたであろうと思われるリクエストは [AWS CloudTrail](logging-using-cloudtrail.md) には記録されません。

例えば、このサンプルログエントリは、VPC エンドポイントを使用した [GenerateDataKey](https://docs.aws.amazon.com/kms/latest/APIReference/API_GenerateDataKey.html) リクエストを記録します。`vpcEndpointId` フィールドは、ログエントリの最後に表示されます。

```
{
  "eventVersion":"1.05",
  "userIdentity": {
    "type": "IAMUser",
    "principalId": "EX_PRINCIPAL_ID",
    "arn": "arn:aws:iam::111122223333:user/Alice",
    "accessKeyId": "EXAMPLE_KEY_ID",
    "accountId": "111122223333",
    "userName": "Alice"
  },
  "eventTime":"2018-01-16T05:46:57Z",
  "eventSource":"kms.amazonaws.com",
  "eventName":"GenerateDataKey",
  "awsRegion":"eu-west-1",
  "sourceIPAddress":"172.01.01.001",
  "userAgent":"aws-cli/1.14.23 Python/2.7.12 Linux/4.9.75-25.55.amzn1.x86_64 botocore/1.8.27",
  "requestParameters":{
    "keyId":"1234abcd-12ab-34cd-56ef-1234567890ab",
    "numberOfBytes":128
  },
  "responseElements":null,
  "requestID":"a9fff0bf-fa80-11e7-a13c-afcabff2f04c",
  "eventID":"77274901-88bc-4e3f-9bb6-acf1c16f6a7c",
  "readOnly":true,
  "resources":[{
    "ARN":"arn:aws:kms:eu-west-1:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab",
    "accountId":"111122223333",
    "type":"AWS::KMS::Key"
  }],
  "eventType":"AwsApiCall",
  "recipientAccountId":"111122223333",
  "vpcEndpointId": "vpce-1234abcdf5678c90a"
}
```

# デュアルスタックエンドポイントのサポート
<a name="ipv6-kms"></a>

AWS KMS は、IPv4 クライアントと IPv6 クライアントの両方をサポートするデュアルスタックのパブリックエンドポイントを提供します。デュアルスタックエンドポイントを使用すると、クライアントは IPv4 アドレスまたは IPv6 アドレス AWS KMS を使用して と通信できます。 AWS KMS エンドポイントの詳細については、[AWS Key Management Service 「 エンドポイントとクォータ」を参照してください。](https://docs.aws.amazon.com//general/latest/gr/kms.html)

の AWS KMS デュアルスタックパブリックエンドポイントは、IPv4 クライアントと IPv6 クライアントの両方`https://kms.your-region.api.aws`をサポートします。 AWS KMS は、 を使用して仮想プライベートクラウド (VPC) から IPv4 および IPv6 経由でプライベートにアクセスすることもできます AWS PrivateLink。のプライベートインターフェイス VPC エンドポイントの作成の詳細については AWS KMS、「」を参照してください[VPC エンドポイント AWS KMS を介して に接続する](kms-vpc-endpoint.md)。

VPC の IPv6 アドレス指定の詳細については、「Amazon Virtual Private Cloud ユーザーガイド」の「[Amazon VPC の仕組み](https://docs.aws.amazon.com/vpc/latest/userguide/how-it-works.html#vpc-ip-addressing)」を参照してください。VPC をデュアルスタックモードに設定する方法については、「Amazon Virtual Private Cloud ユーザーガイド」の「[VPC とサブネットの IP アドレス指定](https://docs.aws.amazon.com/vpc/latest/userguide/vpc-ip-addressing.html#vpc-ipv6)」を参照してください。

## IPv6 で使用できない機能
<a name="kms-ipv6-limitations"></a>

AWS KMS は IPv6 経由で AWS CloudHSM キーストアまたは外部キーストアと通信できません。この制限は、IPv6 経由で AWS KMS APIs呼び出すことを妨げません。