Access Context ManagerでGoogle CloudコンソールとAPIへのアクセスを制限する

記事タイトルとURLをコピーする

G-gen の武井です。当記事では、Access Context Manager を使い、Google Cloud コンソール と API へのアクセスを制限する方法について解説します。

はじめに

概要

当記事ではデバイス情報、アカウント情報、接続状況などの背景情報 (コンテキスト) にもとづき、Google Cloud の Web コンソールや、gcloud コマンドライン・SDK を使った Google Cloud API へのアクセス制限方法について解説します。

実現できること

Google Cloud 環境の利用者に対し、接続元 IP アドレスや端末シリアル等のデバイスポリシーといった、コンテキストベースのルール (アクセスレベル) にもとづくアクセス制御が行えます。

アクセスレベルで定義した条件に違反する利用者は、コンソール画面にアクセスできないほか、CLI や SDK を使った環境操作もできなくなります。

アクセスレベル

アクセスレベルは Access Context Manager で作成できます。

以下の要素を条件として指定できますが、デバイスポリシーを使ってルールを作成する場合は Chrome Enterprise Premium (旧 BeyondCorp Enterprise) のライセンス契約が必要です。

属性 説明 補足
IPアドレス ・IPv4 アドレス
・IPv6 アドレス
・プライベート IP は不可
地域 ・国名コード (JP等) -
アクセスレベルの依存関係 ・他のアクセスレベル -
プリンシパル ・ユーザーアカウント
・サービスアカウント
・グループは指定不可
・コンソールからの設定不可
(gcloud / API からのみ設定可)
デバイスポリシー ・画面のロック
・管理者の承認
・会社所有のデバイス (シリアル)
・ストレージの暗号化
・OS ポリシー
・CEP ライセンスが必要

アーキテクチャ

概要

設定としては、Access Context Manager で作成したアクセスレベルを、アクセス制限対象のユーザーをグルーピングした Google グループに紐づけます。

これにより、アクセスレベルに合致しないユーザーは、Google Cloud コンソールや Cloud APIs へのアクセスが制限される仕組みです。

必要なコンポーネント 役割
Endpoint Verification (任意) アクセス制限対象ユーザーのデバイス属性情報の収集に使用
Google グループ (必須) アクセス制限対象ユーザーのグルーピングに使用
アクセスレベル (必須) アクセス制限の条件 (ホワイトリスト) として使用

アクセス制限の対象ユーザー

当仕組みにおけるアクセス制限の対象ユーザーは、アクセスレベルを紐づけた Google グループに所属する、同一組織 (上図でいう example.co.jp) のユーザーのみです。

同一組織であっても当該グループに属さないユーザーや組織外のユーザーに対しては、当仕組みを用いたアクセス制限の効力が及ばない (無制限でアクセス可能である) という点にご留意ください。

組織外のユーザーは、当該グループに属していたとしても制限の対象とはなりません。

組織外ユーザーに対するアクセス制限

上記の理由から、組織外ユーザーからのアクセスを制限したい場合、別の仕組みによる保護を検討してください。以下はその例です。

  • 組織のポリシー (constraints/iam.allowedPolicyMemberDomains) で当該組織上での IAM Policy 設定を禁止する
  • VPC Service Controls で Cloud APIs へのアクセスを禁止する

参考:ドメイン別の ID の制限
参考:VPC Service Controlsを分かりやすく解説 (G-gen Tech Blog)

実際にやってみた (デモ)

説明

このデモでは、端末のシリアル番号をアクセスレベルに組み込み、Cloud コンソールや gcloud による Cloud APIs に対するアクセス制限が実現できるかを確認します。

以下の順で設定を行い、最後に動作確認を行います。

Admin コンソールでの設定

  1. シリアル番号の収集、登録
  2. Google グループの作成

Cloud コンソールでの設定

  1. アクセスレベルの作成
  2. Google グループとアクセスレベルの紐づけ (アクセス制限の有効化)

動作確認

  1. Cloud コンソールへのアクセス
  2. gcloud CLI の実行

シリアル番号の収集、登録

端末のシリアル番号を使ってアクセス制限を実施する場合、操作端末のシリアル番号を会社所有のインベントリに登録します。

  • 操作端末を Google Workspace の管理コンソール上のデバイスとして登録
  • デバイスとして登録された操作端末のシリアル番号を会社所有のインベントリに登録

