一時アクセスの構成

このトピックでは、Identity and Access Management(IAM)ポリシーで条件付きロール バインディングを使用して、Google Cloud リソースに対する一時的な(期限付きの)アクセスを設定する方法について説明します。日時属性を使用すると、特定のリソースにアクセスするときに時間ベースの制御を適用できます。たとえば、指定の時刻に開始および停止するプロジェクトや、スケジュール設定された定期的なプロジェクトへの一時的なアクセス権を付与できます。

始める前に

  • IAM の条件付きロール バインディングの基本を理解するには、Conditions の概要をご覧ください。
  • 条件式で使用できる日時属性を確認してください。
  • 日時属性は現在、すべての Google Cloud サービスでサポートされています。

一時的なアクセスを許可する

条件付きロール バインディングを使用して、リソースへの時間制限付きアクセス権を付与し、指定された有効期限後にユーザーがリソースにアクセスできないようにします。

たとえば、次のようなシナリオが考えられます。ExampleCo の情報セキュリティ ポリシーでは、本番環境のプロジェクトのリソースに従業員が無期限にアクセスできないことを強調しています。以前は、エンジニアの緊急のニーズを満たすために、管理者が IAM の条件付きロール バインディングの設定と削除を手動で行っていました。これに対して ExampleCo では、管理上のオーバーヘッドを削減するために、バインディングの終了日を日付と時刻の条件の形で指定する条件付きロール バインディングを構成できます。

プロジェクト リソースへの期限付きアクセス権を付与するには、次のように操作します。

Console

  1. Cloud Console で [IAM] ページに移動します。

    IAM ページに移動

  2. リストから目的のメンバーを見つけて、 ボタンをクリックします。

  3. [権限の編集] パネルで、条件を構成するロールを見つけます。次に [条件] の下にある [条件を追加] をクリックします。

  4. [条件の編集] パネルで、条件のタイトルとオプションの説明を入力します。

  5. 条件ビルダーまたは条件エディタを使用して条件式を追加できます。条件ビルダーには、目的の条件タイプ、演算子、その他の式に関する適用可能な詳細を選択するためのインタラクティブなインターフェースが用意されています。条件エディタには、CEL 構文を使用して手動で式を入力するためのテキストベースのインターフェースが用意されています。

    条件ビルダー:

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

    条件エディタ:

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

      request.time > timestamp("2020-07-01T00:00:00.000Z")
    2. 式を入力したら、右上のテキスト ボックスの上にある [リンターを実行] をクリックして、CEL 構文を検証することもできます。

    3. [保存] をクリックして条件を適用します。

    4. [条件の編集] パネルを閉じたら、[権限の編集] パネルでもう一度 [保存] をクリックし、IAM ポリシーを更新します。

gcloud コマンド

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

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

コマンド:

gcloud projects get-iam-policy project-id --format=json > filepath

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

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

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

{
  "bindings": [
    {
      "members": [
        "user:project-owner@example.com"
      ],
      "role": "roles/owner"
    },
    {
      "members": [
        "user:travis@example.com"
      ],
      "role": "roles/iam.securityReviewer",
      "condition": {
        "title": "Expires_July_1_2020",
        "description": "Expires on July 1, 2020",
        "expression":
          "request.time < timestamp('2020-07-01T00:00:00.000Z')"
      }
    }
  ],
  "etag": "BwWKmjvelug=",
  "version": 3
}

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

gcloud projects set-iam-policy project-id filepath

新しいポリシーが適用され、travis@example.com のロールの付与は、指定された時刻に期限切れになります。

REST API

読み取り、変更、書き込みのパターンを使用して、特定の時間までアクセスを許可します。

まず、プロジェクトの IAM ポリシーを読み取ります。

Resource Manager API の projects.getIamPolicy メソッドは、プロジェクトの IAM ポリシーを取得します。

