【GCP IAM Conditions 簡単解説】条件付きのアクセス制御を実現するNiceな仕組みでした。

IAM Conditionsを使用して、特定の条件下でのみアクセス権をユーザーに付与する方法について説明します。最後のMuscle Conditionsについてもご覧ください。
2024.03.13

概要

IAM制御とは

IAM を使用すると、特定の Google Cloud リソースに対するアクセス権をきめ細かく設定し、他のリソースへのアクセスを防ぐことができます。

まずは、IAM制御の仕組みをおさらいすると「誰が(ユーザー)、どのリソースに、どのようなアクション(役割)を行うことができるか」を定義します。

その中で、この条件の場合、このロール(権限)をこのユーザー(プリンシパル)に付与するといったことを可能してくれる機能がIAM Condintionsです。

条件(Conditions)とは

IAM Conditions では、指定された条件を満たす場合にのみプリンシパルにアクセス権を付与するように設定できます。

指定された条件を満たす場合にのみプリンシパル(ユーザーやサービスアカウント)にアクセス権を付与するように設定できます。

これは、 特定のIPアドレスからのアクセスや会社のオフィスからアクセスを行う従業員にのみアクセス権を付与するということを可能にします。

また、条件はリソースの許可ポリシーとなり、条件式がtrueに評価された場合にのみアクセスが許可されます。
(対照的にDenyが評価された場合に適用されるのが拒否ポリシーとなります)

また、条件は1つのロールバインディングに0 or 1つ設定することができるため(実質上限1つ)、条件を指定する場合には慎重に指定する必要があります。

IAM Conditionsをgcloudコマンドから設定する

IAM ファイルの取り出し

gcloudコマンドでは、既存のIAM 許可ポリシーを取得し、ファイルに書き出してから設定を行います。

gcloud projects get-iam-policy 【project-id】 --format=json > 【iam-conditions.json】

取得したファイルを開くと現在のプロジェクトのロールバインディングを反映しています。
bindingブロックの中にロールの指定やconditionブロックの追加を行います。

conditionブロックの追加

上記の画像では、条件を指定していないため、条件を付与したいメンバーに対してconditonブロックを指定して条件付きアクセス制御を実装していきます。

{
  "condition": {
    "title": "Access_for_5_minutes_on_March_12_2024",
    "description": "Allow access from March 12, 2024, 9:15:00 to March 12, 2024, 09:20:00 UTC",
    "expression": "request.time >= timestamp('2024-03-12T09:15:00.000Z') && request.time < timestamp('2024-03-12T09:20:00.000Z')"
  }
}

今回の条件は「2024年3月12日09時15分」から「2024年3月12日09時20分」までのアクセスを許可します。

conditionブロックはrole:ブロックの下に追記していきます。
下記はyasunari@example.comに対してcompute.networkAdminを先程の日時のみ付与するといったスクリプトになります。

【iam-conditions.json ファイル】

{
  bindings:[
   {
      "members": [
        "user:yasunari@example.com"
      ],
      "role": "roles/compute.networkAdmin",
      "condition": {
        "title": "Access_for_5_minutes_on_March_12_2024",
        "description": "Allow access from March 12, 2024, 09:15:00 to March 12, 2024, 09:20:00 UTC",
        "expression": "request.time >= timestamp('2024-03-12T09:15:00.000Z') && request.time < timestamp('2024-03-12T09:20:00.000Z')"
      }
    }
  ],
"etag": "BwYTbRG1t-Q=",
  "version": 1
}

ちなみに、Common Expression Language(CEL)を使用して、conditionブロックの条件式を定義していきます。

設定の反映

下記のgcloudコマンドを使用して、スクリプトに記述した設定を反映していきます。

gcloud projects set-iam-policy 【project-id】 【iam-conditions.json】

すると、プロジェクトのIAMを見てみると反映されていることがわかります。

詳細も確認することができます。

これで、特定のユーザーに対して、「2024年3月12日09時15分」から「2024年3月12日09時20分」までのアクセスを許可するという条件付きのアクセス制御を設定することができました。

まとめ

今回は特定の条件下でのみアクセス権をユーザーに付与するIAM Conditionsについて解説しました。

具体的には、特定のIPアドレスオフィスからのアクセスに限定して権限を与えることができ、コンソールとgcloudコマンドを使用して設定することが可能です。

このブログで、IAMの条件付きアクセス制御を理解いただけると幸いです。

Muscle Conditions

筋肉でIAM Conditionsを考えてみました。
名前はもちろんMuscle Conditionsです。

条件付きアクセスとは、その条件に応じてあるアクセスを許可するそういった仕組みです。
筋肉にもこのような仕組みがあります。

それはつける筋肉の種類によってできる運動の効率性が変わるといったものです。
よって鍛える筋肉の種類を条件として、運動を選択することによりパフォーマンスアップを狙うことができます。

具体的には、遅筋速筋といった言葉で区別されます。

さらに筋トレを続けていくとタイプaという遅筋と速筋の間をいいとこ取りした筋繊維に変化することが知られています。

主に有酸素運動で遅筋が発達し、高重量のトレーニングで速筋が発達します。
皆さんも筋肉の質と種類を考えてトレーニングをすることで、さらなる筋トレのメリットが受けられるでしょう。