GCP 拒否ポリシーでアクセスを制限してみる

Google Cloud
この記事は約6分で読めます。

こんにちは!大嶋です!
みなさんはGCPで権限管理をしていく中で、このリソースだけ簡単にアクセス制限できないかな、といった疑問を持ったことはないでしょうか?
今回はそんな疑問にお答えしていきたいと思います。

本記事でわかること

  • 拒否ポリシーとは
  • 拒否ポリシーの使い方
  • 拒否ポリシーの使いどころ

拒否ポリシーとは

IAMの拒否ポリシーを使うと、許可ポリシーで許可をしていても、付与している権限に関係なく、指定したプリンシパルが、特定の権限を使用できないように設定できます。

拒否ポリシーは許可ポリシー同様継承もされます。

許可ポリシーと拒否ポリシーの関係

拒否ポリシーは付与されている権限(許可ポリシー)に関係なく、特定のプリンシパルの特定の権限を使用できなくさせる機能です。
つまり、同じレベル(組織、フォルダ、プロジェクト)で両方とも設定されている場合、拒否ポリシーが適用されます。

拒否ポリシーの使い方

以下作業手順で拒否ポリシーを使って、
今回はGCSのバケットに対してアクセスの制限をしていきます。

①タグの用意(タグ作成、タグ付け)
②拒否ポリシーを記載したJSONファイルの用意
③付与コマンド(コンソールで管理できない)
④動作確認

①タグの用意(タグ作成、タグ付け)

今回はタグに対して拒否ポリシーを適用することで特定のリソースに対して、アクセスを制限していきます。

まず最初に、組織でタグの作成をします。(省略)
次に作成したタグをアクセスの制限をしたいGCSバケットにタグ付けします。

②拒否ポリシーを記載したJSONファイルの用意

拒否ポリシーを記載しているJSONファイルを用意します。
このファイルは③で使います。

{
  "displayName": "表示名",
  "rules": 
  [
    {
      "denyRule": {
        
        "deniedPrincipals": [
          "principalSet://goog/public:all"
        ],
        "exceptionPrincipals": [
          "principalSet://goog/group/メールアドレス",
          "principal://iam.googleapis.com/projects/-/serviceAccounts/メールアドレス"
        ],
        "deniedPermissions": [
          "storage.googleapis.com/buckets.delete",
          "storage.googleapis.com/buckets.create",
          "storage.googleapis.com/buckets.update",
          "storage.googleapis.com/objects.delete",
          "storage.googleapis.com/objects.create",
          "storage.googleapis.com/objects.update",
          "storage.googleapis.com/multipartUploads.listParts"
        ],
        "denialCondition": {
          "title":  "タイトル名",
          "expression": "resource.matchTag('タグキーパス', 'タグ値名')"
        }
      }
    }
  ]
}
  • deniedPrincipals・・・拒否するプリンシパル
  • exceptionPrincipals・・・例外(拒否ポリシーが適用されない)のプリンシパル
  • deniedPermissions・・・拒否対象の権限
  • expression・・・バケットに付与したタグを指定
プリンシパル記載方法
#ユーザーアカウント
principal://goog/subject/USER_EMAIL_ADDRESS

#サービスアカウント
principal://iam.googleapis.com/projects/-/serviceAccounts/SA_EMAIL_ADDRESS

#グループ
principalSet://goog/group/GROUP_EMAIL_ADDRESS

#全員
principalSet://goog/public:all

「deniedPrincipals」で全員を選択して「exceptionPrincipals」でアクセスできる人を選択することで、特定のプリンシパルにだけアクセスを許可することができます。
※別途許可ポリシーは付与する必要があります。

③付与コマンド(コンソールで管理できない)

それでは実際にコマンドを実行して制限を反映させていきましょう。

gcloud iam policies create 拒否ポリシー名 --attachment-point=cloudresourcemanager.googleapis.com/projects/プロジェクトID --kind=denypolicies --policy-file="ファイルパス"

–attachment-point
こちらで接続ポイントを指定します。
GCPでは以下3つに関連付けて拒否ポリシーを適用可能です。
・組織
・フォルダ
・プロジェクト

–policy-file
こちらで①で作成したファイルのパスを指定します。
今回はCloudShellにアップロードしたファイルを指定しています。

④動作確認

アクセスを制限したバケットで、ファイルを実際に削除してみたら、、

IAMの拒否ポリシーで拒否されたと出ましたね。成功してそうです。

拒否ポリシーの使いどころ

今回はCloudStorageのバケットのアクセスを制限しましたが、他にもいろんな権限を制限できそうですね。もう既にスタートしているプロジェクトとかでも使いやすそうです。

まとめ

今回のようにタグを使えば細かくリソース単位で制限もできるので、便利なサービスでした。

ただ、コンソールでの管理ができないので、少し管理が複雑になるのは注意点です。
早くコンソールでも管理できるようになってほしいですね。

ぜひアクセスの制限が必要になったら、その一つの方法としてお試しください。

おわり。

Google および Google Cloud Platform™ service は Google LLC の商標であり、この記事は Google によって承認されたり、Google と提携したりするものではありません。

コメント

タイトルとURLをコピーしました