View a markdown version of this page

Amazon Neptune 資料平面操作的標籤型存取控制 - Amazon Neptune

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

Amazon Neptune 資料平面操作的標籤型存取控制

標籤型存取控制 (TBAC) 可讓您使用 AWS 資源標籤和 IAM 主體標籤作為 IAM 政策和服務控制政策 (SCPs) 中的條件,以控制對 Amazon Neptune 資料平面操作的存取。使用 TBAC,您可以強制執行只有標籤符合 Neptune 資料庫叢集上標籤的主體才能對該叢集執行neptune-db:*動作,而無需在每個政策中列舉特定叢集的 Amazon Resource Name ARNs)。

TBAC 以 Neptune 現有的安全模型為基礎,並補充以動作為基礎的存取控制資料平面動作。

TBAC 如何符合 Neptune 的安全層

Neptune 透過多個重疊的安全機制來保護您的資料。TBAC 新增屬性型授權層,可與所有授權層搭配使用:

Neptune 安全層以及 TBAC 如何補充它們
Layer Mechanism Scope (範圍)
網路隔離 虛擬私有雲端 (VPC)、安全群組、VPC 端點 (PrivateLink) 控制哪些主機可以到達 Neptune 端點
加密 Transport Layer Security (TLS) 1.3 傳輸中;受 AWS KMS管靜態加密 保護資料機密性
IAM 身分驗證 AWS 對 Neptune 資料端點的簽章版本 4 (SigV4) 簽署請求 驗證發起人
動作型存取控制 neptune-db: 動作 ReadDataViaQuery(WriteDataViaQuery、 等) 控制委託人可執行的操作
條件索引鍵 neptune-db:QueryLanguage、全域內容索引鍵 將內容限制新增至政策
TBAC aws:ResourceTag/${TagKey} 評估依據 aws:PrincipalTag/${TagKey} 根據主體和資源之間的標籤對齊來限制存取
管理標籤型存取 aws:ResourceTag管理平面動作上的 rds:cluster-tag、 等 控制誰可以管理 Neptune 基礎設施

關鍵 TBAC 概念

主體標籤

連接至 IAM 使用者、角色或聯合工作階段主體的標籤。您可以透過 IAM 主控台 AWS CLI或身分提供者 (IdP) 安全聲明標記語言 (SAML)/OpenID Connect (OIDC) 屬性映射來設定這些屬性。

資源標籤

使用 連接至 Neptune 資料庫叢集的標籤AddTagsToResource。這些會傳播至叢集中的所有執行個體,以進行資料平面政策評估。

條件索引鍵變數
  • aws:PrincipalTag/TagKey — 解析為呼叫主體上的標籤值。

  • aws:ResourceTag/TagKey — 解析為目標 Neptune 資源上的標籤值。

支援的政策類型
  • IAM 身分政策 — 連接到使用者、群組或角色。

  • SCPs:套用至 AWS Organizations 組織單位 (OU) 或帳戶層級,以設定許可護欄。

使用 TBAC 的先決條件

您必須先備妥下列項目,才能搭配 Neptune 資料平面操作使用 TBAC:

  1. Neptune 引擎 1.2.0.0 版或更新版本 – 資料平面 TBAC 支援時需要。

  2. 在 Neptune 資料庫叢集上啟用 IAM 身分驗證

  3. 套用至 Neptune 資料庫叢集的標籤 — 政策將評估的資源標籤。

  4. 套用至 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

SCPs 非常適合強制執行 TBAC,因為它們會設定整個組織單位 (OU) 或帳戶的許可界限,而不需要變更個別 IAM 政策。

我們建議採用下列 SCP 策略:

  1. 在標籤不相符neptune-db:*時封鎖的 OU 層級套用以拒絕為基礎的 SCP。

  2. 套用拒絕存取未標記資源的第二個陳述式。

  3. 您的個別帳戶可以保留其特定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 資料庫叢集

使用 AWS 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 主體

使用 AWS CLI 使用與 Neptune 叢集相同的金鑰和值來標記 IAM 角色。對於 IAM 角色:

aws iam tag-role \ --role-name NeptuneAppRole \ --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 分鐘才能傳播到資料平面政策評估。更新作用中叢集上的標籤時,請規劃此延遲。

  • 叢集層級精細程度 — 您可以將標籤套用至叢集層級的 Neptune 資料庫叢集。叢集中的所有執行個體共用相同的政策評估。TBAC 不提供子圖形或頂點/邊緣層級存取控制。

  • 需要 IAM 身分驗證 — TBAC 僅適用於叢集上啟用 IAM 身分驗證時。沒有 IAM 驗證的連線會完全略過這些政策。

  • 標籤不可變性 — 保護您的標記操作。如果委託人可以修改自己的標籤或資源標籤,則可以略過 TBAC 控制項。使用 SCPs 或許可界限來限制 iam:TagRolerds:AddTagsToResourceiam:TagUserrds:RemoveTagsFromResource

  • Null 標籤處理 — 如果主體缺少政策透過 參考的標籤${aws:PrincipalTag/Key},則變數會解析為空字串。設計您的政策來處理此案例 (上述「缺少標籤」拒絕模式會解決資源標籤的問題)。

  • 多個條件索引鍵 — 當同一Condition區塊中出現多個條件索引鍵時,會使用 AND 邏輯對其進行評估。對於 StringNotEquals,拒絕只會在所有指定的條件同時為 true 時觸發。若要拒絕任何單一標籤不相符,請針對每個標籤索引鍵使用個別的政策陳述式 (如上述模式所示)。

與現有 Neptune 安全功能的關係

TBAC 如何補充現有的 Neptune 安全功能
現有功能 它控制的內容 TBAC 如何補充
VPC/安全群組 連接埠 8182 的網路層級存取 TBAC 在網路控制項之上新增身分感知授權
IAM 身分驗證 (SigV4) 驗證來電者身分 TBAC 使用已驗證身分的標籤進行授權決策
動作型存取控制 委託人可執行哪些操作 (read/write/delete/載入) TBAC 會根據標籤對齊,新增主體可以鎖定的叢集
neptune-db:QueryLanguage 條件金鑰 允許哪些查詢語言 (Gremlin、openCypher、SPARQL) 可與相同政策陳述式中的 TBAC 結合
管理標籤型存取 (rds:* 動作) 誰可以管理 Neptune 基礎設施 TBAC 會將相同的標籤型模式延伸至資料平面 (neptune-db:*) 動作
AWS KMS 加密 靜態資料機密性 正交—TBAC 控制授權,而非加密