

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

# Amazon DocumentDB におけるデータ保護
<a name="security.data-protection"></a>

Amazon DocumentDB (MongoDB 互換) でのデータ保護には、AWS の [責任共有モデル](https://aws.amazon.com/compliance/shared-responsibility-model/) が適用されます。このモデルで説明されているように、「AWS」 は、「AWS クラウド」 のすべてを実行するグローバルインフラストラクチャを保護する責任があります。ユーザーは、このインフラストラクチャでホストされるコンテンツに対する管理を維持する責任があります。また、使用する「AWS のサービス」のセキュリティ設定と管理タスクもユーザーの責任となります。データプライバシーの詳細については、[データプライバシーに関するよくある質問](https://aws.amazon.com/compliance/data-privacy-faq/)を参照してください。欧州でのデータ保護の詳細については、*AWS セキュリティブログ*に投稿された [AWS 責任共有モデルおよび GDPR](https://aws.amazon.com/blogs/security/the-aws-shared-responsibility-model-and-gdpr/) のブログ記事を参照してください。

データを保護するため、「AWS アカウント」 認証情報を保護し、「AWS IAM アイデンティティセンター」 または 「AWS Identity and Access Management」 (IAM) を使用して個々のユーザーをセットアップすることをお勧めします。この方法により、それぞれのジョブを遂行するために必要な権限のみが各ユーザーに付与されます。また、次の方法でデータを保護することもお勧めします:
+ 各アカウントで多要素認証 (MFA) を使用します。
+ SSL/TLS を使用して 「AWS」 リソースと通信します。TLS 1.2 が必須で、TLS 1.3 をお勧めします。
+ AWS CloudTrail で API とユーザーアクティビティロギングを設定します。CloudTrail 証跡を使用して AWS アクティビティをキャプチャする方法については、「*AWS CloudTrail ユーザーガイド*」の「[CloudTrail 証跡の使用](https://docs.aws.amazon.com/awscloudtrail/latest/userguide/cloudtrail-trails.html)」を参照してください。
+ AWS のサービス 内のすべてのデフォルトセキュリティコントロールに加え、AWS 暗号化ソリューションを使用します。
+ Amazon Macie などの高度な管理されたセキュリティサービスを使用します。これらは、Amazon S3 に保存されている機密データの検出と保護を支援します。
+ コマンドラインインターフェイスまたは API を使用して 「AWS」 にアクセスする際に FIPS 140-3 検証済みの暗号化モジュールが必要な場合は、FIPS エンドポイントを使用します。利用可能な FIPS エンドポイントの詳細については、「[連邦情報処理規格 (FIPS) 140-3](https://aws.amazon.com/compliance/fips/)」を参照してください。

お客様の E メールアドレスなどの極秘または機密情報は、タグ、または**名前**フィールドなどの自由形式のテキストフィールドに配置しないことを強くお勧めします。これには、コンソール API、AWS CLI、または AWS SDK を用いた Amazon DocumentDB のその他の AWS のサービス の使用時が含まれます。タグ、または名前に使用される自由記述のテキストフィールドに入力したデータは、請求または診断ログに使用される場合があります。外部サーバーに URL を提供する場合、そのサーバーへのリクエストを検証できるように、認証情報を URL に含めないことを強くお勧めします。

**Topics**
+ [クライアント側のフィールドレベルの暗号化](field-level-encryption.md)
+ [保管中のデータの暗号化](encryption-at-rest.md)
+ [転送中のデータの暗号化](security.encryption.ssl.md)
+ [キー管理](security.encryption.ssl.public-key.md)

# クライアント側のフィールドレベルの暗号化
<a name="field-level-encryption"></a>

Amazon DocumentDB のクライアント側のフィールドレベル暗号化 (FLE) を使用すると、Amazon DocumentDB クラスターに転送される前に、クライアントアプリケーションの機密データを暗号化できます。機密データは、クラスターで保存および処理されるときは暗号化されたままで、取得時にはクライアントアプリケーションで復号化されます。

**Topics**
+ [はじめに](#fle-getting-started)
+ [クライアント側 FLE でのクエリ](#fle-querying)
+ [制限](#fle-limitationa)

## はじめに
<a name="fle-getting-started"></a>

Amazon DocumentDB でのクライアント側 FLE の初期設定は、暗号化キーの作成、アプリケーションへのロールの関連付け、アプリケーションの設定、暗号化オプションによる CRUD オペレーションの定義を含む 4 ステップのプロセスです。

**Topics**
+ [ステップ 1: 暗号化キーの作成](#fle-step-create-key)
+ [ステップ 2: ロールとアプリケーションの関連付け](#fle-step-associate-role)
+ [ステップ 3: アプリケーションの設定](#fle-step-config-app)
+ [ステップ 4: CRUD オペレーションの定義](#fle-step-crud-ops)
+ [例:クライアント側のフィールドレベル暗号化設定ファイル](#fle-config-example)

### ステップ 1: 暗号化キーの作成
<a name="fle-step-create-key"></a>

AWS Key Management Service を使用して、機密データフィールドの暗号化と復号化に使用する対称キーを作成し、必要な IAM 使用権限を付与します。 AWS KMS は、データキー (DK) の暗号化に使用されるカスタマーキー (CK) を格納します。セキュリティ体制を強化するため、カスタマーキーは KMS に保存することをお勧めします。データキーは Amazon DocumentDB コレクションに保存されるセカンダリキーで、Amazon DocumentDB にドキュメントを保存する前に機密フィールドを暗号化するために必要です。カスタマーキーはデータキーを暗号化し、データキーはデータを暗号化および復号化します。グローバルクラスターを使用している場合は、さまざまなリージョンのさまざまなサービスロールで使用できるマルチリージョンキーを作成できます。

キーの作成方法など、AWS Key Management Service の詳細については、「[AWSKey Management Service デベロッパーガイド](https://docs.aws.amazon.com/kms/latest/developerguide/overview.html)」を参照してください。

### ステップ 2: ロールとアプリケーションの関連付け
<a name="fle-step-associate-role"></a>

適切な AWS KMS 許可を持つ IAM ポリシーを作成します。このポリシーは、アタッチされた IAM アイデンティティで、リソースフィールドで指定された KMS キーの暗号化と復号化ができるようにします。アプリケーションはこの IAM ロールを引き受けて AWS KMS の認証を行います。

ポリシーは次のようになります。

```
{ "Effect": "Allow",
"Action": ["kms:Decrypt", "kms:Encrypt"],
"Resource": "Customer Key ARN"
}
```

### ステップ 3: アプリケーションの設定
<a name="fle-step-config-app"></a>

これまでに、AWS KMS でカスタマーキーを定義し、IAM ロールを作成し、そのロールにカスタマーキーにアクセスするための適切な IAM アクセス許可を付与しました。必要なパッケージをインポートします。

```
import boto3
import json
import base64
from pymongo import MongoClient
from pymongo.encryption import (Algorithm,
                                ClientEncryption)
```

```
# create a session object: 
my_session = boto3.session.Session()

# get access_key and secret_key programmatically using get_frozen_credentials() method:
 current_credentials = my_session.get_credentials().get_frozen_credentials()
```

1. KMS プロバイダーのタイプに「aws」を指定し、前のステップで取得したアカウント認証情報を入力します。

   ```
   provider = "aws"
   kms_providers = {
       provider: {
           "accessKeyId": current_credentials.access_key,
           "secretAccessKey": current_credentials.secret_key
       }
   }
   ```

1. データキーの暗号化に使用するカスタマーキーを指定します。

   ```
   customer_key = {
   “region”: “AWS region of the customer_key”,
       “key”: “customer_key ARN”
   }
   
   key_vault_namespace = "encryption.dataKeys"
   
   key_alt_name = 'TEST_DATA_KEY'
   ```

1. MongoClient オブジェクトを設定します。

   ```
   client = MongoClient(connection_string)
   
   coll = client.test.coll
   coll.drop()
   
   client_encryption = ClientEncryption(
       kms_providers, # pass in the kms_providers variable from the previous step
       key_vault_namespace = key_vault_namespace,
       client,
       coll.codec_options
   )
   ```

1. データキーを生成します。

   ```
   data_key_id = client_encryption.create_data_key(provider,
       customer_key,
       key_alt_name = [key_alt_name])
   ```

1. 既存のデータキーを取得します。

   ```
   data_key = DataKey("aws",
       master_key = customer_key)
   key_id = data_key["_id"]
   data_key_id = client[key_vault_namespace].find_one({"_id": key_id})
   ```

### ステップ 4: CRUD オペレーションの定義
<a name="fle-step-crud-ops"></a>

CRUD オペレーションを暗号化オプションで定義します。

1. 1 つのドキュメントの書き込み/読み取り/削除を行うコレクションを定義します。

   ```
   coll = client.gameinfo.users
   ```

1. 明示的な暗号化 - フィールドを暗号化して以下を挿入します。
**注記**  
「key\$1id」または「key\$1alt\$1name」の 1 つを正確に指定する必要があります。

   ```
   encrypted_first_name = client_encryption.encrypt(
       "Jane",
       Algorithm.AEAD_AES_256_CBC_HMAC_SHA_512_Deterministic,
       key_alt_name=data_key_id
   )
   encrypted_last_name = client_encryption.encrypt(
       "Doe",
       Algorithm.AEAD_AES_256_CBC_HMAC_SHA_512_Deterministic,
       key_alt_name=data_key_id
   )
   encrypted_dob = client_encryption.encrypt(
       "1990-01-01",
       Algorithm.AEAD_AES_256_CBC_HMAC_SHA_512_Random,
       key_alt_name=data_key_id
   )
   
   coll.insert_one(
       {"gamerTag": "jane_doe90",
       "firstName": encrypted_first_name,
       "lastName": encrypted_last_name,
       "dateOfBirth":encrypted_dob,
       "Favorite_games":["Halo","Age of Empires 2","Medal of Honor"]
   })
   ```

### 例:クライアント側のフィールドレベル暗号化設定ファイル
<a name="fle-config-example"></a>

次の例では、各 *ユーザー入力プレースホルダー* を独自の情報に置き換えます。

```
# import python packages:
import boto3
import json
import base64
from pymongo import MongoClient
from pymongo.encryption import (Algorithm,
                                ClientEncryption)

def main():
    
    # create a session object:
    my_session = boto3.session.Session()
    
    # get aws_region from session object:
    aws_region = my_session.region_name
    
    # get access_key and secret_key programmatically using get_frozen_credentials() method:
    current_credentials = my_session.get_credentials().get_frozen_credentials()
    provider = "aws"
    
    # define the kms_providers which is later used to create the Data Key:
    kms_providers = {
        provider: {
            "accessKeyId": current_credentials.access_key,
            "secretAccessKey": current_credentials.secret_key
        }
    }
    
    # enter the kms key ARN. Replace the example ARN value.
    kms_arn = "arn:aws:kms:us-east-1:123456789:key/abcd-efgh-ijkl-mnop"
    customer_key = {
        "region": aws_region,
        "key":kms_arn
    }

    # secrets manager is used to strore and retrieve user credentials for connecting to an Amazon DocumentDB cluster. 
    # retrieve the secret using the secret name. Replace the example secret key.
    secret_name = "/dev/secretKey"
    docdb_credentials = json.loads(my_session.client(service_name = 'secretsmanager', region_name = "us-east-1").get_secret_value(SecretId = secret_name)['SecretString'])

    connection_params = '/?tls=true&tlsCAFile=global-bundle.pem&replicaSet=rs0&readPreference=secondaryPreferred&retryWrites=false'
    conn_str = 'mongodb://' + docdb_credentials["username"] + ':' + docdb_credentials["password"] + '@' + docdb_credentials["host"] + ':' + str(docdb_credentials["port"]) + connection_params
    client = MongoClient(conn_str) 

    coll = client.test.coll
    coll.drop()
    
    # store the encryption data keys in a key vault collection (having naming convention as db.collection):
    key_vault_namespace = "encryption.dataKeys"
    key_vault_db_name, key_vault_coll_name = key_vault_namespace.split(".", 1)

    # set up the key vault (key_vault_namespace) for this example:
    key_vault = client[key_vault_db_name][key_vault_coll_name]
    key_vault.drop()
    key_vault.create_index("keyAltNames", unique=True)

    client_encryption = ClientEncryption(
        kms_providers,
        key_vault_namespace,
        client,
        coll.codec_options)
    
    # create a new data key for the encrypted field:
    data_key_id = client_encryption.create_data_key(provider, master_key=customer_key, key_alt_names=["some_key_alt_name"], key_material = None)
    
    # explicitly encrypt a field:
    encrypted_first_name = client_encryption.encrypt(
    "Jane",
    Algorithm.AEAD_AES_256_CBC_HMAC_SHA_512_Deterministic,
    key_id=data_key_id
    )
    coll.insert_one(
    {"gamerTag": "jane_doe90",
    "firstName": encrypted_first_name
    })
    doc = coll.find_one()
    print('Encrypted document: %s' % (doc,))
    
    # explicitly decrypt the field:
    doc["encryptedField"] = client_encryption.decrypt(doc["encryptedField"])
    print('Decrypted document: %s' % (doc,))
    
    # cleanup resources:
    client_encryption.close()
    client.close()
    
    if __name__ == "__main__":
        main()
```

## クライアント側 FLE でのクエリ
<a name="fle-querying"></a>

Amazon DocumentDB は、クライアント側 FLE によるポイント等式クエリをサポートしています。不等式クエリや比較クエリは、不正確な結果を返す可能性があります。読み取りオペレーションと書き込みオペレーションは、復号化された値に対して同じオペレーションを実行する場合と比較して、予期しない動作や誤った動作をする可能性があります。

たとえば、ゲーマースコアが 500 を超えるドキュメントのフィルターをクエリするには:

```
db.users.find( {
    "gamerscore" : { $gt : 500 }
})
```

クライアントは明示的な暗号化の方法を使用してクエリ値を暗号化します。

```
encrypted_gamerscore_filter = client_encryption.encrypt(
    500,
        Algorithm.AEAD_AES_256_CBC_HMAC_SHA_512_Deterministic,
        key_alt_name=data_key_id
        )

db.users.find( {
    "gamerscore" : { $gt : encrypted_gamerscore_filter }
} )
```

検索オペレーションでは、Amazon DocumentDB は、暗号化された値 500 と各ドキュメントに保存されている暗号化されたフィールド値を不等号チェックを使用して比較します。検索オペレーションの不等式チェックは、復号化されたデータと値を使用して実行すると、結果の生成に成功しても、異なる結果が返されることがあります。

## 制限
<a name="fle-limitationa"></a>

Amazon DocumentDB のクライアント側のフィールドレベル暗号化には、以下の制限が適用されます。
+ Amazon DocumentDB がサポートするのは、ポイント等式クエリのみです。不等式クエリや比較クエリは、不正確な結果を返す可能性があります。読み取りオペレーションと書き込みオペレーションは、復号化された値に対して同じオペレーションを実行する場合と比較して、予期しない動作や誤った動作をする可能性があります。ゲーマースコアが 500 を超えるドキュメントのフィルターをクエリするには、

  ```
  db.users.find( {
      "gamerscore" : { $gt : 500 }
      })
  ```

  クライアントは明示的な暗号化の方法を使用してクエリ値を暗号化します。

  ```
  encrypted_gamerscore_filter = client_encryption.encrypt(
      500,
      Algorithm.AEAD_AES_256_CBC_HMAC_SHA_512_Deterministic,
      key_alt_name=data_key_id
  )
  
  db.users.find({
      "gamerscore" : { $gt : encrypted_gamerscore_filter }
  })
  ```

  検索オペレーションでは、Amazon DocumentDB は、暗号化された値 500 と各ドキュメントに保存されている暗号化されたフィールド値を不等号チェックを使用して比較します。検索オペレーションの不等式チェックは、復号化されたデータと値を使用して実行すると、結果の生成に成功しても、異なる結果が返されることがあります。
+ Amazon DocumentDB は、Mongo Shell からの明示的なクライアント側 FLE をサポートしていません。ただし、この機能はサポートされているどのドライバーでも動作します。

# Amazon DocumentDB データの保管時の暗号化
<a name="encryption-at-rest"></a>

**注記**  
AWS KMS では、*カスタマーマスターキー (CMK)* という用語が *AWS KMS key* および *KMS キー*に置き換えられています。この概念に変更はありません。AWS KMS では、互換性を破る変更を避けるため、この用語にいくつかのバリエーションがあります。

クラスターを作成するときに、ストレージの暗号化オプションを指定して、Amazon DocumentDB クラスター内の保存データを暗号化できます。ストレージの暗号化はクラスター全体で有効になり、プライマリインスタンスとレプリカを含むインスタンス全体に適用されます。また、クラスターのストレージボリューム、データ、インデックス、ログ、自動バックアップ、スナップショットにも適用されます。

Amazon DocumentDB は、256 ビット高度暗号化標準 (AES-256) を使用し、AWS Key Management Service (AWS KMS) に保存されている暗号化キーを使用してデータを暗号化します。保存暗号化が有効な Amazon DocumentDB クラスターを使用する場合、アプリケーションロジックやクライアント接続を変更する必要はありません。Amazon DocumentDB はパフォーマンスの影響を最小限に抑えながら、データの暗号化と復号を透過的に処理します。

Amazon DocumentDB は、AWS KMS と統合されエンベロープ暗号化と呼ばれる方法を使用してデータを保護します。Amazon DocumentDB クラスターが AWS KMS で Amazon DocumentDB で暗号化されている場合、AWS KMS は KMSキーを使用してストレージボリュームを [暗号化するための暗号化テキストデータキー](https://docs.aws.amazon.com/kms/latest/APIReference/API_GenerateDataKeyWithoutPlaintext.html) を生成するように要求します。暗号化テキストデータキーは、定義する KMS を使用して暗号化され、暗号化されたデータおよびストレージメタデータとともに保存されます。Amazon DocumentDB が暗号化されたデータにアクセスする必要がある場合、AWS KMS に KMS を使用して暗号テキストデータキーの復号を要求し、プレーンテキストデータキーをメモリにキャッシュして、ストレージボリューム内のデータを効率的に暗号化および復号化します。

Amazon DocumentDB のストレージの暗号化機能は、サポートされるすべてのインスタンスサイズおよび AWS リージョン が利用できるすべての Amazon DocumentDB で利用できます。

## Amazon DocumentDB クラスターで保管時の暗号化を有効にする
<a name="encryption-at-rest-enabling"></a>

AWS マネジメントコンソール または AWS Command Line Interface (AWS CLI) を使用して Amazon DocumentDB クラスターがプロビジョニングされるときに、クラスターで保存時の暗号化を有効または無効にできます。コンソールを使用して作成したクラスターでは、デフォルトで保管時の暗号化が有効になっています。AWS CLI を使用して作成したクラスターでは、保管時の暗号化がデフォルトで無効になっています。したがって、保存時の暗号化は `--storage-encrypted` パラメータを使用して明示的に有効にする必要があります。いずれの場合も、クラスターの作成後は、保存時の暗号化オプションを変更することはできません。

Amazon DocumentDB は AWS KMS を使用して、暗号化キーを取得および管理し、これらのキーの使用方法を制御するポリシーを定義します。AWS KMS キー識別子を指定しない場合、Amazon DocumentDB はデフォルトの AWS マネージドサービス KMS キーを使用します。Amazon DocumentDB は、AWS リージョン で AWS アカウント それぞれに個別の KMS キーを作成します。詳細については、「[AWS Key Management Service の概念](https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html)」を参照してください。

独自の KMS キーの作成を開始するには、[開始方法](https://docs.aws.amazon.com/kms/latest/developerguide/getting-started.html) の *AWS Key Management Service デベロッパーガイド* を参照してください。

**重要**  
Amazon DocumentDB がサポートしているのは対称 KMS キーのみであるため、クラスターの暗号化には対称暗号化 KMS キーを使用して必要があります。Amazon DocumentDB クラスター内のデータの暗号化に非対称 KMS キー を使用しないでください。詳細については、AWS Key Management Service デベロッパーガイドの「[AWS KMS の非対称キー](https://docs.aws.amazon.com/kms/latest/developerguide/symmetric-asymmetric.html)」を参照してください。

Amazon DocumentDB がクラスターの暗号化キーにアクセスできなくなった場合、例えばキーへのアクセス権が失効した場合など、暗号化されたクラスターは終了状態になります。この場合、クラスターはバックアップからのみ復元できます。Amazon DocumentDB では、バックアップは常に 1 日間有効になります。

また、暗号化された Amazon DocumentDB クラスターのキーを無効にすると、最終的にそのクラスタに対する読み取りおよび書き込みのアクセス権は失われます。Amazon DocumentDB で、アクセスできないキーで暗号化されたクラスターが発生すると、クラスターが終了状態になります。この場合、クラスターは使用できなくなり、データベースの現在の状態を復元することはできません。クラスターを復元するには、Amazon DocumentDB の暗号化キーへのアクセスを再び有効にした後、バックアップからクラスターを復元します。

**重要**  
暗号化されたクラスターの KMS キーを作成した後は、そのクラスターを変更することはできません。暗号化されたクラスターを作成する前に、暗号化キーの要件を確認してください。

------
#### [ Using the AWS マネジメントコンソール ]

保管時の暗号化オプションは、クラスターの作成時に指定します。AWS マネジメントコンソール を使用してクラスターを作成すると、保管時の暗号化がデフォルトで有効になります。クラスターの作成後に変更することはできません。

**クラスターの作成時に保管時の暗号化オプションを指定するには**

1. Amazon DocumentDB クラスターの作成は、[開始方法](https://docs.aws.amazon.com/documentdb/latest/developerguide/connect-ec2.launch-cluster.html) セクションで説明されています。ただし、ステップ 6 では、[**クラスターの作成**] を選択しないでください。

1. [**Authentication (認証)**] セクションの下で、[**Show advanced settings (詳細設定の表示)**] を選択します。

1. [**Encryption-at-rest (保管時の暗号化)**] セクションまで下にスクロールします。

1. 保存時の暗号化オプションを選択します。どちらのオプションを選択しても、クラスターの作成後に変更することはできません。
   + このクラスターを保管時に暗号化するには、[**暗号化の有効化**] を選択します。
   + このクラスターで保存されているデータを暗号化しない場合は、[**暗号化の無効化**] を選択します。

1. 目的のプライマリキーを選択します。Amazon DocumentDB は AWS Key Management Service (AWS KMS) を使用して、暗号化キーを取得および管理し、これらのキーの使用方法を制御するポリシーを定義します。AWS KMS キー識別子を指定しない場合、Amazon DocumentDB はデフォルトの AWS マネージドサービス KMS キーを使用します。詳細については、「[AWS Key Management Service の概念](https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html)」を参照してください。
**注記**  
暗号化されたクラスターを作成したら、そのクラスターの KMS キーを変更することはできません。暗号化されたクラスターを作成する前に、暗号化キーの要件を確認してください。

1. 必要に応じて他のセクションを完了し、クラスターを作成します。

------
#### [ Using the AWS CLI ]

AWS CLI を使用して Amazon DocumentDB クラスターを暗号化するには、 [https://awscli.amazonaws.com/v2/documentation/api/latest/reference/docdb/describe-db-clusters.html](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/docdb/describe-db-clusters.html) コマンドを実行し、`--storage-encrypted` オプションを指定します。AWS CLI を使用して作成された Amazon DocumentDB クラスターは、デフォルトでストレージ暗号化を有効にしないでください。

次の例では、ストレージ暗号化を有効にした Amazon DocumentDB クラスターを作成します。

次の例では*ユーザー入力プレースホルダー*をユーザー自身の情報で置き換えます。

**Example**  
Linux、macOS、Unix の場合:  

```
aws docdb create-db-cluster \
  --db-cluster-identifier mydocdbcluster \
  --port 27017 \
  --engine docdb \
  --master-username SampleUser1 \
  --master-user-password primaryPassword \
  --storage-encrypted
```
Windows の場合:  

```
aws docdb create-db-cluster ^
  --db-cluster-identifier SampleUser1 ^
  --port 27017 ^
  --engine docdb ^
  --master-username SampleUser1 ^
  --master-user-password primaryPassword ^
  --storage-encrypted
```

暗号化された Amazon DocumentDB クラスターを作成するときに、次の例に示すように、AWS KMS キー識別子を指定できます。

**Example**  
Linux、macOS、Unix の場合:  

```
aws docdb create-db-cluster \
  --db-cluster-identifier SampleUser1 \
  --port 27017 \
  --engine docdb \
  --master-username primaryUsername \
  --master-user-password yourPrimaryPassword \
  --storage-encrypted \
  --kms-key-id key-arn-or-alias
```
Windows の場合:  

```
aws docdb create-db-cluster ^
  --db-cluster-identifier SampleUser1 ^
  --port 27017 ^
  --engine docdb ^
  --master-username SampleUser1 ^
  --master-user-password primaryPassword ^
  --storage-encrypted ^
  --kms-key-id key-arn-or-alias
```

**注記**  
暗号化されたクラスターを作成したら、そのクラスターの KMS キーを変更することはできません。暗号化されたクラスターを作成する前に、暗号化キーの要件を確認してください。

------

## Amazon DocumentDB 暗号化クラスターに関する制限事項
<a name="encryption-at-rest-limits"></a>

Amazon DocumentDB の暗号化されたクラスターには、以下の制限事項があります。
+ Amazon DocumentDB クラスターのストレージの暗号化を有効または無効にできるのは、クラスターの作成後ではなく作成時のみです。ただし、暗号化されていないクラスターのスナップショットを作成し、暗号化されていないスナップショットを新しいクラスターとして復元する際に保存時の暗号化オプションを指定します。

  詳細については、以下の各トピックを参照してください。
  + [手動クラスタースナップショットの作成](backup_restore-create_manual_cluster_snapshot.md)
  + [クラスタースナップショットからの復元](backup_restore-restore_from_snapshot.md)
  + [Amazon DocumentDB クラスタースナップショットのコピー](backup_restore-copy_cluster_snapshot.md)
+ ストレージの暗号化を有効にした Amazon DocumentDB クラスターを変更して暗号化を無効にすることはできません。
+ Amazon DocumentDB クラスターのすべてのインスタンス、自動バックアップ、スナップショット、インデックスは、同じ KMS キーで暗号化されます。

# 転送中のデータの暗号化
<a name="security.encryption.ssl"></a>

TLS (Transport Layer Security) を使用して、アプリケーションと Amazon DocumentDB クラスター間の接続を暗号化できます。デフォルトでは、転送時の暗号化は、新しく作成された Amazon DocumentDB クラスターに対して有効になっています。クラスターの作成時、または後で無効にすることもできます。転送中の暗号化が有効になっている場合、クラスターに接続するには TLS を使用したセキュアな接続が必要です。TLS を使用した Amazon DocumentDB への接続の詳細については、「[プログラムによる Amazon DocumentDB への接続](connect_programmatically.md)」を参照してください。

## Amazon DocumentDB クラスター TLS 設定の管理
<a name="security.encryption.ssl.managing"></a>

Amazon DocumentDB クラスターの転送中の暗号化は、[クラスターパラメータグループ](https://docs.aws.amazon.com/documentdb/latest/developerguide/cluster_parameter_groups.html) の TLS パラメータを使用して管理されます。AWS マネジメントコンソール または AWS Command Line Interface(AWS CLI) を使用して、Amazon DocumentDB クラスターの TLS 設定を管理できます。現在の TLS 設定を確認して変更する方法の説明については、次のセクションを参照してください。

------
#### [ Using the AWS マネジメントコンソール ]

コンソールを使用して TLS 向けにパフォーマンス管理タスクは、パラメータグループの識別、TLS 値の検証や必要な変更の追加などには、次の手順を使用します。

**注記**  
クラスターの作成時に別の指定がない限り、クラスターはデフォルトのクラスターパラメータグループを使用して作成されます。`default` クラスターパラメータグループのパラメータは変更できません (`tls` の有効化/無効化など)。そのため、クラスターが `default` クラスターパラメータグループを使用している場合は、デフォルト以外のクラスターパラメータグループを使用するようにクラスターを変更する必要があります。まず、カスタムクラスターパラメータグループを作成する必要があります。詳細については、「[Amazon DocumentDB クラスターパラメータグループを作成する](cluster_parameter_groups-create.md)」を参照してください。

1. **クラスターが使用しているクラスターパラメータグループを確認します。**

   1. Amazon DocumentDB コンソールを次の場所で開きます。[https://console.aws.amazon.com/docdb](https://console.aws.amazon.com/docdb)

   1. ナビゲーションペインで [**クラスター**] を選択します。
**ヒント**  
画面の左側にナビゲーションペインが表示されない場合は、ページの左上隅にあるメニューアイコン (![\[Hamburger menu icon with three horizontal lines.\]](http://docs.aws.amazon.com/ja_jp/documentdb/latest/developerguide/images/docdb-menu-icon.png)) を選択します。

   1. **[クラスター]** ナビゲーションボックスの **[クラスター識別子]** 列には、クラスターとインスタンスの両方が表示されますのでご注意ください。インスタンスはクラスターの下にリストされます。参考のために下のスクリーンショットを参照してください。  
![\[既存のクラスターリンクとそれに対応するインスタンスリンクのリストを示したクラスターナビゲーションボックスの画像。\]](http://docs.aws.amazon.com/ja_jp/documentdb/latest/developerguide/images/clusters.png)

   1. 関心があるクラスターを選択します。

   1. **[設定]** タブを選択して、**[クラスターの詳細]** の一番下までスクロールし、**[クラスターパラメータグループ]** を見つけます。クラスターパラメータグループの名前を書き留めます。

      クラスターのパラメータグループの名前が `default` (例えば、`default.docdb3.6` など) の場合、続行する前にカスタムのクラスターパラメータグループを作成して、それをクラスターのパラメータグループにする必要があります。詳細については次を参照してください:

      1. [Amazon DocumentDB クラスターパラメータグループを作成する](cluster_parameter_groups-create.md) − 使用できるカスタムのクラスターパラメータグループがない場合、これを作成します。

      1. [Amazon DocumentDB クラスターの変更](db-cluster-modify.md) - カスタムクラスターパラメータグループを使用するようにクラスターを変更します。

1. **`tls` クラスターパラメータの現在の値を確認します。**

   1. Amazon DocumentDB コンソールを次の場所で開きます。[https://console.aws.amazon.com/docdb](https://console.aws.amazon.com/docdb)

   1. ナビゲーションペインで、**[パラメータグループ]** を選択します。

   1. クラスターパラメータグループの一覧から、使用するクラスターパラメータグループの名前を選択します。

   1. [**クラスターパラメータ**] セクションを見つけます。クラスターパラメータの一覧で、`tls` クラスターパラメータ行を見つけます。この時点では、次の 4 つの列が重要です。
      + **クラスターパラメータ名** - クラスターパラメータの名前 TLS を管理するには、`tls` クラスターパラメータを選びます。
      + **値** - 各クラスターパラメータの現在の値
      + **使用できる値** - クラスターパラメータに適用できる値の一覧。
      + **適用タイプ** - [**静的**] または [**動的**] のいずれか。静的クラスターパラメータへの変更は、インスタンスが再起動されるときにのみ適用されます。動的パラメータへの変更は、すぐに適用されるか、またはインスタンスが再起動されるときに適用されます。

1. **`tls` クラスターパラメータの値を設定します。**

   `tls` の値が必要な値ではない場合、このクラスターパラメータグループの値を変更します。`tls` クラスターパラメータの値を変更するには、前のセクションに続いて次の手順を行います。

   1. クラスターパラメータ名 (`tls`) の左側のボタンを選択します。

   1. **[編集]** を選択します。

   1. `tls` の値を変更するには、[**`tls` の変更**] ダイアログボックスで、ドロップダウンリストからクラスターパラメータに必要な値を選択します。

      次の値を指定できます。
      + **disabled**: TLS を無効にします
      + **enabled**: TLS バージョン 1.0 から 1.3 を有効にします。
      + **fips-140-3**: FIPS で TLS を有効にします。クラスターは、連邦情報処理標準 (FIPS) 出版物 140-3 の要件に従った安全な接続のみを受け付けます。これは、これらのリージョン (ca-central-1、us-west-2、us-east-1、us-east-2、us-gov-east-1、us-gov-west-1) で、Amazon DocumentDB 5.0 (エンジンバージョン 3.0.3727) 以降のクラスターでのみサポートされます。
      + **tls1.2\$1**: TLS バージョン 1.2 以降を有効にします。これは、Amazon DocumentDB 4.0 (エンジンバージョン 2.0.10980) および Amazon DocumentDB (エンジンバージョン 3.0.11051) 以降でのみサポートされています。
      + **tls1.3\$1**: TLS バージョン 1.3 以降を有効にします。これは、Amazon DocumentDB 4.0 (エンジンバージョン 2.0.10980) および Amazon DocumentDB (エンジンバージョン 3.0.11051) 以降でのみサポートされています。  
![\[クラスター固有の TLS 変更ダイアログボックスの画像。\]](http://docs.aws.amazon.com/ja_jp/documentdb/latest/developerguide/images/modify-tls.png)

   1. [**Modify cluster parameter (クラスターパラメータの変更)**] を選択します。各クラスターインスタンスが再起動されると、変更が適用されます。

1. **Amazon DocumentDB インスタンスを再起動します。**

   変更がクラスター内のすべてのインスタンスに適用されるように、クラスターの各インスタンスを再起動します。

   1. Amazon DocumentDB コンソールを次の場所で開きます。[https://console.aws.amazon.com/docdb](https://console.aws.amazon.com/docdb)

   1. ナビゲーションペインで、[**インスタンス**] を選択してください。

   1. 再起動するインスタンスを指定するには、インスタンスのリストでインスタンスを見つけ、その名前の左側にあるボタンを選択します。

   1. [**アクション**]、[**再起動**] の順に選択します。[**再起動**] を選択して、リブートすることを確認します。

------
#### [ Using the AWS CLI ]

AWS CLI を使用して TLS 向けにパフォーマンス管理タスクは、パラメータグループの識別、TLS 値の検証や必要な変更の追加などには、次の手順を使用します。

**注記**  
クラスターの作成時に別の指定がない限り、クラスターはデフォルトのクラスターパラメータグループを使用して作成されます。`default` クラスターパラメータグループのパラメータは変更できません (`tls` の有効化/無効化など)。そのため、クラスターが `default` クラスターパラメータグループを使用している場合は、デフォルト以外のクラスターパラメータグループを使用するようにクラスターを変更する必要があります。まず、カスタムクラスターパラメータグループを作成する必要があります。詳細については、「[Amazon DocumentDB クラスターパラメータグループを作成する](cluster_parameter_groups-create.md)」を参照してください。

1. **クラスターが使用しているクラスターパラメータグループを確認します。**

   次のオプションで [https://awscli.amazonaws.com/v2/documentation/api/latest/reference/docdb/describe-db-clusters.html](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/docdb/describe-db-clusters.html) コマンドを実行します。
   + `--db-cluster-identifier`
   + `--query`

   次の例では、各 *ユーザー入力プレースホルダー* をクラスターの情報に置き換えます。

   ```
   aws docdb describe-db-clusters \
     --db-cluster-identifier mydocdbcluster \
     --query 'DBClusters[*].[DBClusterIdentifier,DBClusterParameterGroup]'
   ```

   このオペレーションによる出力は、次のようになります (JSON 形式)。

   ```
   [
       [
           "mydocdbcluster",
           "myparametergroup"
       ]
   ]
   ```

   クラスターのパラメータグループの名前が `default` (例えば、`default.docdb3.6` など) の場合、続行する前にカスタムのクラスターパラメータグループを用意して、それをクラスターのパラメータグループにする必要があります。詳細については、以下の各トピックを参照してください。

   1. [Amazon DocumentDB クラスターパラメータグループを作成する](cluster_parameter_groups-create.md) − 使用できるカスタムのクラスターパラメータグループがない場合、これを作成します。

   1. [Amazon DocumentDB クラスターの変更](db-cluster-modify.md) - カスタムクラスターパラメータグループを使用するようにクラスターを変更します。

1. **`tls` クラスターパラメータの現在の値を確認します。**

   このクラスターパラメータグループに関する詳細情報を取得するには、次のオプションで [https://awscli.amazonaws.com/v2/documentation/api/latest/reference/docdb/describe-db-cluster-parameters.html](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/docdb/describe-db-cluster-parameters.html) コマンドを実行します。
   + `--db-cluster-parameter-group-name`
   + `--query`

     出力を目的のフィールドのみに制限します: `ParameterName`、`ParameterValue`、`AllowedValues`、および `ApplyType`。

   次の例では、各 *ユーザー入力プレースホルダー* をクラスターの情報に置き換えます。

   ```
   aws docdb describe-db-cluster-parameters \
     --db-cluster-parameter-group-name myparametergroup \
     --query 'Parameters[*].[ParameterName,ParameterValue,AllowedValues,ApplyType]'
   ```

   このオペレーションによる出力は、次のようになります (JSON 形式)。

   ```
   [
       [
           "audit_logs",
           "disabled",
           "enabled,disabled",
           "dynamic"
       ],
       [
           "tls",
           "disabled",
           "disabled,enabled,fips-140-3,tls1.2+,tls1.3+",
           "static"
       ],
       [
           "ttl_monitor",
           "enabled",
           "disabled,enabled",
           "dynamic"
       ]
   ]
   ```

1. **`tls` クラスターパラメータの値を設定します。**

   `tls` の値が必要な値ではない場合、このクラスターパラメータグループの値を変更します。`tls` クラスターパラメータの値を変更するには、次のオプションで [https://awscli.amazonaws.com/v2/documentation/api/latest/reference/docdb/modify-db-cluster-parameter-group.html](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/docdb/modify-db-cluster-parameter-group.html) コマンドを実行します。
   + `--db-cluster-parameter-group-name` — 必須。変更するクラスターパラメータグループの名前。これを `default.*` クラスターパラメータグループにすることはできません。
   + `--parameters` — 必須。変更するクラスターパラメータグループのパラメータ一覧。
     + `ParameterName` — 必須。変更するクラスターパラメータの名前。
     + `ParameterValue` — 必須。このクラスターパラメータの新しい値。クラスターパラメータの `AllowedValues` のいずれかにする必要があります。
       + `enabled` — クラスターは TLS バージョン 1.0 から 1.3 を使用した安全な接続を受け入れます。
       + `disabled` - クラスターは TLS を使用したセキュアな接続を受け入れません。
       + `fips-140-3` - クラスターは、連邦情報処理標準 (FIPS) 出版物 140-3 の要件に従った安全な接続のみを受け付けます。これは、これらのリージョン (ca-central-1、us-west-2、us-east-1、us-east-2、us-gov-east-1、us-gov-west-1) で、Amazon DocumentDB 5.0 (エンジンバージョン 3.0.3727) 以降のクラスターでのみサポートされます。
       + `tls1.2+` — クラスターは TLS バージョン 1.2 以降を使用した安全な接続を受け入れます。これは、Amazon DocumentDB 4.0 (エンジンバージョン 2.0.10980) および Amazon DocumentDB 5.0 (エンジンバージョン 3.0.11051) 以降でのみサポートされています。
       + `tls1.3+` — クラスターは TLS バージョン 1.3 以降を使用した安全な接続を受け入れます。これは、Amazon DocumentDB 4.0 (エンジンバージョン 2.0.10980) および Amazon DocumentDB 5.0 (エンジンバージョン 3.0.11051) 以降でのみサポートされています。
     + `ApplyMethod` - この変更が適用される場合。`tle` のような静的クラスターパラメータでは、この値を `pending-reboot` にする必要があります。
       + `pending-reboot` - インスタンスの再起動後のみ、変更がインスタンスに適用されます。クラスターのすべてのインスタンスでこの変更を適用するには、各クラスターインスタンスを個別に再起動する必要があります。

   次の例では*ユーザー入力プレースホルダー*をユーザー自身の情報で置き換えます。

   次のコードにより `tls` を *無効化* し 、各インスタンスの再起動時に変更が適用されるようにします。

   ```
   aws docdb modify-db-cluster-parameter-group \
     --db-cluster-parameter-group-name myparametergroup \
     --parameters "ParameterName=tls,ParameterValue=disabled,ApplyMethod=pending-reboot"
   ```

   次のコードにより `tls` (バージョン 1.0 から 1.3) を *有効化* し 、各インスタンスの再起動時に変更が適用されるようにします。

   ```
   aws docdb modify-db-cluster-parameter-group \
     --db-cluster-parameter-group-name myparametergroup \
     --parameters "ParameterName=tls,ParameterValue=enabled,ApplyMethod=pending-reboot"
   ```

   次のコードは、`fips-140-3` で TLS を *有効化* し、各インスタンスの再起動時に変更が適用されるようにします。

   ```
   aws docdb modify-db-cluster-parameter-group \
     ‐‐db-cluster-parameter-group-name myparametergroup2 \
     ‐‐parameters "ParameterName=tls,ParameterValue=fips-140-3,ApplyMethod=pending-reboot"
   ```

   このオペレーションによる出力は、次のようになります (JSON 形式)。

   ```
   {
       "DBClusterParameterGroupName": "myparametergroup"
   }
   ```

1. **お客様の Amazon DocumentDB インスタンスを再起動**

   変更がクラスター内のすべてのインスタンスに適用されるように、クラスターの各インスタンスを再起動します。Amazon DocumentDB インスタンスを再起動するには、次のオプションで [https://awscli.amazonaws.com/v2/documentation/api/latest/reference/docdb/reboot-db-instance.html](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/docdb/reboot-db-instance.html) コマンドを実行します。
   + `--db-instance-identifier`

   次のコードは、インスタンス `mydocdbinstance` を再起動します。

   次の例では*ユーザー入力プレースホルダー*をユーザー自身の情報で置き換えます。  
**Example**  

   Linux、macOS、Unix の場合:

   ```
   aws docdb reboot-db-instance \
     --db-instance-identifier mydocdbinstance
   ```

   Windows の場合:

   ```
   aws docdb reboot-db-instance ^
     --db-instance-identifier mydocdbinstance
   ```

   このオペレーションによる出力は、次のようになります (JSON 形式)。

   ```
   {
       "DBInstance": {
           "AutoMinorVersionUpgrade": true,
           "PubliclyAccessible": false,
           "PreferredMaintenanceWindow": "fri:09:32-fri:10:02",
           "PendingModifiedValues": {},
           "DBInstanceStatus": "rebooting",
           "DBSubnetGroup": {
               "Subnets": [
                   {
                       "SubnetStatus": "Active",
                       "SubnetAvailabilityZone": {
                           "Name": "us-east-1a"
                       },
                       "SubnetIdentifier": "subnet-4e26d263"
                   },
                   {
                       "SubnetStatus": "Active",
                       "SubnetAvailabilityZone": {
                           "Name": "us-east-1c"
                       },
                       "SubnetIdentifier": "subnet-afc329f4"
                   },
                   {
                       "SubnetStatus": "Active",
                       "SubnetAvailabilityZone": {
                           "Name": "us-east-1e"
                       },
                       "SubnetIdentifier": "subnet-b3806e8f"
                   },
                   {
                       "SubnetStatus": "Active",
                       "SubnetAvailabilityZone": {
                           "Name": "us-east-1d"
                       },
                       "SubnetIdentifier": "subnet-53ab3636"
                   },
                   {
                       "SubnetStatus": "Active",
                       "SubnetAvailabilityZone": {
                           "Name": "us-east-1b"
                       },
                       "SubnetIdentifier": "subnet-991cb8d0"
                   },
                   {
                       "SubnetStatus": "Active",
                       "SubnetAvailabilityZone": {
                           "Name": "us-east-1f"
                       },
                       "SubnetIdentifier": "subnet-29ab1025"
                   }
               ],
               "SubnetGroupStatus": "Complete",
               "DBSubnetGroupDescription": "default",
               "VpcId": "vpc-91280df6",
               "DBSubnetGroupName": "default"
           },
           "PromotionTier": 2,
           "DBInstanceClass": "db.r5.4xlarge",
           "InstanceCreateTime": "2018-11-05T23:10:49.905Z",
           "PreferredBackupWindow": "00:00-00:30",
           "KmsKeyId": "arn:aws:kms:us-east-1:012345678901:key/0961325d-a50b-44d4-b6a0-a177d5ff730b",
           "StorageEncrypted": true,
           "VpcSecurityGroups": [
               {
                   "Status": "active",
                   "VpcSecurityGroupId": "sg-77186e0d"
               }
           ],
           "EngineVersion": "3.6.0",
           "DbiResourceId": "db-SAMPLERESOURCEID",
           "DBInstanceIdentifier": "mydocdbinstance",
           "Engine": "docdb",
           "AvailabilityZone": "us-east-1a",
           "DBInstanceArn": "arn:aws:rds:us-east-1:012345678901:db:sample-cluster-instance-00",
           "BackupRetentionPeriod": 1,
           "Endpoint": {
               "Address": "mydocdbinstance.corcjozrlsfc.us-east-1.docdb.amazonaws.com",
               "Port": 27017,
               "HostedZoneId": "Z2R2ITUGPM61AM"
           },
           "DBClusterIdentifier": "mydocdbcluster"
       }
   }
   ```

   インスタンスが再起動するまでには数分かかります。インスタンスを使用できるのは、そのステータスが [*available*] である場合のみです。コンソールまたは AWS CLI を使用して、インスタンスのステータスをモニタリングできます。詳細については、「[Amazon DocumentDB インスタンスのステータスのモニタリング](monitoring_docdb-instance_status.md)」を参照してください。

------

# キー管理
<a name="security.encryption.ssl.public-key"></a>

Amazon DocumentDB は、AWS Key Management Service (AWS KMS) を使用して暗号化キーの取得と管理を行います。AWS KMS は、安全で可用性の高いハードウェアとソフトウェアを組み合わせて、クラウド向けに拡張されたキー管理システムを提供します。AWS KMS を使用すると、キーの暗号化を作成し、このキーの使用方法を制御するポリシーを定義できます。 AWS KMS は AWS CloudTrail をサポートするため、キーの使用を監査して、キーが適切に使用されていることを確認できます。

AWS KMS キーは、Amazon DocumentDB およびサポートされている AWS のサービス (Amazon S3 (Amazon Simple Storage Service)、Amazon RDS (Amazon Relational Database Service)、Amazon EBS (Amazon Elastic Block Store)、および Amazon Redshift など) と組み合わせて使用できます。AWS KMS がサポートされているサービスの一覧については、*AWS デベロッパーガイド* の [How AWS KMS Services Use AWS Key Management Service](https://docs.aws.amazon.com/kms/latest/developerguide/service-integration.html) を参照してください。AWS KMS の詳細については、 [[AWS Key Management Service とは？]](https://docs.aws.amazon.com/kms/latest/developerguide/overview.html) を参照