一時アクセスの構成

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

始める前に

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

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

条件付きポリシーを使用してリソースに時間制限付きアクセスを許可し、指定した有効期限後はリソースにアクセスできないようにすることができます。

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

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

Console

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

    [IAM] ページを開く

  2. [プロジェクトを選択] をクリックし、プロジェクトを選択して [開く] をクリックします。

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

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

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

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

    条件ビルダー:

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

    条件エディタ:

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

      request.time > timestamp("2020-07-01T00: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:user@example.com"
          ],
          "role": "roles/iam.securityReviewer"
        }
      ],
      "etag": "BwWKmjvelug=",
      "version": 1
    }
    

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

{
      "bindings": [
        {
          "members": [
            "user:user@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] [FILE-PATH]
    

新しい条件付きポリシーが適用され、user@example.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:user@example.com"
          ],
          "role": "roles/iam.securityReviewer"
        }
      ],
      "etag": "BwWKmjvelug=",
      "version": 1
    }
    

アクセス権に有効期限を定めてポリシーを構成するには、次の条件式(強調表示された部分)を追加します。タイムスタンプは自身のものに置き換えます。version 値を 3 に更新したことを確認します。

{
      "bindings": [
        {
          "members": [
            "user:user@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
    }

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

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

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

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

条件付きポリシーを使用して、特定の曜日や時間帯にのみリソースへの定期的なアクセスを許可できます。

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

プロジェクト リソースへのアクセスを、特定の曜日または時間帯のみに付与するには、次のように操作します。

Console

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

    [IAM] ページを開く

  2. [プロジェクトを選択] をクリックし、プロジェクトを選択して [開く] をクリックします。

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

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

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

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

    条件ビルダー:

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

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

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

      1. [演算子] プルダウンから、[次の日時以後] を選択します。
      2. [時間帯] プルダウンから、[9](午前 9:00)を選択します。
      3. [タイムゾーンを選択] のプルダウンで、目的のタイムゾーンをリストから選択します。
      4. [条件タイプ] プルダウンから、[時間] [スケジュール] [時間帯] を選択します。
      5. [演算子] プルダウンから、[次の日時以前] を選択します。このように選択した場合、「以前」となっていますが論理的には 17:00 から 17:59 の間のすべての時間と評価されます。4:59 PM にアクセスが期限切れになるように設定するには、時間が 17 ではなく 16 に設定されていることを確認します。
      6. [時間帯] プルダウンから、[17](午後 5 時)を選択します。
      7. [タイムゾーンを選択] のプルダウンで、目的のタイムゾーンをリストから選択します。
      8. [保存] をクリックして条件を適用します。
      9. [条件の編集] パネルを閉じたら、[権限の編集] パネルでもう一度 [保存] をクリックし、Cloud 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. [条件の編集] パネルを閉じたら、[権限の編集] パネルでもう一度 [保存] をクリックし、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:user@example.com"
          ],
          "role": "roles/bigquery.dataViewer"
        }
      ],
      "etag": "BwWKmjvelug=",
      "version": 1
    }
    

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

{
      "bindings": [
        {
          "members": [
            "user:user@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] [FILE-PATH]
    

新しい条件付きポリシーが適用され、user@example.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:user@example.com"
          ],
          "role": "roles/bigquery.dataViewer"
        }
      ],
      "etag": "BwWKmjvelug=",
      "version": 1
    }
    

スケジュール設定されたアクセス権でポリシーを構成するには、次の条件式(強調表示された部分)を追加します。タイムスタンプは自身のものに置き換えます。version 値を 3 に更新したことを確認します。

{
      "bindings": [
        {
          "members": [
            "user:user@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
    }

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

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

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

次のステップ