後述のリクエストのデータを使用する前に、次のように置き換えます。

  • project-id: Google Cloud プロジェクト ID
  • policy-version: 返されるポリシー バージョン。リクエストでは、最新のポリシー バージョン(ポリシー バージョン 3)を指定する必要があります。詳細については、ポリシーの取得時にポリシー バージョンを指定するをご覧ください。

HTTP メソッドと URL:

POST https://cloudresourcemanager.googleapis.com/v1/projects/project-id:getIamPolicy

JSON 本文のリクエスト:

{
  "options": {
    "requestedPolicyVersion": policy-version
  }
}

リクエストを送信するには、次のいずれかのオプションを展開します。

次のような JSON レスポンスが返されます。

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

次に、特定の時間までアクセスを許可するようにポリシーを変更します。version フィールドを値 3 に変更します。

{
  "version": 3,
  "etag": "BwWKmjvelug=",
  "bindings": [
    {
      "role": "roles/owner",
      "members": [
        "user:project-owner@example.com"
      ]
    },
    {
      "role": "roles/iam.securityReviewer",
      "members": [
        "user:travis@example.com"
      ],
      "condition": {
        "title": "Expires_July_1_2020",
        "description": "Expires on July 1, 2020",
        "expression":
          "request.time < timestamp('2020-07-01T00:00:00.000Z')"
      }
    }
  ]
}

最後に、更新されたポリシーを記述します。

Resource Manager API の projects.setIamPolicy メソッドは、プロジェクトの新しい IAM ポリシーをリクエストのポリシーとして設定します。

後述のリクエストのデータを使用する前に、次のように置き換えます。

  • project-id: Google Cloud プロジェクト ID

HTTP メソッドと URL:

POST https://cloudresourcemanager.googleapis.com/v1/projects/project-id:setIamPolicy

JSON 本文のリクエスト:

{
  "policy": {
    "version": 3,
    "etag": "BwWKmjvelug=",
    "bindings": [
      {
        "role": "roles/owner",
        "members": [
          "user:project-owner@example.com"
        ]
      },
      {
        "role": "roles/iam.securityReviewer",
        "members": [
          "user:travis@example.com"
        ],
        "condition": {
          "title": "Expires_July_1_2020",
          "description": "Expires on July 1, 2020",
          "expression":
            "request.time < timestamp('2020-07-01T00:00:00.000Z')"
        }
      }
    ]
  }
}

リクエストを送信するには、次のいずれかのオプションを展開します。

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


曜日や時間帯に基づいてアクセスを管理する

条件付きロール バインディングを使用すると、リソースに対してアクセス権を特定の曜日や時間帯に定期的に付与できます。

たとえば、次のシナリオを考えてみましょう。ExampleCo には品質保証プロジェクトがあります。QA チーム全体では、作業を完了するために高い権限を持つロールが必要です。また、ExampleCo は勤務時間を月曜日から金曜日の午前 9 時から午後 5 時までに制限する現地の労働法を遵守する必要があります。このとき、ExampleCo で、日付と時刻の条件を使用して、従業員が既定の勤務日や勤務時間内にのみ Google Cloud にアクセスできるようにするとします。

プロジェクト リソースへのアクセスを、特定の曜日または時間帯のみに付与するには、次の手順を行います。

