您可以根據範圍屬性,透過 Memory Bank 控制記憶和記憶修訂版本資源的存取權。您可以使用 IAM 條件定義精細的存取控管機制,例如根據一般運算語言中定義的條件,限制特定使用者或群組的存取權。
這份文件說明如何為專案中的回憶集和修訂版本建立及套用條件存取權政策。
如要瞭解權限總覽資訊,請參閱「查看必要角色」。
總覽
IAM 條件可讓您僅在符合指定條件時,授予記憶體和記憶體修訂版本資源的存取權。您可以根據記憶體資源中的 scope 欄位,使用 API 屬性 "aiplatform.googleapis.com/memoryScope" 和以一般運算式語言編寫的運算式,控制記憶體的存取權。範圍是任意字典,可在建立或生成記憶時提供 (例如 {'user_id': '123'}),方便您整理記憶所屬的群組。
這些有條件的 Identity and Access Management 政策是在專案層級建立,適用於專案中的所有記憶體。您可以將 IAM 條件套用至所有類型的主體,包括專案使用者和服務帳戶。
IAM 條件可同時授予多個相關 Memory Bank 資源身分與存取權管理 (IAM) 權限,包括尚未建立的資源。您可以限制記憶和修訂版本的存取權,讓使用者只能存取自己的資訊,或讓開發人員只能查看特定 Memory Bank 資源,不必取得特殊權限。
事前準備
如要為記憶體和記憶體修訂版本設定條件式 IAM 政策,請按照下列步驟操作:
- 檢閱 IAM 條件:請先參閱 IAM 條件總覽。
- 判斷必要角色:找出適合您用途的專屬 Memory Bank IAM 角色,確保遵循最小權限原則。
-
找出受影響的主體:找出貴機構中應獲得哪些權限的使用者。舉例來說,請看以下範例:
- 開發人員是否應能查看所有回憶集錦。
- 專案管理員是否應能查看所有回憶集。
- 特定代理程式身分是否只能存取特定記憶體。
-
授予 IAM 角色:請確認您具備必要角色,其中包含執行本文件所述工作所需的權限。
如要取得將 IAM 條件套用至 Agent Platform Memory Bank 資源所需的權限,請要求管理員授予您下列 IAM 角色:
- 專案: 專案 IAM 管理員 (`roles/resourcemanager.projectIamAdmin`)
如要進一步瞭解如何授予角色,請參閱「管理專案、資料夾和組織的存取權」。
這些預先定義的角色具備必要的權限,可對 Agent Platform Memory Bank 資源套用 IAM 條件。如要查看確切的必要權限,請展開「Required permissions」(必要權限) 部分:
如果您打算在整個機構中使用 IAM 條件,也需要管理機構政策的權限。所需權限
如要將 IAM 條件套用至 Agent Platform Memory Bank 資源,您必須具備下列權限:
- 在專案層級設定有條件的 IAM 存取權: `resourcemanager.projects.setIamPolicy`
為回憶集建立條件式存取權
如要授予記憶體的條件式存取權,請在專案層級的 IAM 政策繫結中新增條件。條件會使用 api.getAttribute('aiplatform.googleapis.com/memoryScope', {}) 函式檢查記憶體資源的範圍對應。建立或生成記憶時,您可以定義範圍。
如需建立含條件 IAM 政策的詳細指南,請參閱「允許政策中的條件」。
如要將單一角色授予主體,請按照下列步驟操作:
控制台
前往 Cloud de Confiance 控制台的「IAM」(身分與存取權管理) 頁面。
選取專案。
選取要授予角色的主體:
如要將角色授予資源上已有其他角色的主體,請找出包含該主體的列,依序點選該列的 「Edit principal」(編輯主體) 和 「Add another role」(新增其他角色)。
如要將角色授予服務代理程式,請選取「 包含 S3NS提供的角色授予項目」核取方塊,查看其 電子郵件地址。
如要將角色授予資源上還沒有任何角色的主體,請點選 「Grant Access」(授予存取權),然後輸入主體 ID,例如
//iam.googleapis.com/locations/global/workforcePools/my-pool/subject/my-user@example.com或//iam.googleapis.com/locations/global/workforcePools/example-pool/group/example-group@example.com。
從下拉式清單中選取要授予的角色。為遵循安全性最佳做法,請選擇僅含主體所需權限的角色。您可以選擇其中一個專屬的 Memory Bank IAM 角色。
使用
aiplatform.googleapis.com/memoryScope做為 API 屬性,為角色新增條件。如需可能的條件陳述式,請參閱下方的範例。按一下 [儲存]。主體就會取得指定資源的角色。
gcloud
-
在 Cloud de Confiance 控制台中啟用 Cloud Shell。
Cloud de Confiance 控制台底部會開啟 Cloud Shell 工作階段,並顯示指令列提示。Cloud Shell 是已安裝 Google Cloud CLI 的殼層環境,並已設定適用於您目前專案的值。工作階段可能要幾秒鐘的時間才能初始化。
-
add-iam-policy-binding指令可讓您快速將角色授予主體。使用下列任何指令資料之前,請先替換以下項目:
-
PROJECT_ID:您的 Cloud de Confiance 專案 ID。專案 ID 為英數組合,例如my-project。 -
PRINCIPAL:主體或成員的 ID,通常採用以下格式:PRINCIPAL_TYPE:ID。 例如principal://iam.googleapis.com/locations/global/workforcePools/my-pool/subject/my-user@example.com或principalSet://iam.googleapis.com/locations/global/workforcePools/example-pool/group/example-group@example.com。如需PRINCIPAL可擁有的值完整清單,請參閱「主體 ID」。 -
ROLE_NAME:要撤銷的角色名稱。請使用下列其中一種格式:- 預先定義的角色:
roles/aiplatform.IDENTIFIER - 專案層級的自訂角色:
projects/PROJECT_ID/roles/IDENTIFIER
從下拉式清單中選取要授予的角色。為遵循安全性最佳做法,請選擇僅含主體所需權限的角色。您可以選擇其中一個專屬的 Memory Bank IAM 角色。
- 預先定義的角色:
-
CONDITION:使用aiplatform.googleapis.com/memoryScope做為 API 屬性,為角色新增條件。請參閱下方範例,瞭解可能的條件陳述式。
執行下列指令:
Linux、macOS 或 Cloud Shell
gcloud projects add-iam-policy-binding PROJECT_ID \ --member=PRINCIPAL --role=ROLE_NAME \ --condition=CONDITION
Windows (PowerShell)
gcloud projects add-iam-policy-binding PROJECT_ID ` --member=PRINCIPAL --role=ROLE_NAME ` --condition=CONDITION
Windows (cmd.exe)
gcloud projects add-iam-policy-binding PROJECT_ID ^ --member=PRINCIPAL --role=ROLE_NAME ^ --condition=CONDITION
回應會包含更新後的 IAM 政策。
-
Terraform
如要瞭解如何套用或移除 Terraform 設定,請參閱「基本 Terraform 指令」。詳情請參閱 Terraform 供應商參考文件。
如果您使用 Terraform 設定 IAM 政策,可以在 google_project_iam_member 資源中加入條件,限制成員存取回憶集錦。
resource "google_project_iam_member" "example" { project = "PROJECT_ID" role = "ROLE" member = "MEMBER" condition { title = "Memory Access Condition" description = "IAM condition for Memory Bank" expression = "CONDITION" } }
請替換下列變數:
範圍層級權限的最佳做法
為 Memory Bank 建立條件時,請遵循下列最佳做法:
使用專屬的 Memory Bank 角色: Memory Bank IAM 條件僅適用於記憶內容和記憶內容修訂版本適用的角色。您可以運用
aiplatform.googleapis.com/memoryViewer、aiplatform.googleapis.com/memoryEditor和aiplatform.googleapis.com/memoryUser等專門角色,避免授予過於寬鬆的存取權。詳情請參閱「Memory Bank IAM 角色」。使用正向條件:建議在
aiplatform.googleapis.com/memoryScope上使用正向條件 (例如檢查等號或鍵/值組合是否存在),以提高準確度。由於系統會以空白範圍表示不支援的類型和服務,因此負面條件 (例如不相等檢查) 可能會意外比對大量資源,導致過於寬鬆,並允許授予非預期的權限。盡可能縮短條件:建議您在 IAM 條件運算式中使用最短且最簡單的邏輯,尤其是當您打算設定大量條件時。IAM 允許政策有大小限制,簡化條件可避免遇到這些 IAM 限制。詳情請參閱「限制」一節。舉例來說,您可以省略檢查運算式
'user_id' in api.getAttribute('aiplatform.googleapis.com/memoryScope', {}) && api.getAttribute('aiplatform.googleapis.com/memoryScope', {})['user_id'] == 'userA'中是否有鍵,改用較短的陳述式api.getAttribute('aiplatform.googleapis.com/memoryScope', {})['user_id'] == 'userA'。如果缺少user_id鍵,較長的運算式會評估為false,而較短的運算式則會導致錯誤。由於 IAM 條件運算式中的錯誤會導致存取遭拒,因此這兩個運算式會產生相同的結果。
專屬的 Memory Bank IAM 角色
使用 IAM 條件時,請務必避免過於寬鬆的 IAM 政策。下表列出授予 Memory Bank API 條件式 IAM 角色時可用的專門角色:
| 角色名稱 | 說明 | 包含的權限 |
|---|---|---|
roles/aiplatform.memoryViewer |
授予回憶集和回憶集修訂版本的唯讀存取權。 |
|
roles/aiplatform.memoryEditor |
可授予記憶體的寫入和生成權限,以及記憶體修訂版本的復原權限。 |
|
roles/aiplatform.memoryUser |
具備回憶集和修訂版本的完整存取權,包括所有檢視者和編輯者權限。 |
包含 memoryEditor 和 memoryViewer 的所有權限。
|
搭配 Memory Bank 使用 IAM 條件
本節涵蓋下列使用 IAM 條件和 Memory Bank 的範例:
授予回憶集錦的讀取權限,且範圍完全相符
如果個人符合下列條件,就只能查看範圍完全符合 {"userId": "userA"} 的回憶集錦 userA@gmail.com。
也就是說,只要範圍完全是 {"userId": "userA"},成員就能取得及擷取記憶,以及列出及取得這些記憶的修訂版本。使用者無法存取範圍為 {'userId': 'userA', 'source': 'ADK'} 等的記憶內容。
{ "members": ["user:userA@gmail.com"], "role": "roles/aiplatform.memoryViewer", "condition": { "title": "Memory Access Condition", "expression": "api.getAttribute('aiplatform.googleapis.com/memoryScope', {}) == {'userId': 'userA'}" } }
授予記憶體寫入權限,範圍包含特定鍵/值組合
下列條件會授予個人 developerA@corp.com 編輯權限,
可編輯包含鍵/值組合 'userId': 'userA' 的任何回憶集錦。
也就是說,使用者可建立、更新、刪除及生成回憶集,並建立及復原這些回憶集的修訂版本,範圍包括 {'userId': 'userA'} 和 {'userId': 'userA', 'source': 'ADK'}。
{ "members": ["user:developerA@corp.com"], "role": "roles/aiplatform.memoryEditor", "condition": { "title": "Memory Access Condition", "expression": "api.getAttribute('aiplatform.googleapis.com/memoryScope', {})['userId'] == 'userA'" } }
授予範圍包含特定金鑰的回憶完整存取權
下列條件會授予群組 group:engineering@corp.com 使用者 (檢視者和編輯者) 存取含有 'admin_override' 或 'public_access_flag' 鍵的回憶內容。
也就是說,群組成員擁有記憶體的完整讀取和寫入權限,可存取 {'admin_override': 'true'}、{'admin_override': 'true',
'public_access_flag': 'false'} 和 {'userId': 'userA', 'public_access_flag':
'false'} 等範圍的記憶體。
{ "members": ["group:engineering@corp.com"], "role": "roles/aiplatform.memoryUser", "condition": { "title": "Memory Access Condition", "expression": "('admin_override' in api.getAttribute('aiplatform.googleapis.com/memoryScope', {})) || ('public_access_flag' in api.getAttribute('aiplatform.googleapis.com/memoryScope', {}))" } }
授予記憶體完整存取權,範圍包含特定前置字元
下列條件會授予群組 group:engineering@corp.com 使用者 (檢視者和編輯者) 存取記憶體的權限,這些記憶體的鍵為 'userId',值則以 'user' 開頭。您可以使用 'startsWith' 檢查前置字元,並使用 'endsWith' 檢查後置字元。
也就是說,群組成員擁有記憶體的完整讀取和寫入權限,範圍包括 {'userId': 'userA'}、{'userId': 'userB', 'public_access_flag':
'false'} 等。
{ "members": ["group:engineering@corp.com"], "role": "roles/aiplatform.memoryUser", "condition": { "title": "Memory Access Condition", "expression": "api.getAttribute('aiplatform.googleapis.com/memoryScope', {})['userId'].startsWith('user')" } }
授予記憶體的完整存取權,並設定一組允許的值做為金鑰範圍
下列條件會授予群組 group:engineering@corp.com「使用者」(檢視者和編輯者) 存取記憶體的權限,這些記憶體具有 'userId' 鍵,且值為 'userA' 或 'userB'。
也就是說,群組成員擁有記憶體的完整讀取和寫入權限,範圍包括 {'userId': 'userA'}、{'userId': 'userB', 'public_access_flag':
'false'} 等。
{ "members": ["group:engineering@corp.com"], "role": "roles/aiplatform.memoryUser", "condition": { "title": "Memory Access Condition", "expression": "api.getAttribute('aiplatform.googleapis.com/memoryScope', {})['userId'] in ['userA', 'userB']" } }
限制
主體限制:IAM 政策最多只能有 1500 個不重複的主體。您可以使用 Google 群組管理這項限制。詳情請參閱「所有主體的限制」。
API 支援:針對多個範圍運作的方法不支援 IAM 條件,例如
ListMemories和PurgeMemories。如要授予這些權限,您必須授予主體無條件角色,例如aiplatform.googleapis.com/memoryViewer、aiplatform.googleapis.com/memoryUser,或相關的無條件 Gemini Enterprise Agent Platform 角色。