このページでは、誤って変更したり、誤って削除したりした後に、IAM 許可ポリシーの以前のバージョンを復元する方法について説明します。
以前の IAM ポリシーを復元するには、変更または削除前の最後の成功した setIamPolicy を見つけて、それを使用してポリシーを復元します。
必要なロール
以前の許可ポリシーを復元するために必要な権限を取得するには、プロジェクト、フォルダ、または組織に対する次の IAM ロールを付与するよう管理者に依頼します。
-
setIamPolicyを使用して許可ポリシーを復元します。 -
Cloud Asset Inventory を使用して許可ポリシーを復元する: Cloud Asset オーナー (
roles/cloudasset.owner)
ロールの付与については、プロジェクト、フォルダ、組織へのアクセス権の管理をご覧ください。
setIamPolicy を使用して許可ポリシーを復元する場合、組織レベルとフォルダレベルの許可ポリシーには組織管理者ロールが必要で、プロジェクト レベルの許可ポリシーにはオーナーロールが必要です。カスタムロールや他の事前定義ロールを使用して、これらの権限を取得することもできます。
最後に成功した setIamPolicy インスタンスを使用して許可ポリシーを復元する
許可ポリシーを以前のバージョンに復元するには、変更または削除前の setIamPolicy の最後の成功インスタンスの監査ログを確認し、そのインスタンスの情報を使用してポリシーを復元します。このプロセスには、次のステップが含まれます。
- 許可ポリシーの最後の成功した
setIamPolicyインスタンスを特定し、insertIdを取得します。 setIamPolicyリクエストのinsertIdを使用して、許可ポリシーを YAML 形式または JSON 形式でエクスポートします。- 出力ファイルを変更して、以前の動作中の許可ポリシーと一致させ、現在の許可ポリシーをオーバーライドします。
setIamPolicy の最後の成功したインスタンスを特定し、insertId を取得します。
setIamPolicy の最後の成功したインスタンスを特定して isertId を取得するには、 Cloud de Confiance コンソールまたは gcloud CLI を使用して監査ログを確認します。
コンソール
Cloud de Confiance コンソールで、[ログ エクスプローラ] ページに移動します。
クエリエディタで、次のいずれかのクエリを入力します。次のクエリは、監査ログで
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 と組織 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 と組織 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 を使用して許可ポリシーをエクスポートする
setIamPolicy の最後に成功したインスタンスから取得した insertId を使用して、gcloud CLI で次のコマンドを実行し、JSON または YAML 形式で許可ポリシーをエクスポートします。組織とプロジェクトの許可ポリシーをエクスポートできます。
組織レベル
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 と組織 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 と組織 ID は数値です(例:123456789012)。POLICY_VERSION: 返されるポリシー バージョン。リクエストでは、最新のポリシー バージョン(ポリシー バージョン 3)を指定する必要があります。詳細については、ポリシーの取得時にポリシー バージョンを指定するをご覧ください。
HTTP メソッドと URL:
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は、新しいsetIamPolicyリクエストを開始するために現在のetagと一致している必要があります。出力ファイルで etag の間隔が変更されていないことを確認します。ファイルを確認して、以前の動作中の許可ポリシーと一致していることを確認します。新しいプロジェクトを作成してポリシーを適用し、意図したとおりに動作することを確認することをおすすめします。
許可ポリシーを設定して、作成した出力ファイルのポリシーで現在の許可ポリシーをオーバーライドします。
gcloud
gcloud set-iam-policyコマンドは、リクエストのポリシーをプロジェクト、フォルダ、組織の新しい許可ポリシーとして設定します。後述のコマンドデータを使用する前に、次のように置き換えます。
-
RESOURCE_TYPE: 許可ポリシーを設定するリソースのタイプ。有効な値はprojects、resource-manager folders、organizationsです。 -
RESOURCE_ID: Cloud de Confiance プロジェクト、フォルダ、または組織の ID。プロジェクト ID は英数字です(例:my-project)。フォルダ ID と組織 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 と組織 ID は数値です(例:123456789012)。-
POLICY: 設定するポリシーの JSON 表現。ポリシーの形式については、ポリシー リファレンスをご覧ください。
HTTP メソッドと URL:
POST https://cloudresourcemanager.googleapis.com/API_VERSION/RESOURCE_TYPE/RESOURCE_ID:setIamPolicy
リクエストの本文(JSON):
{ "policy": POLICY }リクエストを送信するには、次のいずれかのオプションを展開します。
レスポンスには、更新された許可ポリシーが含まれます。
-