操作端末をデバイスに登録
デバイスに登録した操作端末のシリアル番号を、会社所有のインベントリに登録

手順の詳細は以下の公式ガイドをご参照ください。

Google グループの作成

アクセス制限対象のユーザーをグルーピングするため、Google グループを作成します。

アクセス制限対象者をGoogle グループでグルーピング

手順の詳細は以下の公式ガイドをご参照ください。

アクセスレベルの作成

次に、Cloud コンソールから Access Context Manager を選択し、アクセスレベルを作成します。

今回のデモでは端末のシリアル番号を使ってアクセス制限を行うので、条件にデバイスポリシー (会社所有のデバイスが必要)を選択します。

アクセスレベルの条件にはデバイスポリシーの「会社所有のデバイスが必要」を選択
作成されたアクセスレベル

手順の詳細は以下の公式ガイドをご参照ください。

Google グループとアクセスレベルの紐づけ

Google グループとアクセスレベルを紐づけ、Cloud コンソールや API へのアクセス制御を有効化します。

任意のプロジェクトを選択した状態で、検索バーで chrome enterprise premium と入力してサービスを選択したら、CLOUD コンソールと API へのアクセスを管理 をクリックします。

その後、アクセスを管理 > 追加の順で遷移したら Google グループとアクセスレベルを紐づけます。

アクセスを管理をクリック
追加をクリック
グループとアクセスレベルを紐づけて保存する

手順の詳細は以下の公式ガイドをご参照ください。

Cloud コンソールへのアクセス

以下の条件で動作確認を行います。

# アカウント (所属グループ) シリアル番号
1 yutakei@example.co.jp (restrict@example.co.jp) 会社所有のインベントリに登録
2 yutakei@example.co.jp (restrict@example.co.jp) 会社所有のインベントリに未登録

#1 の結果

操作端末のシリアル番号がアクセスレベルに合致するため、Cloud コンソールへアクセスできました。

アクセスレベルに合致したため、Cloud コンソールにアクセスできた

#2 の結果

操作端末のシリアル番号がアクセスレベルに合致しないため、Cloud コンソールへのアクセスが制限されました。

アクセスレベルに合致しないため、Cloud コンソールへのアクセスが制限された

gcloud CLI の実行

前述の条件で動作確認を行います。

#1 (会社所有のインベントリに登録された端末) の結果

操作端末のシリアル番号がアクセスレベルに合致するため、gcloud auth logingcloud auth application-default login コマンドが成功しました。

$ gcloud auth login
Your browser has been opened to visit:
  
中略
  
You are now logged in as [yutakei@example.co.jp].
Your current project is [cep-demo-prj].  You can change this setting by running:
  $ gcloud config set project PROJECT_ID
$ gcloud auth application-default login
Your browser has been opened to visit:
  
中略
  
Credentials saved to file: [/home/yutakei/.config/gcloud/application_default_credentials.json]
  
These credentials will be used by any library that requests Application Default Credentials (ADC).
  
Quota project "cep-demo-prj" was added to ADC which can be used by Google client libraries for billing and quota. Note that some services may still bill the project owning the resource.

#2 (会社所有のインベントリに登録された端末) の結果

操作端末のシリアル番号がアクセスレベルに合致しないため、gcloud auth logingcloud auth application-default login コマンドが失敗しました。

$ gcloud auth login
Your browser has been opened to visit:
  
中略
  
ERROR: Access was blocked by Context Aware Access. If you are using gcloud in an SSH session and your organization requires gcloud from a company registered device, please first RDP into your remote machine and log into Chrome.
ERROR: (gcloud.auth.login) (access_denied) Account restricted
$ gcloud auth application-default login
Your browser has been opened to visit:
  
中略
  
ERROR: Access was blocked by Context Aware Access. If you are using gcloud in an SSH session and your organization requires gcloud from a company registered device, please first RDP into your remote machine and log into Chrome.
ERROR: (gcloud.auth.application-default.login) (access_denied) Account restricted

関連記事

blog.g-gen.co.jp

武井 祐介 (記事一覧)

クラウドソリューション部所属。G-gen唯一の山梨県在住エンジニア

Google Cloud Partner Top Engineer 2025 選出。IaC や CI/CD 周りのサービスやプロダクトが興味分野です。

趣味はロードバイク、ロードレースやサッカー観戦です。