フォーム読み込み中
2022年12月17日掲載
この記事は、ソフトバンク Advent Calendar2022の17日目の記事になります。
BeyondCorp Enterprise を利用して組織内のユーザーに対するGoogle Cloud コンソールと Google Cloud API の保護機能手順をまとめました。指定されたIPアドレスやユーザーIDからのアクセスを許可・拒否することができます。
BeyondCorp Enterprise とは、Google Cloud のゼロトラスト ソリューションです。従業員がVPNを利用せずともどこからでも安全に業務ができるようにするためにリリースされました。
在宅勤務が浸透し、主要なアプリケーションやデータの保存場所がクラウド上に存在するようになった昨今。アプリケーションやサービスへ安全にアクセスできるようにしたり、さまざまな脅威からデータを保護したりといったセキュリティ対策は避けては通れない道です。
BeyondCorp Enterprise を利用することで、多様なワークスタイルに柔軟に対応しながら社内セキュリティの向上を実現することができます。
BeyondCorp Enterprise で設定できるセキュリティ対策はいくつかあります。
その中でもGoogle Cloud コンソールと Google Cloud API の保護機能は、その名の通りGoogle Cloud コンソール や Google Cloud API (Google Cloud CLI を含む)に対するアクセスをコンテキスト ベースのルールによって制限することができる機能です。定義された条件を満たす組織内のユーザーだけがアクセスできるようになります。
Identity and Access Management(IAM)ではユーザーIDやサービスアカウントに対してロールを付与することでリソースへの操作権限を制御しますが、BeyondCorp Enterprise でのGoogle Cloud コンソールと Google Cloud API の保護機能ではアクセスしようするユーザーのIPアドレスやデバイスの属性などを判断して制御することが可能です。条件を満たさなければGoogle Cloud コンソール にさえアクセスすることができません。
今回はGoogle Cloud コンソールと Google Cloud API の保護機能の中でもIPアドレスでの制御とユーザーIDでの制御について、実際に設定した際の手順と注意するポイントを解説したいと思います。
なお、検証した手順は2022年12月現在の仕様となります。最新の仕様および手順については公式ドキュメントをご覧ください。
Google Cloud コンソールと Google Cloud API の保護
Google Cloud コンソールと Google Cloud API の保護機能を利用するにあたり、作業ユーザーへ以下の組織に対する権限付与が必要となります。
<組織に対して必要なロール>
・組織閲覧者(roles/resourcemanager.organizationViewer)
・Access Context Manager 編集者(roles/accesscontextmanager.policyEditor)
・Cloud アクセス バインディング管理者(roles/accesscontextmanager.gcpAccessAdmin)
※Google Workspace の特権管理者であればCloud アクセス バインディング管理者のロールは不要
また、アクセス制限をかける対象はGoogleグループ で指定する必要があります。
そのため事前にGoogleグループ を作成し、制限をかけたいユーザー全員をグループに追加しておきます。
なお、後述するアクセス バインディングでアクセス制限を設定できるのは指定したGoogleグループ に所属するユーザーのみです。グループに所属していないユーザーは通常通りアクセスできてしまいますのでご注意ください。
アクセス元のIPアドレスを指定したルール(アクセスレベル)に基づいてアクセス制御することが可能です。
例えば企業のネットワーク内からのアクセスだけ許可したい場合、アクセスレベルに企業のIPアドレス範囲を指定することができます。
★注意するポイント★
現時点でアクセスレベルにはプライベートIPアドレスの範囲を指定することができません。
以下の参考リンク先に以下の通り記載されています。
「アクセスレベルには、プライベート IP 範囲(192.168.0.0/16 または 172.16.0.0/12 など)を含めることはできません。」
参考リンク:企業ネットワークへのアクセスを制限する
IPアドレスのアクセスレベルはGUIおよびCLIで作成可能です。
今回はGoogle Cloud コンソールから作成してみました。
<IPアドレスを指定したアクセスレベルの作成>
1. 組織を選択した状態で[Access Context Manager]にアクセス
2. [CREATE ACCESS LEVEL]をクリック
3. [アクセスレベルのタイトル]を入力し、[基本モード]を選択
4. アクセス許可したい場合は[TRUE]、拒否したい場合は[FALSE]を選択して[IPサブネットワーク]を選択
5. IPアドレスを入力し、[保存]をクリック
複数の条件を指定したい場合は[別の条件を追加]から追加することができます。
そのときいずれか1つの条件のみの[OR]もしくはすべての条件を満たす[AND]のどちらかにするか選ぶことができます。
アクセスレベルを作成したあとは対象のGoogleグループとマッピングするためにアクセス バインディングを作成します。
GUIまたはCLIどちらからでも設定できますが、こちらについてもコンソールから設定してみます。
<アクセス バインディングの設定(GUI)>
1. 組織を選択した状態で[BeyondCorp Enterprise]にアクセス
2. [アクセスを管理]をクリック
3. [追加]をクリックし、対象のGoogleグループと先ほど作成したアクセスレベルを選択
4. アクセス バインディングが設定されていることを確認
これで対象のGoogleグループ配下の組織内ユーザーは指定されたIPアドレスからのみアクセスが許可されるようになりました。
以下の画像は指定されたIPアドレス以外からGoogle Cloud コンソールにアクセスした場合の画面です。アクセス バインディングが有効になっている場合このようなエラー画面が表示されるようになります。
★注意するポイント★
アクセス バインディング は現時点で組織内のユーザーにのみ有効です。
組織外のユーザー(ドメインの違うアカウント)をGoogleグループ に追加していたとしてもアクセス制限されることはありません。組織外のユーザーは通常通りアクセスできてしまいます。
個人的にいつか組織外ユーザーにも適用されるようになってほしいと思っています。
特定のユーザーIDやサービスアカウントを直接指定してアクセス制限をかけることも可能です。例えばGoogleグループ内のユーザーにシステム管理者が所属していたとして、その人だけアクセスを許可したい場合に利用できます。
ユーザーIDやサービスアカウントのアクセスレベルはCLIでのみ作成可能です。現時点ではGoogle Cloud コンソールから作成することができません。
今回は特定のユーザーIDを許可するアクセスレベルを作成します。
<ユーザーIDを指定したアクセスレベルの作成>
1. Cloud Shellを開く
2. アクセスレベルを指定するYAMLファイルを作成
以下の形式でアクセス制限したいユーザーIDを記載します。
<CONDITIONS.yaml>
- members:
- user:user1@xxxxx.jp
※サービスアカウントを指定する場合は以下の形式にします。
- members:
- serviceAccount:service@project.iam.gserviceaccount.com
3. アクセスレベル作成コマンドを実行
gcloud access-context-manager levels create ACCESS_LEVEL_NAME \
--title ACCESS_LEVEL_NAME \
--basic-level-spec CONDITIONS.yaml \
--combine-function=OR
–basic-level-specは作成したYALMファイル名を指定します。
--combine-functionは[OR]または[AND]を指定します。
4. アクセスレベルが作成されていることを確認
★注意するポイント★
現時点でアクセスレベルにグループアドレスを指定しても制御できません。アクセスバインディング設定の際にはGoogleグループを指定しますが、アクセスレベルでは「ユーザーID単体もしくはサービスアカウント単体のみ」サポートされているためグループアドレスを指定したとしてもその配下のユーザーには制御がかかりません。
参考リンク:アクセスレベルの属性(プリンシパルの有効な値部分)
複数のユーザーやサービスアカウントをアクセスレベルに登録したい場合は、対象のユーザーやサービスアカウントをすべて登録する必要があります。
なお、ユーザーIDを指定する場合も同じドメインの組織内ユーザーのみ有効となります。
組織外ユーザーをアクセスレベルに登録しても制御することはできませんのでご注意ください。
アクセスレベルが作成できたのでアクセス バインディングを設定します。
IPアドレスの場合と同じくGoogle Cloud コンソールからでも設定できますが、今回はこのままコマンドで設定してみます。
<アクセス バインディングの設定(CLI)>
1. アクセス バインディング作成コマンドを実行する
gcloud access-context-manager cloud-bindings create \
--group-key GROUP_ID \
--level accessPolicies/POLICY_ID/accessLevels/ACCESS_LEVEL_NAME \
--organization ORG_ID
–group-keyはGoogleグループのIDを指定します。
–levelは作成したアクセスレベルの形式を指定します。アクセスレベルの形式を確認する場合は以下のコマンドを実行します。
(アクセスレベル確認コマンド)gcloud access-context-manager levels list --format=list
2. アクセス バインディングが作成されていることを確認
これによりGoogleグループのユーザーは特定のユーザー以外アクセス拒否され、アクセスレベルで指定したユーザーのみアクセスできるようになります。
以下の画像はアクセス許可していないユーザーでGoogle Cloud コンソールにアクセスした場合の画面です。同じようにアクセスできないエラー画面が表示されます。
より細かく制御したい場合は、ユーザーIDだけではなくIPアドレスもアクセスレベルに追加するなどして条件を増やしていっても良いかもしれません。
BeyondCorp Enterprise のGoogle Cloud コンソールと Google Cloud API へのアクセス制御の設定方法について、IPアドレス指定のケースとユーザーID指定のケースの手順をご紹介しました。基本的な流れは以下の通りです。
①制御対象のGoogleグループを作成
②アクセスレベルで条件を指定
③アクセス バインディングを設定
実際に手順を実施してみて注意が必要なポイントがいくつか出てきましたので、以下にまとめます。
・現時点でアクセスレベルにプライベートIPアドレスの範囲を指定不可
・現時点でアクセスレベルにグループアドレスを指定しても制御不可
・現時点で組織外ユーザーに対する制御不可(Googleグループに入っていても制御不可)
今回ご紹介したケース以外にも、ユーザーのデバイス属性を条件にしたりカスタムアクセスレベルを作成してさらにきめ細やかな条件を設定することが可能です。
これらはGoogle Cloud のベースライン機能ではなくBeyondCorp Enterprise でのみ利用できる機能となっています。機能と料金については以下の資料をご覧ください。
条件に該当するページがございません