条件付きポリシーの管理

このトピックでは、Cloud Identity and Access Management(Cloud IAM)ポリシーで条件付きバインディングを追加、変更、削除する方法について説明します。

始める前に

条件付きロール バインディングのポリシーへの追加

新しい Cloud IAM ポリシーや既存の Cloud IAM ポリシーに条件付きのロール バインディングを追加すると、Google Cloud リソースへのアクセスを細かく制御できます。このセクションでは、Cloud Console、gcloud コマンドライン ツール、REST API を使用して、既存のポリシーに単純な時間ベースの条件を追加する方法について説明します。

既存のポリシーに条件付きロール バインディングを追加するには:

Console

  1. Cloud Console で [IAM] ページを開きます。

    [IAM] ページを開く

  2. [プロジェクトを選択] をクリックし、プロジェクトを選択して [開く] をクリックします。
  3. リストから目的のメンバーを探し、 ボタンをクリックします。
  4. [権限の編集] パネルで、条件を構成するロールを見つけます。次に [条件] の下にある [条件を追加] をクリックします。
  5. [条件の編集] パネルで、条件のタイトルとオプションの説明を入力します。
  6. 条件ビルダーまたは条件エディタを使用して条件式を追加できます。条件ビルダーには、目的の条件タイプ、演算子、その他の式に関する適用可能な詳細を選択するためのインタラクティブなインターフェースが用意されています。条件エディタには、CEL 構文を使用して手動で式を入力するためのテキストベースのインターフェースが用意されています。

    条件ビルダー:

    1. [条件タイプ] プルダウンから [アクセスの有効期限] を選択します。
    2. [演算子] プルダウンから、[次の時間まで] を選択します。
    3. [時刻] プルダウンで、 ボタンをクリックし、日付と時刻の範囲から選択します。
    4. [保存] をクリックして条件を適用します。
    5. [条件の編集] パネルを閉じたら、[権限の編集] パネルでもう一度 [保存] をクリックし、Cloud IAM ポリシーを更新します。

    条件エディタ:

    1. [条件エディタ] タブをクリックし、次の式を入力します。タイムスタンプは自身のものに置き換えます。

      request.time < timestamp("2019-12-31T12:00:00.000Z")
    2. 式を入力したら、右上のテキスト ボックスの上にある [リンターを実行] をクリックして、CEL 構文を検証することもできます。
    3. [保存] をクリックして条件を適用します。
    4. [条件の編集] パネルを閉じたら、[権限の編集] パネルでもう一度 [保存] をクリックし、Cloud IAM ポリシーを更新します。

gcloud コマンド

Cloud IAM ポリシーは、読み取り、変更、書き込みのパターンを使用して設定されます。

gcloud projects get-iam-policy コマンドを実行し、プロジェクトの現在の Cloud IAM ポリシーを取得します。次の例では、JSON バージョンのポリシーがディスク上のパスにダウンロードされます。

コマンド:

gcloud projects get-iam-policy [PROJECT-ID] --format json > [FILE-PATH]

JSON 形式の Cloud IAM ポリシーがダウンロードされます。

{
      "bindings": [
        {
          "members": [
            "user:example@gmail.com"
          ],
          "role": "roles/iam.securityReviewer"
        }
      ],
      "etag": "BwWKmjvelug=",
      "version": 1
    }

ポリシーの現在の version1)に注意してください。アクセス時の有効期限を定めてポリシーを構成するには、次の条件式(強調表示された部分)を追加します。タイムスタンプは自身のものに置き換えます。gcloud ツールのバージョン 263.0.0 以降を使用していない場合は、version 値を 3 に更新していることを確認してください。新しいバージョンの gcloud ツールを使用している場合は、最大のポリシー値が自動的に設定されます。

{
      "bindings": [
        {
          "members": [
            "user:example@gmail.com"
          ],
          "role": "roles/iam.securityReviewer",
          "condition": {
              "title": "Expires_2019",
              "description": "Expires at noon on 2019-12-31",
              "expression":
                "request.time < timestamp('2019-12-31T12:00:00Z')"
          }
        }
      ],
      "etag": "BwWKmjvelug=",
      "version": 3
    }

次に、gcloud projects set-iam-policy コマンドを実行して、新しい条件付きポリシーを設定します。

gcloud projects set-iam-policy [PROJECT-ID] [FILE-PATH]

新しい条件付きポリシーが適用され、example@gmail.com のロール バインディングが指定された時刻に期限切れになります。