Console

  1. Cloud Console で [IAM] ページに移動します。

    IAM ページに移動

  2. リストから目的のメンバーを見つけて、 ボタンをクリックします。

  3. [権限の編集] パネルで、条件を構成するロールを見つけます。次に [条件] の下にある [条件を追加] をクリックします。

  4. [条件の編集] パネルで、条件のタイトルとオプションの説明を入力します。

  5. 条件ビルダーまたは条件エディタを使用して条件式を追加できます。条件ビルダーには、目的の条件タイプ、演算子、その他の式に関する適用可能な詳細を選択するためのインタラクティブなインターフェースが用意されています。条件エディタには、CEL 構文を使用して手動で式を入力するためのテキストベースのインターフェースが用意されています。

    条件ビルダー:

    1. [追加] をクリックします。
    2. [条件タイプ] プルダウンから、[時間] [スケジュール] [曜日] の順に選択します。
    3. [演算子] プルダウンから、[次の日時以後] を選択します。
    4. [曜日] プルダウンから、[月曜日] を選択します。
    5. [タイムゾーンを選択] のプルダウンで、目的のタイムゾーンをリストから選択します。
    6. [および] 演算子が左側で選択されていることを確認し、[追加] をもう一度クリックします。
    7. [条件タイプ] プルダウンから、[時間] [スケジュール] [曜日] の順に選択します。
    8. [演算子] プルダウンから、[次の日時以前] を選択します。
    9. [曜日] プルダウンから、[金曜日] を選択します。
    10. [タイムゾーンを選択] のプルダウンで、目的のタイムゾーンをリストから選択します。

    この時点で、月曜日から金曜日までのみアクセス権を構成しています。次に、午前 9 時から午後 5 時までのアクセスを構成します。

    1. [および] 演算子が左側で選択されていることを確認し、[追加] をもう一度クリックします。
    2. [条件タイプ] プルダウンから、[時間] [スケジュール] [時間帯] の順に選択します。

      1. [演算子] プルダウンから、[次の日時以後] を選択します。
      2. [時間帯] プルダウンから、[9](午前 9:00)を選択します。
      3. [タイムゾーンを選択] のプルダウンで、目的のタイムゾーンをリストから選択します。
      4. [条件タイプ] プルダウンから、[時間] [スケジュール] [時間帯] の順に選択します。
      5. [演算子] プルダウンから、[次の日時以前] を選択します。このように選択した場合、「on」は論理的には 17:00(午後 5 時)から 17:59(午後 5 時 59 分)の間のすべての時間と評価されます。4:59 PM にアクセスが期限切れになるように設定するには、時間が 17 ではなく 16 に設定されていることを確認します。
      6. [時間帯] プルダウンから、[17](午後 5 時)を選択します。
      7. [タイムゾーンを選択] のプルダウンで、目的のタイムゾーンをリストから選択します。
      8. [保存] をクリックして条件を適用します。
      9. [条件の編集] パネルを閉じたら、[権限の編集] パネルでもう一度 [保存] をクリックし、IAM ポリシーを更新します。

      これで、月曜から金曜の午前 9 時から午後 5 時にアクセスが構成されました。

      条件エディタ:

      1. [条件エディタ] タブをクリックし、次の式を入力します。プレースホルダ値はご自分のものに置き換えてください。

        request.time.getHours("Europe/Berlin") >= 9 &&
        request.time.getHours("Europe/Berlin") <= 17 &&
        request.time.getDayOfWeek("Europe/Berlin") >= 1 &&
        request.time.getDayOfWeek("Europe/Berlin") <= 5
        
      2. 式を入力したら、右上のテキスト ボックスの上にある [リンターを実行] をクリックして、CEL 構文を検証することもできます。

      3. [保存] をクリックして条件を適用します。

      4. [条件の編集] パネルを閉じたら、[権限の編集] パネルでもう一度 [保存] をクリックし、IAM ポリシーを更新します。

gcloud コマンド

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

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

コマンド:

gcloud projects get-iam-policy project-id --format=json > filepath

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

{
  "bindings": [
    {
      "members": [
        "user:project-owner@example.com"
      ],
      "role": "roles/owner"
    },
    {
      "members": [
        "user:rita@example.com"
      ],
      "role": "roles/bigquery.dataViewer"
    }
  ],
  "etag": "BwWKmjvelug=",
  "version": 1
}

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

{
  "bindings": [
    {
      "members": [
        "user:project-owner@example.com"
      ],
      "role": "roles/owner"
    },
    {
      "members": [
        "user:rita@example.com"
      ],
      "role": "roles/bigquery.dataViewer",
      "condition": {
        "title": "Business_hours",
        "description": "Business hours Monday-Friday",
        "expression": "request.time.getHours('Europe/Berlin') >= 9 && request.time.getHours('Europe/Berlin') <= 17 && request.time.getDayOfWeek('Europe/Berlin') >= 1 && request.time.getDayOfWeek('Europe/Berlin') <= 5"
      }
    }
  ],
  "etag": "BwWKmjvelug=",
  "version": 3
}

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

