

本文属于机器翻译版本。若本译文内容与英语原文存在差异，则一律以英文原文为准。

# 安全支柱
<a name="security-pillar"></a>

云安全 AWS 是重中之重。作为 AWS 客户，您可以受益于专为满足大多数安全敏感型组织的要求而构建的数据中心和网络架构。

安全是双方共同承担 AWS 的责任。[责任共担模型](https://aws.amazon.com/compliance/shared-responsibility-model/)将其描述为云的安全性和云中的安全性：
+ **云安全** — AWS 负责保护在云 AWS 服务 中运行的基础架构 AWS Cloud。 AWS 还为您提供可以安全使用的服务。作为[AWS 合规计划](https://aws.amazon.com/compliance/programs/)的一部分，第三方审计师定期测试和验证 AWS 安全的有效性。要了解适用于 Amazon Neptune 的合规性计划，请参阅[合规性计划范围内的AWS 服务](https://aws.amazon.com/compliance/services-in-scope/)。
+ **云端安全** — 您的责任由您 AWS 服务 使用的内容决定。您还需要对其他因素负责，包括您的数据的敏感性、您公司的要求以及适用的法律法规。有关数据隐私的更多信息，请参阅[数据隐私常见问题](https://aws.amazon.com/compliance/data-privacy-faq)。有关欧洲数据保护的信息，请参阅 [AWS Shared Responsibility Model and GDPR](https://aws.amazon.com/blogs/security/the-aws-shared-responsibility-model-and-gdpr/) 博客文章。

[安全支柱](https://docs.aws.amazon.com/wellarchitected/latest/framework/security.html)可帮助您了解在使用 Neptune 时如何应用分担责任模型。以下主题说明如何配置 Neptune 以实现您的安全性和合规性目标。您还将学习如何使用其他 AWS 服务 方法来监控和保护您的 Neptune 资源。

安全支柱包括以下关键重点领域：
+ 数据安全性
+ 网络安全
+ 身份验证和授权

## 实现数据安全
<a name="data-security"></a>

数据泄露和违规行为会使您的客户处于危险之中，并可能对您的公司造成严重的负面影响。以下最佳实践有助于保护您的客户数据免遭无意和恶意泄露：
+ 集群名称、标签、参数组、 AWS Identity and Access Management (IAM) 角色和其他元数据不应包含机密或敏感信息，因为这些数据可能会出现在账单或诊断日志中。
+ URIs 或者指向作为数据存储在 Neptune 中的外部服务器的链接不应包含用于验证请求的凭据信息。
+ Neptune 加密的实例通过防止对基础存储进行未经授权的访问来帮助保护您的数据，提供了额外的一层数据保护。您可以使用 Neptune 加密来增强部署在云中的应用程序的数据保护。您还可以使用 Neptune 加密来满足静态数据的合规性要求。

  要为新的 Neptune 数据库实例启用加密，请在 Neptune 控制台的 “**启用加密**” 部分中选择 “**是**”（默认选中），或者在中设置属性。[AWS::Neptune::DBCluster::StorageEncrypted](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-neptune-dbcluster.html#cfn-neptune-dbcluster-storageencrypted) CloudFormation如果启用了加密，Neptune 将默认使用 [Amazon Relational Database Service（Amazon RDS）AWS 托管式密钥](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/Overview.Encryption.Keys.html)，或者您可以创建[客户自主管理型密钥](https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#customer-cmk)。有关创建 Neptune 数据库实例的信息，请参阅[创建新的 Neptune 数据库集群](https://docs.aws.amazon.com/neptune/latest/userguide/get-started-create-cluster.html)。有关更多详细信息，请参阅[静态加密 Neptune 资源](https://docs.aws.amazon.com/neptune/latest/userguide/encrypt.html)。您的自动快照和手动快照使用的加密方式与您为 Neptune 集群选择的加密方式相同。
+ 使用 SPARQL 和 OpenCypher 语言时，练习正确的输入验证和参数化技术，以防止 SQL 注入及其他形式的攻击。避免构造使用字符串连接和用户提供的输入的查询。使用参数化查询或预准备语句将输入参数安全地传递到图形数据库。有关更多信息，请参阅 [openCypher 参数化查询示例](https://docs.aws.amazon.com/neptune/latest/userguide/opencypher-parameterized-queries.html)和 [SPARQL 注入防御](https://owasp.org/www-pdf-archive/Onofri-NapolitanoOWASPDayItaly2012.pdf)。
+ 对于 Gremlin 语言，请使用 [Gremlin 语言变体](https://tinkerpop.apache.org/docs/3.4.8/tutorials/gremlin-language-variants/#:~:text=A%20Gremlin%20language%20variant%20is,within%20their%20native%20programming%20language.)，而不是直接传递基于字符串的 Gremlin 脚本，以避免潜在的注入问题。

## 保护网络安全
<a name="network-security"></a>

只能 AWS上在虚拟私有云（VPC）中创建 Amazon Neptune 数据库集群。在 Neptune 1.4.6.0 之前，Neptune 数据库集群的终端节点只能在该 VPC 内访问。[从 Neptune 1.4.6.0 及更高版本开始，可以将 Neptune 实例配置为可通过互联网公开访问。](https://docs.aws.amazon.com/neptune/latest/userguide/neptune-public-endpoints.html)最佳做法是仅在非生产环境中使用此功能，以简化开发人员对 Neptune 的访问（尽管始终需要启用 IAM 身份验证才能实现公共可访问性）。如果您启用了公共可访问性，请考虑将数据库端口的入站安全组规则设置为仅限已知的 IP 地址流量。在生产环境或包含敏感数据的集群中，通过不允许公众访问和限制对 Neptune 数据库集群所在的 VPC 的访问来保护您的 Neptune 数据。有关更多信息，请参阅[连接到您的 Amazon Neptune 图形](https://docs.aws.amazon.com/neptune/latest/userguide/get-started-connecting.html)。

为了保护传输中数据，Neptune [使用安全协议和密码](https://docs.aws.amazon.com/neptune/latest/userguide/security-ssl.html)，通过 HTTPS 强制执行与任何实例或集群端点的 SSL 连接。Neptune 为 Neptune 数据库实例提供 SSL 证书。Neptune SSL 证书仅支持集群端点、读取器端点和实例端点主机名。

如果您使用的是负载平衡器或代理服务器（例如 [HAProxy](https://www.haproxy.org/)），则必须使用 SSL 终止并在代理服务器上拥有自己的 SSL 证书。SSL 传递不起作用，因为提供的 SSL 证书与代理服务器主机名不匹配。有关使用 SSL 连接到 Neptune 端点的更多信息，请参阅[使用 HTTP REST 端点连接到 Neptune 数据库实例](https://docs.aws.amazon.com/neptune/latest/userguide/access-graph-sparql-http-rest.html)。

## 实现身份验证和授权
<a name="authentication-authorization"></a>

要控制谁可以对 Neptune 数据库集群和数据库实例执行 Neptune 管理****操作，请[启用 IAM 数据库身份验证并使用 IAM](https://docs.aws.amazon.com/neptune/latest/userguide/iam-auth-enable.html) 证书。使用 IAM 凭证连接到 AWS 时，您的 IAM 角色必须具有授予执行 Neptune 管理操作所需的权限的 IAM 策略。请确保遵循[最低权限原则](https://docs.aws.amazon.com/IAM/latest/UserGuide/best-practices.html#grant-least-privilege)，仅授予完成任务所需的权限。有关更多信息，请参阅[使用不同类型的 IAM 策略控制对 Neptune 的访问权限](https://docs.aws.amazon.com/neptune/latest/userguide/security-iam-access-manage.html#iam-auth-policy)和[使用临时凭证进行 IAM 身份验证](https://docs.aws.amazon.com/neptune/latest/userguide/iam-auth-temporary-credentials.html)。

要控制谁可以连接到 Neptune 集群并查询数据，您可以使用 IAM 对 Neptune 数据库实例或数据库集群进行身份验证。如果您在 Neptune 数据库集群中启用 IAM 身份验证，则必须先对访问该数据库集群的任何人进行身份验证。有关启用 IAM 身份验证的步骤的更多信息，请参阅[在 Neptune 中启用 IAM 数据库身份验证](https://docs.aws.amazon.com/neptune/latest/userguide/iam-auth-enable.html)。

启用 IAM 数据库身份验证后，每个请求都必须使用 AWS 签名版本 4 进行签名。要了解如何向启用了 IAM 身份验证的所有 Neptune 端点发送已签名的请求，请参阅[使用 AWS 签名版本 4 进行连接和签名](https://docs.aws.amazon.com/neptune/latest/userguide/iam-auth-connecting.html)。许多库和工具（例如 [awscurl](https://github.com/okigan/awscurl)）已支持 AWS 签名版本 4。

 为了与其他人互动 AWS 服务，Amazon Neptune 使用 IAM [服务相关](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_terms-and-concepts.html#iam-term-service-linked-role)角色。服务相关角色是一种独特类型的 IAM 角色，它与 Neptune 直接相关。服务相关角色由 Neptune 预定义，并包含服务代表您调用其他 AWS 服务 所需的所有权限。有关更多信息，请参阅[为 Neptune 使用服务相关角色](https://docs.aws.amazon.com/neptune/latest/userguide/security-iam-service-linked-roles.html)。