REST API

projects.getIamPolicy() を呼び出し、プロジェクトの現在の Cloud IAM ポリシーを取得します。

POST https://cloudresourcemanager.googleapis.com/v1/projects/[PROJECT-ID]:getIamPolicy

リクエストの本文は次のように設定されます。

{
      "options": {
        "requestedPolicyVersion": 3
      }
    }

レスポンスの本文には、プロジェクトの Cloud IAM ポリシーが格納されます。

{
      "bindings": [
        {
          "members": [
            "user:example@gmail.com"
          ],
          "role": "roles/iam.securityReviewer"
        }
      ],
      "etag": "BwWKmjvelug=",
      "version": 1
    }

ポリシーの現在の version1)に注意してください。アクセス時の有効期限を定めてポリシーを構成するには、次の条件式(強調表示された部分)を追加します。タイムスタンプは自身のものに置き換えます。条件を使用するためのバージョン要件を満たすには、version 値を 3 に更新してください。

{
      "bindings": [
        {
          "members": [
            "user:example@gmail.com"
          ],
          "role": "roles/iam.securityReviewer",
          "condition": {
              "title": "Expires_2019",
              "description": "Expires at noon on 2019-12-31",
              "expression":
                "request.time < timestamp('2019-12-31T12:00:00Z')"
          }
        }
      ],
      "etag": "BwWKmjvelug=",
      "version": 3
    }

プロジェクトに新しい条件付き Cloud IAM ポリシーを設定するには、projects.setIamPolicy() を呼び出し、更新されたポリシーをリクエストの本文に含めます。

POST https://cloudresourcemanager.googleapis.com/v1/projects/[PROJECT-ID]:setIamPolicy

レスポンスは、更新されたポリシーになります。

既存の条件付きロール バインディングの変更

条件付きロール バインディングを作成した後は、いつでも条件式を変更できます。このセクションでは、Cloud Console、gcloud コマンドライン ツール、REST API を使用して、既存のポリシーで時間ベースの条件を更新する方法について説明します。

既存のポリシーで条件付きロール バインディングを変更するには:

Console

  1. Cloud Console で [IAM] ページを開きます。

    [IAM] ページを開く

  2. [プロジェクトを選択] をクリックし、プロジェクトを選択して [開く] をクリックします。
  3. リストから目的のメンバーを探し、 ボタンをクリックします。
  4. [権限の編集] パネルで、条件を構成するロールを見つけます。次に、[条件] の下で、編集する既存の条件の名前をクリックします。
  5. [条件の編集] パネルで、条件の既存のタイトル名と説明を保持または更新できます。
  6. 既存の条件式を編集するか、条件ビルダー条件エディタを使用して新しい条件式を追加します。条件ビルダーには、目的の条件タイプ、演算子、その他の式に関する適用可能な詳細を選択するためのインタラクティブなインターフェースが用意されています。条件エディタには、CEL 構文を使用して手動で式を入力するためのテキストベースのインターフェースが用意されています。

    条件ビルダー:

    1. 新しい条件式を追加するか、既存の条件式を変更します。
    2. [保存] をクリックして条件を適用します。
    3. [条件の編集] パネルを閉じたら、[権限の編集] パネルでもう一度 [保存] をクリックし、Cloud IAM ポリシーを更新します。

    条件エディタ:

    1. [条件エディタ] タブをクリックし、新しい条件式を追加するか、既存の条件式を変更します。
    2. 式を入力したら、右上のテキスト ボックスの上にある [リンターを実行] をクリックして、CEL 構文を検証することもできます。
    3. [保存] をクリックして条件を適用します。
    4. [条件の編集] パネルを閉じたら、[権限の編集] パネルでもう一度 [保存] をクリックし、Cloud IAM ポリシーを更新します。

gcloud コマンド

Cloud IAM ポリシーは、読み取り、変更、書き込みのパターンを使用して設定されます。

gcloud projects get-iam-policy コマンドを実行し、プロジェクトの現在の Cloud IAM ポリシーを取得します。次の例では、JSON バージョンのポリシーがディスク上のパスにダウンロードされます。

コマンド:

gcloud projects get-iam-policy [PROJECT-ID] --format json > [FILE-PATH]

JSON 形式の Cloud IAM ポリシーがダウンロードされます。

