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 コンソールでの設定
- シリアル番号の収集、登録
- Google グループの作成
Cloud コンソールでの設定
- アクセスレベルの作成
- Google グループとアクセスレベルの紐づけ (アクセス制限の有効化)
動作確認
- Cloud コンソールへのアクセス
- gcloud CLI の実行
シリアル番号の収集、登録
端末のシリアル番号を使ってアクセス制限を実施する場合、操作端末のシリアル番号を会社所有のインベントリ
に登録します。
- 操作端末を Google Workspace の管理コンソール上の
デバイス
として登録 - デバイスとして登録された操作端末のシリアル番号を
会社所有のインベントリ
に登録
手順の詳細は以下の公式ガイドをご参照ください。
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 コンソールへアクセスできました。
#2 の結果
操作端末のシリアル番号がアクセスレベルに合致しないため、Cloud コンソールへのアクセスが制限されました。
gcloud CLI の実行
前述の条件で動作確認を行います。
#1 (会社所有のインベントリに登録された端末) の結果
操作端末のシリアル番号がアクセスレベルに合致するため、gcloud auth login
や gcloud 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 login
や gcloud 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
関連記事
武井 祐介 (記事一覧)
クラウドソリューション部所属。G-gen唯一の山梨県在住エンジニア
Google Cloud Partner Top Engineer 2025 選出。IaC や CI/CD 周りのサービスやプロダクトが興味分野です。
趣味はロードバイク、ロードレースやサッカー観戦です。
Follow @ggenyutakei