

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

# 使用 IAM 策略管理对 Amazon Neptune 数据库的访问
<a name="security-iam-access-manage"></a>

[IAM policy](https://docs.aws.amazon.com/kms/latest/developerguide/iam-policies.html) 是定义操作和资源使用权限的 JSON 对象。

您可以 AWS 通过创建策略并将其附加到 AWS 身份或资源来控制中的访问权限。策略定义了与身份或资源关联时的权限。 AWS 在委托人提出请求时评估这些政策。大多数策略都以 JSON 文档的 AWS 形式存储在中。有关 JSON 策略文档的更多信息，请参阅*《IAM 用户指南》*中的 [JSON 策略概述](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies.html#access_policies-json)。

管理员使用策略，通过定义哪个**主体**可以在什么**条件**下对哪些**资源**执行哪些**操作**来指定谁有权访问什么。

默认情况下，用户和角色没有权限。IAM 管理员创建 IAM 策略并将其添加到角色中，然后用户可以担任这些角色。IAM 策略定义权限，与执行操作所用的方法无关。

## 基于身份的策略
<a name="security_iam_access-manage-id-based-policies"></a>

基于身份的策略是您附加到身份（用户、组或角色）的 JSON 权限策略文档。这些策略控制身份可以执行什么操作、对哪些资源执行以及在什么条件下执行。要了解如何创建基于身份的策略，请参阅《IAM 用户指南》**中的[使用客户管理型策略定义自定义 IAM 权限](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_create.html)。

基于身份的策略可以是*内联策略*（直接嵌入到单个身份中）或*托管策略*（附加到多个身份的独立策略）。要了解如何在托管策略和内联策略之间进行选择，请参阅*《IAM 用户指南》*中的[在托管策略与内联策略之间进行选择](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies-choosing-managed-or-inline.html)。

## 对组织使用服务控制策略 (SCP) AWS
<a name="security_iam_access-manage-scp"></a>

服务控制策略 (SCPs) 是 JSON 策略，用于指定中组织或组织单位 (OU) 的最大权限[AWS Organizations](https://aws.amazon.com/organizations/)。 AWS Organizations 是一项用于对您的企业拥有的多个 AWS 账户进行分组和集中管理的服务。如果您启用组织中的所有功能，则可以将服务控制策略 (SCPs) 应用于您的任何或所有帐户。SCP 限制成员账户中实体的权限，包括每个 AWS 账户的根用户。有关 Organizations 和的更多信息 SCPs，[请参阅《 AWS Organizations 用户指南》中的 SCPs 工作](https://docs.aws.amazon.com/organizations/latest/userguide/orgs_manage_policies_about-scps.html)原理。

在 AWS 组织内的 AWS 账户中部署 Amazon Neptune 的客户可以利用 SCPs 控制哪些账户可以使用 Neptune。为确保在成员账户内访问 Neptune，请务必：
+  允许访问 `rds:*` 和 `neptune-db:*`，以便执行 Neptune 数据库操作。请参阅[为何需要 Amazon RDS 权限和资源才能使用 Neptune 数据库？](https://aws.amazon.com/neptune/faqs/)，详细了解 Neptune 数据库为何需要 Amazon RDS 权限。
+  允许访问 `neptune-graph:*`，以便执行 Neptune Analytics 操作。

## 使用 Amazon Neptune 控制台所需的权限
<a name="security-iam-access-manage-console"></a>

对于要使用 Amazon Neptune 控制台的用户，用户必须拥有一组最低权限。这些权限允许用户描述其 AWS 账户的 Neptune 资源并提供其它相关信息（包括 Amazon EC2 安全和网络信息）。

如果创建比必需的最低权限更为严格的 IAM 策略，对于附加了该 IAM 策略的用户， 控制台将无法按预期正常运行。要确保这些用户仍可使用 Neptune 控制台，同时向用户附加 `NeptuneReadOnlyAccess` 托管式策略，请参阅[使用 AWS 托管策略访问亚马逊 Neptune 数据库](security-iam-access-managed-policies.md)。

对于仅调用 AWS CLI 或 Amazon Neptune API 的用户，您无需为其设置最低控制台权限。

## 将 IAM policy 附加到 IAM 用户
<a name="iam-auth-policy-attaching"></a>

要应用托管式策略或自定义策略，您需要将其附加到 IAM 用户。有关此主题的教程，请参阅《IAM 用户指南》**中的[创建和附加您的第一个客户管理型策略](https://docs.aws.amazon.com/IAM/latest/UserGuide/tutorial_managed-policies.html)。

在演练此教程时，您可以使用此部分中显示的策略示例之一作为起点并根据您的需求进行定制。在教程结束时，您将有一个 IAM 用户，该用户具有可使用 `neptune-db:*` 操作的附加策略。

**重要**  
对 IAM policy 的更改将需要长达 10 分钟才能应用于指定的 Neptune 资源。
应用于 Neptune 数据库集群的 IAM policy 将应用于集群中的所有实例。

## 使用不同类型的 IAM policy 控制对 Neptune 的访问权限
<a name="iam-auth-policy"></a>

要提供对 Neptune 管理操作或 Neptune 数据库集群中数据的访问权限，您需要向 IAM 用户或角色附加策略。有关如何将 IAM policy 附加到用户的信息，请参阅[将 IAM policy 附加到 IAM 用户](#iam-auth-policy-attaching)。有关将策略附加到角色的信息，请参阅《IAM 用户指南》**中的[添加和删除 IAM policy](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_manage-attach-detach.html)。

要获得对 Neptune 的常规访问权限，您可以使用 Neptune 的[托管式策略](security-iam-access-managed-policies.md)之一。要获得更受限的访问权限，您可以使用 Neptune 支持的[管理操作](neptune-iam-admin-actions.md)和[资源](iam-admin-resources.md)创建自己的自定义策略。

在自定义 IAM policy 中，您可以使用两种不同的策略语句来控制 Neptune 数据库集群的不同访问模式：
+ [管理策略声明](iam-admin-policies.md)-管理策略声明提供对用于创建、配置[和管理数据库集群及其实例 APIs的 Neptune](api.md) 管理的访问权限。

  由于 Neptune 与 Amazon RDS 共享功能，因此 Neptune 策略中的管理操作、资源和条件键在设计上使用 `rds:` 前缀。
+ [数据访问策略语句](iam-data-access-policies.md) – 数据访问策略语句使用[数据访问操作](iam-dp-actions.md)、[资源](iam-data-resources.md)和[条件键](iam-data-condition-keys.md#iam-neptune-condition-keys)来控制对数据库集群包含的数据的访问。

  Neptune 数据访问操作、资源和条件键使用 `neptune-db:` 前缀。

## 在 Amazon Neptune 中使用 IAM 条件上下文键
<a name="iam-using-condition-keys"></a>

您可以在 IAM policy 语句中指定用于控制 Neptune 访问权限的条件。仅当条件为 true 时，策略语句才有效。

例如，您可能希望策略语句仅在特定日期之后生效，或者仅在请求中存在特定值时才允许访问。

要表达条件，请在策略语句的 [https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_elements_condition.html](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_elements_condition.html) 元素中使用预定义的条件键，以及 [IAM 条件策略运算符](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_elements_condition_operators.html)（如等于或小于）。

如果您在一个语句中指定多个 `Condition` 元素，或在单个 `Condition` 元素中指定多个键，则 AWS 使用逻辑 `AND` 运算评估它们。如果您为单个条件键指定多个值，则使用逻辑`OR`运算来 AWS 评估条件。在授予语句的权限之前必须满足所有的条件。

 在指定条件时，您也可以使用占位符变量。例如，只有在使用 IAM 用户名标记 IAM 用户时，您才能为其授予访问资源的权限。有关更多信息，请参阅《IAM 用户指南》**中的 [IAM policy 元素：变量和标签](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_variables.html)。

条件键的数据类型确定您可以使用哪些条件运算符以将请求中的值与策略语句中的值进行比较。如果您使用的条件运算符与该数据类型不兼容，则匹配始终失败，并且策略语句从不会适用。

Neptune 对于管理策略语句和数据访问策略语句支持不同的条件键集合：
+ [管理策略语句的条件键](iam-admin-condition-keys.md)
+ [数据访问策略语句的条件键](iam-data-condition-keys.md#iam-neptune-condition-keys)

## Amazon Neptune 中对 IAM policy 和访问控制特征的支持
<a name="neptune-iam-policy-support"></a>

下表显示了 Neptune 对于管理策略语句和数据访问策略语句支持的 IAM 特征：


**您可以与 Neptune 结合使用的 IAM 特征**  

| IAM 功能 | 管理 | 数据访问 | 
| --- | --- | --- | 
| [基于身份的策略](#security_iam_access-manage-id-based-policies) | 支持 | 是 | 
| [基于资源的策略](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_identity-vs-resource.html) | 否 | 否 | 
| [策略操作](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_elements_action.html) | 支持 | 是 | 
| [策略资源](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_elements_resource.html) | 支持 | 是 | 
| [全局条件键](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html) | 是 | （子集） | 
| [基于标签的条件键](iam-admin-condition-keys.md#iam-rds-tag-based-condition-keys) | 是 | 否 | 
| [访问控制列表 (ACLs)](https://docs.aws.amazon.com/AmazonS3/latest/userguide/acls.html) | 否 | 否 | 
| [服务控制策略 (SCPs)](#security_iam_access-manage-scp) | 支持 | 是 | 
| [服务相关角色](security-iam-service-linked-roles.md) | 是 | 否 | 

## IAM 策略限制
<a name="iam-policy-limits"></a>

对 IAM policy 的更改将需要长达 10 分钟才能应用于指定的 Neptune 资源。

应用于 Neptune 数据库集群的 IAM policy 将应用于集群中的所有实例。

Neptune 目前不支持数据面板级别的跨账户访问控制。只有在批量加载和使用角色链时才支持跨账户访问控制。有关更多信息，请参阅[批量加载教程](https://docs.aws.amazon.com//neptune/latest/userguide/bulk-load-tutorial-chain-roles.html#bulk-load-tutorial-chain-cross-account)。