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

拒否ポリシーが使えるようになってたので試す。
ドキュメント
拒否できる条件は、許可するときの識別子と違うことに注意する必要がある。
識別子の違い
許可
全てのユーザーにロールを付与するときは以下の識別子が使える。
allUsers
拒否
しかし全てのユーザーを拒否するときは以下の識別子を使用する必要がある。
principalSet://goog/public:all
拒否ポリシーを設定できるポイント
次の3つのみ。
- 組織
- フォルダ
- プロジェクト
許可ポリシーと同様に組織やフォルダに許可ポリシーを設定すると、プロジェクトに継承されるので注意が必要。
拒否する権限
ポリシーにはv1とv2の記述があるが、拒否ポリシーではv2を使用する。
v1
コンソールやterraformでよく見る書き方。
SERVICE_NAME/RESOURCE.ACTION
# 例えば
artifactregistry.aptartifacts.create
v2
SERVICE_FQDN/RESOURCE.ACTION
# 例えば
artifactregistry.googleapis.com/aptartifacts.create

試してみる
要件
GoogleCloud組織下にあるの全てのプロジェクトに作成されるSAとGoogleWorkspaceで管理しているユーザーに対してGARの読み取り権限を付与したい。
設定イメージ
- GARのrepoに対してallAuthenticatedUsersでroles/artifactregistry.readerの権限を付与する
- 拒否ポリシーでallに対してdenyを設定
2.1. 例外設定で組織で管理されているアカウントは除外する
テスト内容
- GW管理外のユーザーにdocker pullしてもらいerrorになる
- GW管理内のユーザーにdocker pullしてもらいsuccessになる
- GW管理外のSAにdocker pullしてもらいerrorになる
- GW管理内のSAにdocker pullしてもらいsuccessになる

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