本頁面說明在不慎變更或意外刪除 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,請使用 Google Cloud 控制台或 gcloud CLI 查看稽核記錄。
控制台
前往 Google Cloud 控制台的「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:您的 Google Cloud 專案、資料夾或機構 ID。專案 ID 為英數字元,例如my-project。資料夾和機構 ID 是數字,例如123456789012。EMAIL_ADDRESS:使用者或服務帳戶的電子郵件地址,例如example-service-account@example-project.iam.gserviceaccount.com。
如要執行查詢,請按一下「執行查詢」。
使用「時間軸」選取器,為查詢指定適當的時間範圍。或者,您也可以直接在查詢編輯器中新增時間戳記運算式。詳情請參閱「依時間範圍查看記錄」。
從變更或刪除前的最後一個成功執行個體複製
setIamPolicy的insertId。
gcloud
gcloud logging read
指令會讀取記錄項目。
使用下方的任何指令資料之前,請先替換以下項目:
-
RESOURCE_TYPE:要列出稽核記錄的資源類型。請使用projects、folders或organizations值。 -
RESOURCE_ID:您的 Google Cloud專案、機構或資料夾 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:您的 Google Cloud 專案、資料夾或組織 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:您的 Google Cloud專案、機構或資料夾 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": [ "user: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:您的 Google Cloud 專案、資料夾或組織 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:您的 Google Cloud專案、機構或資料夾 ID。專案 ID 為英數字串,例如my-project。資料夾和機構 ID 為數字,例如123456789012。-
POLICY:您要設定的政策的 JSON 表示法。如要進一步瞭解政策格式,請參閱政策參考資料。
HTTP 方法和網址:
POST https://cloudresourcemanager.googleapis.com/API_VERSION/RESOURCE_TYPE/RESOURCE_ID:setIamPolicy
JSON 要求主體:
{ "policy": POLICY }請展開以下其中一個選項,以傳送要求:
回應會包含更新後的允許政策。
-
使用 Cloud Asset Inventory 還原允許政策
如要將允許政策還原為先前版本,可以使用 Cloud Asset Inventory 查看資源允許政策的變更記錄,並利用該資訊還原政策。這項程序包含下列步驟:
- 使用 Cloud Asset Inventory 查看允許政策的變更記錄,找出要還原的允許政策。
- 複製允許政策,並以 JSON 格式建立新檔案。
- 使用新檔案中的政策,覆寫目前的允許政策。
使用 Cloud Asset Inventory 查看允許政策變更記錄
控制台
前往 Google Cloud 控制台的「資產清單」頁面。
按一下「IAM 政策」分頁標籤。
在「篩選器」欄位中執行下列查詢:
Resource :
RESOURCE_ID將
RESOURCE_ID替換為專案、資料夾或機構 ID。 Google Cloud專案 ID 為英數字元,例如my-project。資料夾和機構 ID 是數字,例如123456789012。如要查看資源允許政策的變更記錄,請按一下資源名稱,然後選取「變更記錄」分頁標籤。
如要比較資源的允許政策變更,請從「選取要比較的記錄」選單中選取兩個不同時間戳記的記錄。
gcloud
The
gcloud asset get-history
command gets the updated history of allow policies on an asset that overlaps a
time window.
使用下方的任何指令資料之前,請先替換以下項目:
-
RESOURCE_TYPE:要列出稽核記錄的資源類型。請使用project、folder或organization值。 -
RESOURCE_ID:您的 Google Cloud專案、機構或資料夾 ID。專案 ID 為英數字串,例如my-project。資料夾和機構 ID 為數字,例如123456789012。 -
ASSET_NAME:以半形逗號分隔的格式化資源名稱清單,這些資源是您要查看允許政策記錄的對象。例如://cloudresourcemanager.googleapis.com/projects/my-project。這些資源可以是接受允許政策的任何資源類型。 -
START_TIME:時間範圍的開頭。時間範圍最長為 7 天。這個值必須是目前時間,或過去 35 天內的時間。如要瞭解時間格式,請參閱 gcloud topic datetimes。 -
END_TIME:選用。時間範圍的結束時間。時間範圍最長為 7 天。這個值必須是目前時間,或過去 35 天內的時間。如未提供,系統會假設結束時間為目前時間。如要瞭解時間格式,請參閱 gcloud topic datetimes。
執行下列指令:
Linux、macOS 或 Cloud Shell
gcloud asset get-history \ --RESOURCE_TYPE=RESOURCE_ID \ --asset-names=ASSET_NAME_1,ASSET_NAME_2,... \ --content-type=iam-policy \ --start-time=START_TIME \ --end-time=END_TIME
Windows (PowerShell)
gcloud asset get-history ` --RESOURCE_TYPE=RESOURCE_ID ` --asset-names=ASSET_NAME_1,ASSET_NAME_2,... ` --content-type=iam-policy ` --start-time=START_TIME ` --end-time=END_TIME
Windows (cmd.exe)
gcloud asset get-history ^ --RESOURCE_TYPE=RESOURCE_ID ^ --asset-names=ASSET_NAME_1,ASSET_NAME_2,... ^ --content-type=iam-policy ^ --start-time=START_TIME ^ --end-time=END_TIME
回應會包含更新後的允許政策記錄。
建立新的允許政策檔案
查看允許政策記錄並找出要還原的允許政策後,請完成下列步驟。
複製要還原的允許政策,從
"bindings"行開始,到"etag"行結束。將複製的允許政策貼到新檔案中,並使用大括號 (
{}) 括住政策。舉例來說,允許政策可能如下所示:{ "bindings": [ { "role": "roles/resourcemanager.organizationAdmin", "members": [ "user:mike@example.com", "group:admins@example.com", "domain:google.com", "serviceAccount:my-service-account@my-project.iam.gserviceaccount.com" ] }, { "role": "roles/resourcemanager.organizationViewer", "members": [ "user:eve@example.com" ], "condition": { "title": "expirable access", "description": "Does not grant access after Sep 2020", "expression": "request.time < timestamp('2020-10-01T00:00:00.000Z')", } } ], "etag": "BwWWja0YfJA=", }以 JSON 格式儲存檔案。舉例來說,您可以將新檔案命名為
previous_iam_policy.json。
設定新的允許政策
設定允許政策,以您建立的輸出檔案中的政策,覆寫目前的允許政策。
gcloud
gcloud set-iam-policy
指令會將要求中的政策設為專案、資料夾或機構的新允許政策。
使用下方的任何指令資料之前,請先替換以下項目:
-
RESOURCE_TYPE:要設定允許政策的資源類型。有效值為projects、resource-manager folders或organizations。 -
RESOURCE_ID:您的 Google Cloud 專案、資料夾或組織 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:您的 Google Cloud專案、機構或資料夾 ID。專案 ID 為英數字串,例如my-project。資料夾和機構 ID 為數字,例如123456789012。-
POLICY:您要設定的政策的 JSON 表示法。如要進一步瞭解政策格式,請參閱政策參考資料。
HTTP 方法和網址:
POST https://cloudresourcemanager.googleapis.com/API_VERSION/RESOURCE_TYPE/RESOURCE_ID:setIamPolicy
JSON 要求主體:
{
"policy": POLICY
}
請展開以下其中一個選項,以傳送要求:
回應會包含更新後的允許政策。