{
      "bindings": [
        {
          "members": [
            "user:example@gmail.com"
          ],
          "role": "roles/bigquery.dataViewer",
          "condition": {
              "title": "Duration_3_months",
              "description": "Expires in 3 months on 2019-10-12",
              "expression":
                "request.time > timestamp(\"2019-07-12T07:00:00.000Z\") &&
                request.time < timestamp(\"2019-10-12T07:00:00.000Z\")"
          }
        }
      ],
      "etag": "BwWKmjvelug=",
      "version": 3
    }

この例では、式の titledescription、timestamp の値を更新し、条件にスケジュールされたアクセスの期間を変更します。条件式の強調表示された部分を更新し、自身の場合の値に置き換えてください。gcloud ツールのバージョン 263.0.0 以降を使用していない場合は、version 値を 3 に更新していることを確認してください。新しいバージョンの gcloud ツールを使用している場合は、最大のポリシー値が自動的に設定されます。

{
      "bindings": [
        {
          "members": [
            "user:example@gmail.com"
          ],
          "role": "roles/bigquery.dataViewer",
          
          "condition": {
              "title": "Duration_5_months",
              "description": "Expires in 5 months on 2020-01-12",
              "expression":
                "request.time > timestamp('2019-07-12T07:00:00.000Z') &&
                request.time < timestamp('2020-01-12T07:00:00.000Z')"
          }
        }
      ],
      "etag": "BwWKmjvelug=",
      "version": 3
    }

次に、gcloud projects set-iam-policy コマンドを実行して、新しい条件付きポリシーを設定します。

gcloud projects set-iam-policy [PROJECT-ID] [FILE-PATH]

更新された条件付きポリシーが適用され、example@gmail.com の期限切れの時刻が新しい時刻に更新されます。

REST API

projects.getIamPolicy() を呼び出し、プロジェクトの現在の Cloud IAM ポリシーを取得します。

POST https://cloudresourcemanager.googleapis.com/v1/projects/[PROJECT-ID]:getIamPolicy

リクエストの本文は次のように設定されます。

{
      "options": {
        "requestedPolicyVersion": 3
      }
    }

レスポンスの本文には、プロジェクトの Cloud IAM ポリシーが格納されます。

{
      "bindings": [
        {
          "members": [
            "user:example@gmail.com"
          ],
          "role": "roles/bigquery.dataViewer",
          "condition": {
              "title": "Duration_3_months",
              "description": "Expires in 3 months on 2019-10-12",
              "expression":
                "request.time > timestamp(\"2019-07-12T07:00:00.000Z\") &&
                request.time < timestamp(\"2019-10-12T07:00:00.000Z\")"
          }
        }
      ],
      "etag": "BwWKmjvelug=",
      "version": 3
    }

この例では、timestamp の値を更新し、条件にスケジュールされたアクセスの期間を変更します。条件式の強調表示された部分を更新し、自身の場合の timestamp に置き換えてください。

{
      "bindings": [
        {
          "members": [
            "user:example@gmail.com"
          ],
          "role": "roles/bigquery.dataViewer",
          "condition": {
              "title": "Duration_5_months",
              "description": "Expires in 5 months on 2020-01-12",
              
              "expression":
                "request.time > timestamp('2019-07-12T07:00:00.000Z') &&
                request.time < timestamp('2020-01-12T07:00:00.000Z')"
          }
        }
      ],
      "etag": "BwWKmjvelug=",
      "version": 3
    }

プロジェクトに更新された条件付き Cloud IAM ポリシーを設定するには、projects.setIamPolicy() を呼び出し、更新されたポリシーをリクエストの本文に含めます。

POST https://cloudresourcemanager.googleapis.com/v1/projects/[PROJECT-ID]:setIamPolicy

レスポンスには、更新されたポリシーが含まれます。

条件付きロール バインディングの削除

Cloud IAM ポリシーで条件付きロール バインディングを削除すると、リソースへのアクセスがロール バインディングの範囲のみに限定されます。このセクションでは、Cloud Console、gcloud コマンドライン ツール、REST API を使用して、ポリシー内の時間ベースの条件を削除する方法について説明します。

ポリシー内のロール バインディングから条件を削除するには:

Console

  1. Cloud Console で [IAM] ページを開きます。

    [IAM] ページを開く

  2. [プロジェクトを選択] をクリックし、プロジェクトを選択して [開く] をクリックします。
  3. リストから目的のメンバーを探し、 ボタンをクリックします。
  4. [権限の編集] パネルで、目的のロール バインディングを探します。次に、[条件] の下で、既存の条件の名前をクリックします。
  5. [条件の編集] パネルで、[削除] ボタンをクリックして条件を削除します。削除の確認を求めるメッセージが表示されます。
  6. [条件の編集] パネルを閉じたら、[権限の編集] パネルでもう一度 [保存] をクリックし、Cloud IAM ポリシーを更新します。

gcloud コマンド

Cloud IAM ポリシーは、読み取り、変更、書き込みのパターンを使用して設定されます。

gcloud projects get-iam-policy コマンドを実行し、プロジェクトの現在の Cloud IAM ポリシーを取得します。次の例では、JSON バージョンのポリシーがディスク上のパスにダウンロードされます。

コマンド:

gcloud projects get-iam-policy [PROJECT-ID] --format json > [FILE-PATH]

JSON 形式の Cloud IAM ポリシーがダウンロードされます。

{
      "bindings": [
        {
          "members": [
            "user:example@gmail.com"
          ],
          "role": "roles/bigquery.dataViewer",
          "condition": {
              "title": "Duration_3_months",
              "description": "Expires in 3 months on 2019-10-12",
              "expression":
                "request.time > timestamp(\"2019-07-12T07:00:00.000Z\") &&
                request.time < timestamp(\"2019-10-12T07:00:00.000Z\")"
          }
        }
      ],
      "etag": "BwWKmjvelug=",
      "version": 3
    }

ポリシーから条件付きロール バインディングを削除するには、次のように condition ブロックを削除します。

{
      "bindings": [
        {
          "members": [
            "user:example@gmail.com"
          ],
          "role": "roles/bigquery.dataViewer",
        }
      ],
      "etag": "BwWKmjvelug=",
      "version": 3
    }

無条件のロール バインディングで必要となるのはポリシー バージョン 1 のみですが、version3 に設定されたままなので、ご注意ください。条件付きロール バインディングと無条件のロール バインディングの両方でポリシーを設定する場合は、常に最も高いポリシー バージョン番号を使用することをおすすめします。詳細については、バージョンの要件をご覧ください。バージョン 263.0.0 以降の gcloud ツールを使用している場合は、最新のポリシー バージョンに更新されます。

次に、gcloud projects set-iam-policy コマンドを実行して、更新されたポリシーを設定します。

gcloud projects set-iam-policy [PROJECT-ID] [FILE-PATH]

更新されたポリシーが適用され、example@gmail.com の条件付きロール バインディングが削除されます。ロール バインディングの有効期限もなくなります。

REST API

projects.getIamPolicy() を呼び出し、プロジェクトの現在の Cloud IAM ポリシーを取得します。

POST https://cloudresourcemanager.googleapis.com/v1/projects/[PROJECT-ID]:getIamPolicy

リクエストの本文は次のように設定されます。

{
      "options": {
        "requestedPolicyVersion": 3
      }
    }

レスポンスの本文には、プロジェクトの Cloud IAM ポリシーが格納されます。

{
      "bindings": [
        {
          "members": [
            "user:example@gmail.com"
          ],
          "role": "roles/bigquery.dataViewer",
          "condition": {
              "title": "Duration_3_months",
              "description": "Expires in 3 months on 2019-10-12",
              "expression":
                "request.time > timestamp(\"2019-07-12T07:00:00.000Z\") &&
                request.time < timestamp(\"2019-10-12T07:00:00.000Z\")"
          }
        }
      ],
      "etag": "BwWKmjvelug=",
      "version": 3
    }

ポリシーから条件付きロール バインディングを削除するには、次のように condition ブロックを削除します。

{
      "bindings": [
        {
          "members": [
            "user:example@gmail.com"
          ],
          "role": "roles/bigquery.dataViewer",
        }
      ],
      "etag": "BwWKmjvelug=",
      "version": 3
    }

無条件のロール バインディングで必要となるのはポリシー バージョン 1 のみですが、version3 に設定されたままなので、ご注意ください。条件付きロール バインディングと無条件のロール バインディングの両方でポリシーを設定する場合は、常に最も高いポリシー バージョン番号を使用することをおすすめします。詳細については、バージョンの要件をご覧ください。

プロジェクトに更新された Cloud IAM ポリシーを設定するには、projects.setIamPolicy() を呼び出し、更新されたポリシーをリクエストの本文に含めます。

POST https://cloudresourcemanager.googleapis.com/v1/projects/[PROJECT-ID]:setIamPolicy

レスポンスは更新されたポリシーになり、条件付きバインディングはなくなります。