本頁面說明在不慎變更或意外刪除 IAM 允許政策後,如何還原先前的版本。
如要還原先前的 IAM 政策,請找出變更或刪除政策前最後一次成功的 setIamPolicy,並使用該政策還原。
必要的角色
如要取得還原先前允許政策所需的權限,請要求管理員在專案、資料夾或組織中,授予您下列 IAM 角色:
-
使用
setIamPolicy還原允許政策: -
使用 Cloud Asset Inventory 還原允許政策:
Cloud Asset Owner (
roles/cloudasset.owner)
如要進一步瞭解如何授予角色,請參閱「管理專案、資料夾和組織的存取權」。
使用setIamPolicy 還原允許政策時,您必須具備機構管理員角色,才能還原機構和資料夾層級的允許政策;如要還原專案層級的允許政策,則必須具備擁有者角色。
使用上次成功的 setIamPolicy 執行個體還原允許政策
如要將允許政策還原至先前版本,請查看稽核記錄,瞭解變更或刪除前最後一次成功執行 setIamPolicy 的情況,並使用該執行個體的資訊還原政策。這個程序包含下列步驟:
- 找出允許政策的最後一個成功
setIamPolicy執行個體,並擷取insertId。 - 使用
setIamPolicy要求中的insertId,以 YAML 或 JSON 格式匯出允許政策。 - 修改輸出檔案,使其符合先前的有效允許政策,並覆寫目前的允許政策。
找出上次成功的 setIamPolicy 例項,並擷取 insertId
如要找出上次成功執行的 setIamPolicy 執行個體,並擷取 isertId,請使用 Cloud de Confiance 控制台或 gcloud CLI 查看稽核記錄。
控制台
前往 Cloud de Confiance 控制台的「Logs Explorer」頁面。
在查詢編輯器中輸入下列任一查詢。這些查詢會在稽核記錄中搜尋
protoPayload的methodName欄位含有SetIamPolicy的項目:如要取得資源的所有允許政策變更記錄,請使用下列查詢:
logName="RESOURCE_TYPE/RESOURCE_ID/logs/cloudaudit.googleapis.com%2Factivity" protoPayload.methodName:SetIamPolicy
如要取得涉及特定使用者或服務帳戶的允許政策變更記錄,請使用下列查詢:
logName="RESOURCE_TYPE/RESOURCE_ID/logs/cloudaudit.googleapis.com%2Factivity" protoPayload.methodName:SetIamPolicy protoPayload.serviceData.policyDelta.bindingDeltas.member:"EMAIL_ADDRESS"
更改下列內容:
RESOURCE_TYPE:您要列出稽核記錄的資源類型。有效值為projects、folders或organizations。RESOURCE_ID:您的 Cloud de Confiance 專案、資料夾或機構 ID。專案 ID 為英數字元,例如my-project。資料夾和機構 ID 是數字,例如123456789012。EMAIL_ADDRESS:使用者或服務帳戶的電子郵件地址,例如example-service-account@example-project.s3ns.iam.gserviceaccount.com。
如要執行查詢,請按一下「執行查詢」。
使用「時間軸」選取器,為查詢指定適當的時間範圍。或者,您也可以直接在查詢編輯器中新增時間戳記運算式。詳情請參閱「依時間範圍查看記錄」。
從變更或刪除前的最後一個成功執行個體複製
setIamPolicy的insertId。
gcloud
gcloud logging read
指令會讀取記錄項目。
使用下方的任何指令資料之前,請先替換以下項目:
-
RESOURCE_TYPE:要列出稽核記錄的資源類型。請使用projects、folders或organizations值。 -
RESOURCE_ID:您的 Cloud de Confiance專案、機構或資料夾 ID。專案 ID 為英數字串,例如my-project。資料夾和機構 ID 為數字,例如123456789012。 -
TIME_PERIOD:要列出稽核記錄的時間範圍。 傳回的項目不會早於這個值。如未指定,則預設值為1d。如要瞭解時間格式,請參閱 gcloud topic datetimes。 -
RESOURCE_TYPE_SINGULAR:要列出稽核記錄的資源類型。請使用project、folder或organization值。
執行下列指令:
Linux、macOS 或 Cloud Shell
gcloud logging read \ 'logName:RESOURCE_TYPE/RESOURCE_ID/logs/cloudaudit.googleapis.com%2Factivity AND protoPayload.methodName=SetIamPolicy' \ --freshness=TIME_PERIOD \ --RESOURCE_TYPE_SINGULAR=RESOURCE_ID
Windows (PowerShell)
gcloud logging read ` 'logName:RESOURCE_TYPE/RESOURCE_ID/logs/cloudaudit.googleapis.com%2Factivity AND protoPayload.methodName=SetIamPolicy' ` --freshness=TIME_PERIOD ` --RESOURCE_TYPE_SINGULAR=RESOURCE_ID
Windows (cmd.exe)
gcloud logging read ^ 'logName:RESOURCE_TYPE/RESOURCE_ID/logs/cloudaudit.googleapis.com%2Factivity AND protoPayload.methodName=SetIamPolicy' ^ --freshness=TIME_PERIOD ^ --RESOURCE_TYPE_SINGULAR=RESOURCE_ID
複製變更或刪除前,setIamPolicy 上次成功執行個體的 insertId。
使用 insertId 匯出允許政策
使用您從上次成功執行的執行個體擷取的 insertId,在 gcloud CLI 中執行下列指令,以 JSON 或 YAML 格式匯出允許政策。setIamPolicy您可以匯出機構和專案的允許政策。
機構層級
gcloud logging read
指令會讀取記錄項目。
使用下方的任何指令資料之前,請先替換以下項目:
-
ORGANIZATION_ID:您要查看及匯出允許政策的機構。 -
INSERT_ID:setIamPolicy要求的insertId。 -
FORMAT:回應格式。使用json或yaml。 -
TIME_PERIOD:要列出稽核記錄的時間範圍。 傳回的項目不會早於這個值。如未指定,則預設值為1d。如要瞭解時間格式,請參閱 gcloud topic datetimes。 -
OUTPUT_FILE:輸出內容的檔案名稱和副檔名。例如previous_policy.json或previous_policy.yaml。
執行下列指令:
Linux、macOS 或 Cloud Shell
gcloud logging read organizations/ORGANIZATION_ID/logs/cloudaudit.googleapis.com insertId="INSERT_ID"' --organization=ORGANIZATION_ID --format="FORMAT(protoPayload.request.policy)" --freshness=TIME_PERIOD > OUTPUT_FILE
Windows (PowerShell)
gcloud logging read organizations/ORGANIZATION_ID/logs/cloudaudit.googleapis.com insertId="INSERT_ID"' --organization=ORGANIZATION_ID --format="FORMAT(protoPayload.request.policy)" --freshness=TIME_PERIOD > OUTPUT_FILE
Windows (cmd.exe)
gcloud logging read organizations/ORGANIZATION_ID/logs/cloudaudit.googleapis.com insertId="INSERT_ID"' --organization=ORGANIZATION_ID --format="FORMAT(protoPayload.request.policy)" --freshness=TIME_PERIOD > OUTPUT_FILE
專案層級
gcloud logging read
指令會讀取記錄項目。
使用下方的任何指令資料之前,請先替換以下項目:
-
INSERT_ID:setIamPolicy要求的insertId。 -
TIME_PERIOD:要列出稽核記錄的時間範圍。 傳回的項目不會早於這個值。如未指定,則預設值為1d。如要瞭解時間格式,請參閱 gcloud topic datetimes。 -
FORMAT:回應格式。使用json或yaml。 -
OUTPUT_FILE:要儲存輸出內容的檔案名稱,例如previous_policy.json或previous_policy.yaml。
執行下列指令:
Linux、macOS 或 Cloud Shell
gcloud logging read \ 'protoPayload.methodName="SetIamPolicy" AND insertId="INSERT_ID"' \ --freshness=TIME_PERIOD \ --format="FORMAT(protoPayload.request.policy)" > OUTPUT_FILE
Windows (PowerShell)
gcloud logging read ` 'protoPayload.methodName="SetIamPolicy" AND insertId="INSERT_ID"' ` --freshness=TIME_PERIOD ` --format="FORMAT(protoPayload.request.policy)" > OUTPUT_FILE
Windows (cmd.exe)
gcloud logging read ^ 'protoPayload.methodName="SetIamPolicy" AND insertId="INSERT_ID"' ^ --freshness=TIME_PERIOD ^ --format="FORMAT(protoPayload.request.policy)" > OUTPUT_FILE
修改輸出檔案並覆寫目前的允許政策
按照下列方式修改輸出檔案,並覆寫目前的允許政策。
透過程式或使用文字編輯器修改輸出檔案,刪除下列程式碼行:
--- protoPayload: request: policy:產生的檔案會以
auditConfigs:開頭。取得目前的允許政策。
gcloud
gcloud get-iam-policy指令會取得專案、資料夾或機構的允許政策。使用下方的任何指令資料之前,請先替換以下項目:
-
RESOURCE_TYPE:要取得允許政策的資源類型。有效值為projects、resource-manager folders或organizations。 -
RESOURCE_ID:您的 Cloud de Confiance 專案、資料夾或組織 ID。專案 ID 為英數字元,例如my-project。資料夾和機構 ID 為數字,例如123456789012。 -
FORMAT:允許政策的所需格式。使用json或yaml。 -
PATH:允許政策的新輸出檔案路徑。
執行下列指令:
Linux、macOS 或 Cloud Shell
gcloud RESOURCE_TYPE get-iam-policy RESOURCE_ID --format=FORMAT > PATH
Windows (PowerShell)
gcloud RESOURCE_TYPE get-iam-policy RESOURCE_ID --format=FORMAT > PATH
Windows (cmd.exe)
gcloud RESOURCE_TYPE get-iam-policy RESOURCE_ID --format=FORMAT > PATH
舉例來說,以下指令會取得專案
my-project的允許政策,並以 JSON 格式儲存至主目錄:gcloud projects get-iam-policy my-project --format json > ~/policy.json
C#
如要向 Resource Manager 進行驗證,請設定應用程式預設憑證。 詳情請參閱「事前準備」。
如要瞭解如何安裝及使用 Resource Manager 的用戶端程式庫,請參閱「Resource Manager 用戶端程式庫」。
以下範例說明如何取得專案的允許政策。如要瞭解如何取得資料夾或機構的允許政策,請參閱您所用程式設計語言的Resource Manager 用戶端程式庫說明文件。
Java
如要向 Resource Manager 進行驗證,請設定應用程式預設憑證。 詳情請參閱「事前準備」。
如要瞭解如何安裝及使用 Resource Manager 的用戶端程式庫,請參閱「Resource Manager 用戶端程式庫」。
以下範例說明如何取得專案的允許政策。如要瞭解如何取得資料夾或機構的允許政策,請參閱您所用程式設計語言的Resource Manager 用戶端程式庫說明文件。
Python
如要向 Resource Manager 進行驗證,請設定應用程式預設憑證。 詳情請參閱「事前準備」。
如要瞭解如何安裝及使用 Resource Manager 的用戶端程式庫,請參閱「Resource Manager 用戶端程式庫」。
以下範例說明如何取得專案的允許政策。如要瞭解如何取得資料夾或機構的允許政策,請參閱您所用程式設計語言的Resource Manager 用戶端程式庫說明文件。
REST
Resource Manager API 的
get-iam-policy方法會取得專案、資料夾或機構的允許政策。使用任何要求資料之前,請先修改下列項目的值:
API_VERSION:要使用的 API 版本。如果是專案和機構,請使用v1。如果是資料夾,請使用v2。RESOURCE_TYPE:要管理政策的資源類型。請使用projects、folders或organizations值。RESOURCE_ID:您的 Cloud de Confiance專案、機構或資料夾 ID。專案 ID 為英數字串,例如my-project。資料夾和機構 ID 為數字,例如123456789012。POLICY_VERSION:要傳回的政策版本。要求應指定最新政策版本,也就是政策版本 3。詳情請參閱在取得政策時指定政策版本。
HTTP 方法和網址:
POST https://cloudresourcemanager.googleapis.com/API_VERSION/RESOURCE_TYPE/RESOURCE_ID:getIamPolicy
JSON 要求主體:
{ "options": { "requestedPolicyVersion": POLICY_VERSION } }請展開以下其中一個選項,以傳送要求:
回應會包含資源的允許政策。例如:
{ "version": 1, "etag": "BwWKmjvelug=", "bindings": [ { "role": "roles/owner", "members": [ "principal://iam.googleapis.com/locations/global/workforcePools/my-pool/subject/my-user@example.com" ] } ] }將回應儲存至適當類型的檔案 (
json或yaml)。-
從目前的允許政策複製
etag值。將輸出檔案中的
etag值,替換為您從目前允許政策複製的etag值。輸出檔案中的etag必須與目前的etag相符,才能啟動新的setIamPolicy要求。請確認輸出檔案中 ETag 的間距未變更。檢查檔案,確認檔案與先前的有效允許政策相符。建議您建立新專案並套用政策,確保政策能正常運作。
設定允許政策,以您建立的輸出檔案中的政策,覆寫目前的允許政策。
gcloud
gcloud set-iam-policy指令會將要求中的政策設為專案、資料夾或機構的新允許政策。使用下方的任何指令資料之前,請先替換以下項目:
-
RESOURCE_TYPE:要設定允許政策的資源類型。有效值為projects、resource-manager folders或organizations。 -
RESOURCE_ID:您的 Cloud de Confiance 專案、資料夾或組織 ID。專案 ID 為英數字元,例如my-project。資料夾和機構 ID 為數字,例如123456789012。 -
PATH:包含新允許政策的檔案路徑。
執行下列指令:
Linux、macOS 或 Cloud Shell
gcloud RESOURCE_TYPE set-iam-policy RESOURCE_ID PATH
Windows (PowerShell)
gcloud RESOURCE_TYPE set-iam-policy RESOURCE_ID PATH
Windows (cmd.exe)
gcloud RESOURCE_TYPE set-iam-policy RESOURCE_ID PATH
回應會包含更新後的允許政策。
舉例來說,下列指令會將儲存在
policy.json中的允許政策,設為專案my-project的允許政策:gcloud projects set-iam-policy my-project ~/policy.json
C#
Java
如要向 Resource Manager 進行驗證,請設定應用程式預設憑證。 詳情請參閱「事前準備」。
如要瞭解如何安裝及使用 Resource Manager 的用戶端程式庫,請參閱「Resource Manager 用戶端程式庫」。
以下範例說明如何為專案設定允許政策。如要瞭解如何設定資料夾或機構的允許政策,請參閱您所用程式設計語言的Resource Manager 用戶端程式庫文件。
Python
如要向 Resource Manager 進行驗證,請設定應用程式預設憑證。 詳情請參閱「事前準備」。
如要瞭解如何安裝及使用 Resource Manager 的用戶端程式庫,請參閱「Resource Manager 用戶端程式庫」。
以下範例說明如何為專案設定允許政策。如要瞭解如何設定資料夾或機構的允許政策,請參閱您所用程式設計語言的Resource Manager 用戶端程式庫文件。
REST
Resource Manager API 的
set-iam-policy方法會將要求中的政策設為專案、資料夾或機構的新允許政策。使用任何要求資料之前,請先修改下列項目的值:
API_VERSION:要使用的 API 版本。如果是專案和機構,請使用v1。如果是資料夾,請使用v2。RESOURCE_TYPE:要管理政策的資源類型。請使用projects、folders或organizations值。RESOURCE_ID:您的 Cloud de Confiance專案、機構或資料夾 ID。專案 ID 為英數字串,例如my-project。資料夾和機構 ID 為數字,例如123456789012。-
POLICY:您要設定的政策的 JSON 表示法。如要進一步瞭解政策格式,請參閱政策參考資料。
HTTP 方法和網址:
POST https://cloudresourcemanager.googleapis.com/API_VERSION/RESOURCE_TYPE/RESOURCE_ID:setIamPolicy
JSON 要求主體:
{ "policy": POLICY }請展開以下其中一個選項,以傳送要求:
回應會包含更新後的允許政策。
-