Google Cloudを利用していく上で、必ずセキュリティは意識する必要があります。
Google Cloudはセキュリティ向上のため、組織のポリシーやIAM、VPC Service Controls等様々なサービスを提供しています。
今回はIAMサービスに含まれる、IAMの拒否ポリシーに注目し、ユースケースや実際の利用方法を踏まえて紹介していきます。
拒否ポリシーは弊社の別ブログでも紹介しておりますので、ぜひご確認ください!
また組織のポリシーはこちらのブログで紹介しております。こちらも一緒にご覧いただければと思います。
拒否ポリシーとは
拒否ポリシーの概要は公式ドキュメントでも記載されています。
拒否ポリシーは以下の通りとなります。
- 拒否ポリシーを適用する際は、拒否ルールを設定することで設定可能となる。拒否ルールには特定の権限ロール(get権限、create権限)が対象となる
- 設定されると、基本的に対象プロジェクト/フォルダ/組織で指定した権限の設定が利用できなくなる
- 特定のリソースのみ拒否ポリシー設定を除外することも可能
拒否ポリシーは 特定のIAMポリシーまたはロールに含まれる権限を除外するセキュリティ設定 となります。
組織、フォルダ、プロジェクトに反映可能となります。
拒否ポリシーのメリット・デメリット
では拒否ポリシーのメリット・デメリットを考えてみましょう。
- メリット
- 特定ユーザへの権限制御が可能
- 拒否ポリシーはユーザ及びグループ、サービスアカウントに対して付与できます
- そのため明示的に「このユーザに対してはVPCを作成させたくない」、「このグループアドレス以外はすべて拒否する」といった用途に適用できます
- エラー削減
- 拒否ポリシーを適用することで、ユーザからの「delete」権限を剥奪することが可能となります
- そのため「意図しないリソース削除」といったヒューマンエラーの削減に期待ができます
- 特定ユーザへの権限制御が可能
- デメリット
- 管理対象の増加
- 組織のポリシー同様、拒否ポリシーの運用が既存の運用対応に追加する必要があります
- 設定によっては学習コストの増加も考えられます
- 複雑性の増加
- 拒否ポリシー設定は複雑な設定内容になると、管理自体が難しくなり、複雑性が増加します
- そのため大規模組織上では管理及びトラブルシューティングの実行が行いにくいため、意図しないトラブルが発生する可能性があります
- 管理対象の増加
拒否ポリシーを設定するユースケース
拒否ポリシーを設定するユースケース例は下記の通りとなります。
こちらはあくまでも一例のため、他にも拒否ポリシー設定のユースケースはございます。
- 複数の運用者が分かれる場合の権限管理
- 運用会社が複数社存在しており、作成したカスタムロールまたは定義ロールで一部権限のみ除外したい場合に利用できます
- 運用会社用のカスタムロールを作成し、A社にはcreateをさせるが、B社にはcreateさせないといった対応を実施する際に利用します
- セキュアデータに対してのアクセス管理
- IAM権限を付与することで閲覧可能となりますが、拒否ポリシーを組み合わせることでユーザグループに対して閲覧させないといった事が可能となります
- そのため、「管理者以外のすべてのユーザはアクセスできないようにする」といったことが実現可能となります
拒否ポリシーの設定方法
拒否ポリシーはコマンドベースでの設定となります。
また設定は定義ファイルを作成し設定する必要があります。
今回は例として、VPCネットワークを作成するための権限「compute.networks.create」を制限する拒否ポリシーを作成します。
また作成時の権限として、「拒否管理者」が必要となりますので、IAM権限の付与をお願いします。
定義ファイルの設定
定義ファイルはjson形式で記載します。
サンプルの定義ファイルは下記のとおりとなります。
{
"displayName": "Deny Policy for Create VPC Network",
"rules": [
{
"denyRule": {
"deniedPrincipals": [
"principalSet://goog/public:all"
],
"deniedPermissions": [
"compute.googleapis.com/networks.create"
]
}
}
]
}
定義ファイル内には大きく3つの設定を実施します。詳細は公式ドキュメントをご確認ください。
- deniedPrincipals(必須)
- 拒否ポリシーを適用する範囲。下記設定は全ユーザに対して適用するルールとなります
- deniedPermissions(必須)
- 拒否ポリシーで拒否する権限。詳細設定は公式ドキュメントを参考に設定します
- exceptionPrincipals(オプション)
- 拒否ポリシー設定を除外するユーザ/アドレスを定義します
上記サンプル定義ファイルは、ユーザ全体に対して、VPC作成作業を否定する拒否ポリシーを定義します。
拒否ポリシーの作成
作成した定義ファイルを元に、拒否ポリシーを作成します。
作成時のテンプレートコマンドは下記のとおりです。
今回はプロジェクトに対して設定するコマンドとします。
gcloud iam policies create [拒否ポリシー名] \
--attachment-point=cloudresourcemanager.googleapis.com/projects/[プロジェクトID] \
--kind=denypolicies \
--policy-file=[作成した定義ファイル]
フォルダ及び組織に設定したい場合は、「projects/[プロジェクトID]」の部分を「folders/[フォルダID]」及び「organizations/[組織ID]」で対応可能となります。
上記コマンドを実行すると、「Create in progress for denyPolicy [拒否ポリシーID].」といった表記が実施されます。
# 定義ファイルを確認する
$ ls policy.json
policy.json
# 定義ファイルを作成する(一部情報はxxxxと表記しています)
$ gcloud iam policies create test-policy --attachment-point=cloudresourcemanager.googleapis.com/projects/[プロジェクトID] --kind=denypolicies --policy-file=policy.json
Create in progress for denyPolicy [policies/cloudresourcemanager.googleapis.com%2Fprojects%2xxxxx/denypolicies/test-policy/operations/xxxxxxx]
定義ファイル作成後、数分で拒否ポリシーの反映が可能となります。
削除する際は、下記コマンドを参考に実施してください。
gcloud iam policies delete [ポリシー名] \
--attachment-point=cloudresourcemanager.googleapis.com/projects/[プロジェクトID] \
--kind=denypolicies
拒否ポリシーの確認
では実際にGUI画面を確認してみましょう。
Compute ネットワーク管理者権限を付与したアカウントでVPCの画面へ移動すると、下記のような表記が出力されNGとなります。
注意が必要なのは、 拒否ポリシーによるNG といった警告メッセージがでない点です。
そのため、「権限を付与しているのにおかしい!」となる可能性がありますので、拒否ポリシーをどのプロジェクトに設定したか、どのフォルダに設定したかを管理しておく必要がありますのでご注意ください。
まとめ
拒否ポリシーは使いどころが難しいかもしれませんが、セキュリティを向上させるルールの一つでもあります。
ユースケースや使い道を検討し、適切に使うことでよりセキュアな環境で利用可能となります。
本ブログを参考に、ぜひ拒否ポリシーの導入及び利用を検討してみてください。
Google Cloud、Google Workspace に関するご相談はXIMIXへ!
Google Cloud、Google Workspaceに関する お問い合わせはこちら
XIMIX(サイミクス)は商標登録出願中です
執筆者紹介
- カテゴリ:
- クラウド
- キーワード:
- Google Cloud