Open3

GoogleCloudのIAM拒否ポリシーを試す

ei-showei-show

拒否ポリシーが使えるようになってたので試す。

ドキュメント

https://cloud.google.com/iam/docs/deny-overview?hl=ja#permission-groups

拒否できる条件は、許可するときの識別子と違うことに注意する必要がある。

https://cloud.google.com/iam/docs/principal-identifiers#deny

識別子の違い

許可

全てのユーザーにロールを付与するときは以下の識別子が使える。

allUsers

拒否

しかし全てのユーザーを拒否するときは以下の識別子を使用する必要がある。

principalSet://goog/public:all

拒否ポリシーを設定できるポイント

次の3つのみ。

  • 組織
  • フォルダ
  • プロジェクト

許可ポリシーと同様に組織やフォルダに許可ポリシーを設定すると、プロジェクトに継承されるので注意が必要。

拒否する権限

ポリシーにはv1とv2の記述があるが、拒否ポリシーではv2を使用する。

v1

コンソールやterraformでよく見る書き方。

SERVICE_NAME/RESOURCE.ACTION

# 例えば
artifactregistry.aptartifacts.create	

https://cloud.google.com/iam/docs/permissions-reference

v2

SERVICE_FQDN/RESOURCE.ACTION

# 例えば
artifactregistry.googleapis.com/aptartifacts.create

https://cloud.google.com/iam/docs/deny-permissions-support

ei-showei-show

試してみる

要件

GoogleCloud組織下にあるの全てのプロジェクトに作成されるSAとGoogleWorkspaceで管理しているユーザーに対してGARの読み取り権限を付与したい。

設定イメージ

  1. GARのrepoに対してallAuthenticatedUsersでroles/artifactregistry.readerの権限を付与する
  2. 拒否ポリシーでallに対してdenyを設定
    2.1. 例外設定で組織で管理されているアカウントは除外する

テスト内容

  • GW管理外のユーザーにdocker pullしてもらいerrorになる
  • GW管理内のユーザーにdocker pullしてもらいsuccessになる
  • GW管理外のSAにdocker pullしてもらいerrorになる
  • GW管理内のSAにdocker pullしてもらいsuccessになる
ei-showei-show

1. GARのrepoに対してallAuthenticatedUsersでroles/artifactregistry.readerの権限を付与する

今回はリモートリポジトリとしてrepoを作成した。
allAuthenticatedUsersroles/artifactregistry.readerを付与する。

2. 拒否ポリシーでallに対してdenyを設定する

ただし、例外設定で組織で管理されているアカウントは除外する。