gcloud projects set-iam-policy project-id filepath

新しいポリシーが適用され、rita@example.com のロール付与により、指定された日時の間のアクセスが許可されます。

REST API

読み取り、変更、書き込みのパターンを使用して、スケジュールされたアクセスを許可します。

まず、プロジェクトの IAM ポリシーを読み取ります。

Resource Manager API の projects.getIamPolicy メソッドは、プロジェクトの IAM ポリシーを取得します。

後述のリクエストのデータを使用する前に、次のように置き換えます。

  • project-id: Google Cloud プロジェクト ID
  • policy-version: 返されるポリシー バージョン。リクエストでは、最新のポリシー バージョン(ポリシー バージョン 3)を指定する必要があります。詳細については、ポリシーの取得時にポリシー バージョンを指定するをご覧ください。

HTTP メソッドと URL:

POST https://cloudresourcemanager.googleapis.com/v1/projects/project-id:getIamPolicy

JSON 本文のリクエスト:

{
  "options": {
    "requestedPolicyVersion": policy-version
  }
}

リクエストを送信するには、次のいずれかのオプションを展開します。

次のような JSON レスポンスが返されます。

{
  "version": 1,
  "etag": "BwWKmjvelug=",
  "bindings": [
    {
      "role": "roles/owner",
      "members": [
        "user:project-owner@example.com"
      ]
    },
    {
      "role": "roles/bigquery.dataViewer",
      "members": [
        "user:rita@example.com"
      ]
    }
  ]
}

次に、スケジュールされたアクセスを許可するようにポリシーを変更します。

次の条件式(強調表示された部分)を追加します。タイムスタンプはご自分のものに置き換えてください。version 値が 3 に更新されたことを確認します。

{
  "etag": "BwWKmjvelug=",
  "version": 3,
  "bindings": [
    {
      "role": "roles/owner",
      "members": [
        "user:project-owner@example.com"
      ]
    },
    {
      "role": "roles/bigquery.dataViewer",
      "members": [
        "user:rita@example.com"
      ],
      "condition": {
        "title": "Business_hours",
        "description": "Business hours Monday-Friday",
        "expression":
          "request.time.getHours('Europe/Berlin') >= 9 &&
          request.time.getHours('Europe/Berlin') <= 17 &&
          request.time.getDayOfWeek('Europe/Berlin') >= 1 &&
          request.time.getDayOfWeek('Europe/Berlin') <= 5"
      }
    }
  ]
}

Resource Manager API の projects.setIamPolicy メソッドは、プロジェクトの新しい IAM ポリシーをリクエストのポリシーとして設定します。

後述のリクエストのデータを使用する前に、次のように置き換えます。

  • project-id: Google Cloud プロジェクト ID

HTTP メソッドと URL:

POST https://cloudresourcemanager.googleapis.com/v1/projects/project-id:setIamPolicy

JSON 本文のリクエスト:

{
  "policy": {
    "etag": "BwWKmjvelug=",
    "version": 3,
    "bindings": [
      {
        "role": "roles/owner",
        "members": [
          "user:project-owner@example.com"
        ]
      },
      {
        "role": "roles/bigquery.dataViewer",
        "members": [
          "user:rita@example.com"
        ],
        "condition": {
          "title": "Business_hours",
          "description": "Business hours Monday-Friday",
          "expression": "request.time.getHours('Europe/Berlin') >= 9 && request.time.getHours('Europe/Berlin') <= 17 && request.time.getDayOfWeek('Europe/Berlin') >= 1 && request.time.getDayOfWeek('Europe/Berlin') <= 5"
        }
      }
    ]
  }
}

リクエストを送信するには、次のいずれかのオプションを展開します。

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


次のステップ