本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
Tag-based 亚马逊 Neptune 数据平面操作的访问控制
Tag-based 访问控制 (TBAC) 允许您使用 Amazon 资源标签和 IAM 委托人标签作为 IAM 策略和服务控制策略 (SCP) 中的条件来控制对 Amazon Neptune 数据平面操作的访问权限。使用 TBAC,您可以强制只有标签与 Neptune 数据库集群上的标签匹配的委托人才能对该集群执行neptune-db:*操作,而无需在每个策略中枚举特定的集群 Amazon 资源名称 (ARN)。
TBAC 建立在 Neptune 现有的安全模型之上,补充了基于操作的访问控制数据平面操作。
TBAC 如何融入海王星的安全层
Neptune 通过多种重叠的安全机制保护您的数据。TBAC 添加了一个基于属性的授权层,该层与所有授权层并驾齐驱:
| 层 | 机制 | Scope |
|---|---|---|
| 网络隔离 | 虚拟私有云 (VPC)、安全组、VPC 终端节点 (PrivateLink) | 控制哪些主机可以到达 Neptune 端点 |
| 加密 | 传输层安全 (TLS) 1.3 正在传输中; Amazon KMS托管静态加密 | 保护数据机密性 |
| IAM 身份验证 | Amazon 向 Neptune 数据端点发出的签名版本 4 (Sigv4) 签名请求 | 对来电者进行身份验证 |
| Action-based 访问控制 | neptune-db:动作(ReadDataViaQueryWriteDataViaQuery、等) |
控制委托人可以执行的操作 |
| 条件键 | neptune-db:QueryLanguage,全局上下文密钥 |
为策略添加上下文约束 |
| 待定 | aws:ResourceTag/${TagKey}评估依据 aws:PrincipalTag/${TagKey} |
根据主体和资源之间的标签对齐来限制访问权限 |
| 基于标签的管理访问权限 | aws:ResourceTagrds:cluster-tag、等关于管理层面动作 |
控制谁可以管理 Neptune 基础架构 |
TBAC 的关键概念
- 校长标签
-
附加到 IAM 用户、角色或联合会话委托人的标签。您可以通过 IAM 控制台或身份提供商 (IdP) 安全断言标记语言 (SAML) /OpenID Connect (OIDC) 属性映射进行设置。 Amazon CLI
- 资源标签
-
使用附加到 Neptune 数据库集群的标签。
AddTagsToResource它们会传播到集群中的所有实例,以进行数据平面策略评估。 - 条件关键变量
-
-
aws:PrincipalTag/— 解析为调用主体上的标签值。TagKey -
aws:ResourceTag/— 解析为目标 Neptune 资源上的标签值。TagKey
-
- 支持的策略类型
-
-
IAM 身份策略 — 附加到用户、群组或角色。
-
SCP — 应用于 Organizations Amazon 组织单位 (OU) 或账户级别,用于设置权限护栏。
-
使用 TBAC 的先决条件
在将 TBAC 与 Neptune 数据平面操作配合使用之前,必须具备以下条件:
-
Nep@@ tune 引擎版本 1.2.0.0 或更高版本 — 需要支持数据平面 TBAC。
-
在 Neptune 数据库集群上@@ 启用了 IAM 身份验证。
-
应用于 Neptune 数据库集群的标签 — 策略将评估的资源标签。
-
应用于 IAM 委托人的标签 — 将与资源标签进行比较的主体标签。
TBAC 政策模式
以下模式显示了在 Neptune 数据平面操作的 IAM 策略中使用 TBAC 的常用方法。
当委托人和资源标签不匹配时拒绝访问
这是最常见的 TBAC 模式。除非主体的标签与资源的标签匹配,否则它会拒绝所有 Neptune 数据平面操作。您可以将其作为 SCP 应用于组织范围的强制执行,也可以将其作为 IAM 策略应用于定向控制。
{ "Version": "2012-10-17", "Statement": [ { "Sid": "DenyNeptuneProjectMismatch", "Effect": "Deny", "Action": "neptune-db:*", "Resource": "*", "Condition": { "StringNotEquals": { "aws:ResourceTag/Project": "${aws:PrincipalTag/Project}" } } }, { "Sid": "DenyNeptuneDepartmentMismatch", "Effect": "Deny", "Action": "neptune-db:*", "Resource": "*", "Condition": { "StringNotEquals": { "aws:ResourceTag/Department": "${aws:PrincipalTag/Department}" } } } ] }
工作原理:每条语句对单个标签密钥使用单独的StringNotEquals条件。拒绝会针对每个标签单独触发,如果资源的标签与委托人的Project标签不匹配,则无论使用何种Project标签,都将Department拒绝访问。这样可以确保标记为的主体Project=FraudDetection只能访问也被标记的 Neptune 集群Project=FraudDetection,同样。Department
缺少所需资源标签时拒绝访问
此模式可防止访问未正确标记的 Neptune 集群,从而确保所有集群都已注册 TBAC 方案:
{ "Version": "2012-10-17", "Statement": [ { "Sid": "DenyNeptuneMissingProjectTag", "Effect": "Deny", "Action": "neptune-db:*", "Resource": "*", "Condition": { "Null": { "aws:ResourceTag/Project": "true" } } }, { "Sid": "DenyNeptuneMissingDepartmentTag", "Effect": "Deny", "Action": "neptune-db:*", "Resource": "*", "Condition": { "Null": { "aws:ResourceTag/Department": "true" } } } ] }
工作原理:当资源上不存在指定的标签键时,Null条件的计算结果为 true。这会迫使所有 Neptune 集群携带所需的分类标签,然后任何主体才能访问它们。
将 TBAC 与基于操作的访问控制相结合
TBAC 可以与特定neptune-db:操作相结合,以创建细粒度的标签感知策略:
{ "Version": "2012-10-17", "Statement": [ { "Sid": "AllowReadOnlyForMatchingTags", "Effect": "Allow", "Action": [ "neptune-db:ReadDataViaQuery", "neptune-db:GetQueryStatus", "neptune-db:GetEngineStatus" ], "Resource": "arn:aws:neptune-db:*:*:*/*", "Condition": { "StringEquals": { "aws:ResourceTag/Project": "${aws:PrincipalTag/Project}" } } } ] }
使用 TBAC 查询语言限制
将 TBAC 与neptune-db:QueryLanguage条件键结合使用,以限制委托人可以访问哪些集群以及他们可以使用的查询语言:
{ "Version": "2012-10-17", "Statement": [ { "Sid": "AllowOpenCypherOnlyForMatchingProject", "Effect": "Allow", "Action": [ "neptune-db:ReadDataViaQuery", "neptune-db:WriteDataViaQuery" ], "Resource": "arn:aws:neptune-db:*:*:*/*", "Condition": { "StringEquals": { "aws:ResourceTag/Project": "${aws:PrincipalTag/Project}", "neptune-db:QueryLanguage": "OpenCypher" } } } ] }
将 TBAC 与服务控制策略配合使用
SCP 非常适合实施 TBAC,因为它们无需更改单个 IAM 策略即可跨整个组织单位 (OU) 或账户设置权限边界。
我们建议采用以下 SCP 策略:
-
在 OU 级别应用一个 Deny-based SCP,
neptune-db:*当标签不匹配时会屏蔽。 -
应用第二条语句拒绝访问未标记的资源。
-
您的个人账户可以保留针对特定
neptune-db:操作的 “允许” 政策,SCP 充当护栏。
{ "Version": "2012-10-17", "Statement": [ { "Sid": "DenyNeptuneProjectMismatch", "Effect": "Deny", "Action": "neptune-db:*", "Resource": "*", "Condition": { "StringNotEquals": { "aws:ResourceTag/Project": "${aws:PrincipalTag/Project}" } } }, { "Sid": "DenyNeptuneDepartmentMismatch", "Effect": "Deny", "Action": "neptune-db:*", "Resource": "*", "Condition": { "StringNotEquals": { "aws:ResourceTag/Department": "${aws:PrincipalTag/Department}" } } }, { "Sid": "DenyNeptuneMissingProjectTag", "Effect": "Deny", "Action": "neptune-db:*", "Resource": "*", "Condition": { "Null": { "aws:ResourceTag/Project": "true" } } }, { "Sid": "DenyNeptuneMissingDepartmentTag", "Effect": "Deny", "Action": "neptune-db:*", "Resource": "*", "Condition": { "Null": { "aws:ResourceTag/Department": "true" } } } ] }
为 Neptune 实现 TBAC
第 1 步:定义标签分类法
选择代表您的组织界限的标签密钥。常见模式:
| 标签键 | 用途 | 示例值 |
|---|---|---|
Project |
应用程序或工作负载标识符 | FraudDetection, RecommendationEngine |
Department |
业务部门或成本中心 | Engineering, Finance, Analytics |
Environment |
部署阶段 | production, staging, development |
Team |
所属球队 | graph-platform, data-science |
第 2 步:标记您的 Neptune 数据库集群
使用 Amazon CLI 向您的 Neptune 数据库集群添加所需的分类标签:
aws neptune add-tags-to-resource \ --resource-name arn:aws:rds:us-east-1:123456789012:cluster:my-neptune-cluster\ --tags Key=Project,Value=FraudDetection Key=Department,Value=Engineering
第 3 步:标记您的 IAM 委托人
使用使用与您的 Neptune 集群相同的密钥和值来标记 IAM 角色。 Amazon CLI 对于 IAM 角色:
aws iam tag-role \ --role-nameNeptuneAppRole\ --tags Key=Project,Value=FraudDetection Key=Department,Value=Engineering
对于联合用户,请使用身份提供商提供的aws:PrincipalTag属性通过 SAML/OIDC 会话标签传递标签。
步骤 4:部署 TBAC 策略
作为 SCP 附加以在组织范围内强制执行,或作为 IAM 策略进行定向控制。
第 5 步:保护标签完整性
限制谁可以修改 Neptune 资源和 IAM 委托人的标签:
{ "Version": "2012-10-17", "Statement": [ { "Sid": "DenyTagModification", "Effect": "Deny", "Action": [ "rds:AddTagsToResource", "rds:RemoveTagsFromResource" ], "Resource": "*", "Condition": { "ForAnyValue:StringEquals": { "aws:TagKeys": ["Project", "Department"] } } } ] }
待定 TBAC 的重要注意事项
-
传播延迟 — 对 IAM 策略的更改最多需要 10 分钟才能应用于 Neptune 资源。对集群标签的更改(添加、修改或删除标签)大约需要 5 分钟才能传播到数据平面策略评估中。在更新活动集群上的标签时,请为这种延迟做好准备。
-
Cluster-level 粒度 — 您可以在集群级别将标签应用于 Neptune 数据库集群。集群中的所有实例共享相同的策略评估。TBAC 不提供子图或 vertex/edge级别访问控制。
-
需要 IAM 身份验证 — TBAC 仅在集群上启用 IAM 身份验证时适用。没有 IAM 身份验证的连接会完全绕过这些策略。
-
标签不可变性-保护您的标签操作。如果委托人可以修改自己的标签或资源标签,他们就可以绕过 TBAC 控制。使用 SCP 或权限边界来限制
iam:TagRole、iam:TagUserrds:AddTagsToResource、和。rds:RemoveTagsFromResource -
空标签处理-如果委托人缺少策略引用的标签
${aws:PrincipalTag/,则该变量将解析为空字符串。设计您的策略来处理这种情况(上面的 “缺失标签” 拒绝模式解决了资源标签的问题)。Key} -
多个条件键-当多个条件键出现在同一个
Condition块中时,将使用 AND 逻辑对其进行评估。对于StringNotEquals,只有当所有指定条件同时为真时,才会触发 “拒绝”。要拒绝任何单个标签不匹配,请对每个标签密钥使用单独的策略声明(如上面的模式所示)。
与现有 Neptune 安全功能的关系
| 现有功能 | 它控制什么 | TBAC 如何补充它 |
|---|---|---|
| VPC /安全组 | Network-level 访问端口 8182 | TBAC 在网络控制的基础上添加了身份感知授权 |
| IAM 身份验证 (sigv4) | 验证来电者身份 | TBAC 使用经过身份验证的身份的标签进行授权决策 |
| Action-based 访问控制 | 委托人可以执行哪些操作 (read/write/delete/load) | TBAC 根据标签对齐方式添加主体可以瞄准哪些集群 |
neptune-db:QueryLanguage 条件键 |
允许使用哪些查询语言(Gremlin、OpenCypher、SPARQL) | 可以在同一份政策声明中与 TBAC 合并 |
基于标签的管理访问权限(rds:*操作) |
谁能管理 Neptune 基础架构 | TBAC 将相同的基于标签的模式扩展到数据平面 () 操作 neptune-db:* |
| Amazon KMS 加密 | 静态数据机密性 | 正交 — TBAC 控制授权,而不是加密 |