

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

# 加密靜態 Neptune 資源
<a name="encrypt"></a>

 AWS 建議採用Data-at-rest加密。如需詳細資訊，請參閱[Data-at-Rest和Data-in-Transit加密](https://docs.aws.amazon.com/whitepapers/latest/logical-separation/encrypting-data-at-rest-and--in-transit.html)。當您建立新的 Neptune 資料庫叢集或新的 Neptune 全域資料庫時，會在 AWS 主控台中強制執行加密。這可提供多一層的資料保護。它可保護您的資料免於未經授權存取基礎儲存體，並協助滿足data-at-rest加密的合規要求。

若要管理用於加密和解密 Neptune 資源的金鑰，您可以使用 [AWS Key Management Service (AWS KMS)](https://docs.aws.amazon.com/kms/latest/developerguide/). AWS KMS combines 安全、高可用性的硬體和軟體，以提供針對雲端擴展的金鑰管理系統。使用 AWS KMS，您可以建立加密金鑰並定義控制如何使用這些金鑰的政策。 AWS KMS 支援 AWS CloudTrail，因此您可以稽核金鑰使用情況，以確認金鑰是否適當使用。

靜態時，所有相關的日誌、備份和快照都會針對任何加密的 Neptune 資料庫叢集進行加密。Neptune 加密不適用於匯出至 Amazon CloudWatch 的日誌。

## Neptune 資源的加密
<a name="encrypt-enable"></a>

當您建立 Neptune 資料庫叢集或 Neptune 全域資料庫時，您可以提供加密 AWS KMS 金鑰的金鑰識別符。如果您未指定 AWS KMS 金鑰識別符，Neptune 會使用 區域中的預設 Amazon RDS 加密金鑰 (`aws/rds`)。 AWS KMS 會為您 AWS 帳戶中的每個區域建立預設加密金鑰。對於 Neptune 全域叢集，其中的 AWS KMS 金鑰數量將與 區域相同。

建立 Neptune 資源後，您無法變更該資源的加密金鑰。因此，請務必先判斷您的加密金鑰需求，再建立 Neptune 資源。如果需要不同的 AWS KMS 金鑰，您可以使用現有 Neptune 資料庫叢集的快照來建立具有不同 AWS KMS 金鑰的新金鑰 （請參閱 [從資料庫叢集快照還原](backup-restore-restore-snapshot.md))。

您可以使用另一個帳戶的金鑰 Amazon Resource Name (ARN) 來加密 Neptune 資源。如果您使用擁有 AWS KMS 加密金鑰的相同 AWS 帳戶建立 Neptune 資源，則您傳遞的 AWS KMS 金鑰 ID 可以是 AWS KMS 金鑰別名，而不是金鑰的 ARN。

**重要**  
如果 Neptune 無法存取 Neptune 資料庫叢集的加密金鑰 - 例如，當撤銷對金鑰的 Neptune 存取時 - 加密的叢集會進入終端狀態，而且只能從備份還原。強烈建議您一律為加密的 Neptune 資料庫叢集啟用備份，以防止資料庫中的加密資料遺失。

## 啟用加密時所需的金鑰許可
<a name="encrypt-key-permissions"></a>

建立 Neptune 資料庫叢集的 IAM 使用者或角色必須至少具有下列 KMS 金鑰許可：
+ `"kms:Encrypt"`
+ `"kms:Decrypt"`
+ `"kms:GenerateDataKey"`
+ `"kms:ReEncryptTo"`
+ `"kms:GenerateDataKeyWithoutPlaintext"`
+ `"kms:CreateGrant"`
+ `"kms:ReEncryptFrom"`
+ `"kms:DescribeKey"`

以下是包含必要許可的金鑰政策範例 （適用於`us-east-1`區域）：

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

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Id": "key-consolepolicy-3",
  "Statement": [
    {
      "Sid": "Enable Permissions for root principal",
      "Effect": "Allow",
      "Principal": {
        "AWS": "arn:aws:iam::{{123456789012}}:root"
      },
      "Action": "kms:*",
      "Resource": "*"
    },
    {
      "Sid": "Allow use of the key for Neptune",
      "Effect": "Allow",
      "Principal": {
        "AWS": "arn:aws:iam::{{123456789012}}:role/NeptuneFullAccess"
      },
      "Action": [
        "kms:Encrypt",
        "kms:Decrypt",
        "kms:GenerateDataKey",
        "kms:ReEncryptTo",
        "kms:GenerateDataKeyWithoutPlaintext",
        "kms:CreateGrant",
        "kms:ReEncryptFrom",
        "kms:DescribeKey"
      ],
      "Resource": "*",
      "Condition": {
        "StringEquals": {
          "kms:ViaService": "rds.us-east-1.amazonaws.com"
        }
      }
    },
    {
      "Sid": "Deny use of the key for non Neptune",
      "Effect": "Deny",
      "Principal": {
        "AWS": "arn:aws:iam::{{123456789012}}:role/NeptuneFullAccess"
      },
      "Action": [
        "kms:*"
      ],
      "Resource": "*",
      "Condition": {
        "StringNotEquals": {
          "kms:ViaService": "rds.us-east-1.amazonaws.com"
        }
      }
    }
  ]
}
```

------
+ 此政策中的第一個聲明是選用的。它可讓您存取使用者的根主體。
+ 第二個陳述式提供此角色所有必要 AWS KMS APIs的存取權，範圍縮小為 RDS 服務主體。
+ 第三個陳述式會強制此金鑰無法由此角色用於任何其他 AWS 服務，以更加強安全性。

您還可以進一步限制 `createGrant` 許可範圍，方法為新增：

```
"Condition": {
  "Bool": {
    "kms:GrantIsForAWSResource": true
  }
}
```

## Neptune 加密的限制
<a name="encrypt-limitations"></a>

Neptune 加密存在下列限制：
+ 您無法將未加密的 Neptune 資料庫叢集轉換為已加密的叢集。您只能在 Neptune 資料庫叢集建立時為其啟用加密。不過，您可以將未加密的 Neptune 資料庫叢集快照還原至加密的 Neptune 資料庫叢集。若要這樣做，請在從未加密的 Neptune 資料庫叢集快照還原時指定 KMS 加密金鑰。
+ 基於相容性原因，仍然可以透過 CLI 和 AWS SDKs 建立未加密的 Neptune 資料庫叢集。主控台僅允許建立加密的 Neptune 資料庫叢集。
+ 您無法在相同的 Neptune 全域資料庫中混合加密和未加密的 Neptune 資料庫叢集。所有叢集都已加密，或所有叢集都未加密。這是在 Neptune 全域資料庫組態中強制執行的。