本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
Amazon Neptune 資料平面操作的標籤型存取控制
標籤型存取控制 (TBAC) 可讓您使用 AWS 資源標籤和 IAM 主體標籤作為 IAM 政策和服務控制政策 (SCPs) 中的條件,以控制對 Amazon Neptune 資料平面操作的存取。使用 TBAC,您可以強制執行只有標籤符合 Neptune 資料庫叢集上標籤的主體才能對該叢集執行neptune-db:*動作,而無需在每個政策中列舉特定叢集的 Amazon Resource Name ARNs)。
TBAC 以 Neptune 現有的安全模型為基礎,並補充以動作為基礎的存取控制資料平面動作。
TBAC 如何符合 Neptune 的安全層
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/— 解析為目標 Neptune 資源上的標籤值。TagKey
-
- 支援的政策類型
-
-
IAM 身分政策 — 連接到使用者、群組或角色。
-
SCPs:套用至 AWS Organizations 組織單位 (OU) 或帳戶層級,以設定許可護欄。
-
使用 TBAC 的先決條件
您必須先備妥下列項目,才能搭配 Neptune 資料平面操作使用 TBAC:
-
Neptune 引擎 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
SCPs 非常適合強制執行 TBAC,因為它們會設定整個組織單位 (OU) 或帳戶的許可界限,而不需要變更個別 IAM 政策。
我們建議採用下列 SCP 策略:
-
在標籤不相符
neptune-db:*時封鎖的 OU 層級套用以拒絕為基礎的 SCP。 -
套用拒絕存取未標記資源的第二個陳述式。
-
您的個別帳戶可以保留其特定
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-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 分鐘才能傳播到資料平面政策評估。更新作用中叢集上的標籤時,請規劃此延遲。
-
叢集層級精細程度 — 您可以將標籤套用至叢集層級的 Neptune 資料庫叢集。叢集中的所有執行個體共用相同的政策評估。TBAC 不提供子圖形或頂點/邊緣層級存取控制。
-
需要 IAM 身分驗證 — TBAC 僅適用於叢集上啟用 IAM 身分驗證時。沒有 IAM 驗證的連線會完全略過這些政策。
-
標籤不可變性 — 保護您的標記操作。如果委託人可以修改自己的標籤或資源標籤,則可以略過 TBAC 控制項。使用 SCPs 或許可界限來限制
iam:TagRole、rds:AddTagsToResource、iam:TagUser和rds:RemoveTagsFromResource。 -
Null 標籤處理 — 如果主體缺少政策透過 參考的標籤
${aws:PrincipalTag/,則變數會解析為空字串。設計您的政策來處理此案例 (上述「缺少標籤」拒絕模式會解決資源標籤的問題)。Key} -
多個條件索引鍵 — 當同一
Condition區塊中出現多個條件索引鍵時,會使用 AND 邏輯對其進行評估。對於StringNotEquals,拒絕只會在所有指定的條件同時為 true 時觸發。若要拒絕任何單一標籤不相符,請針對每個標籤索引鍵使用個別的政策陳述式 (如上述模式所示)。
與現有 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 控制授權,而非加密 |