リポジトリ・アクセスを制御するポリシー
コンテナ・レジストリのリポジトリへのアクセスを制御するポリシーを設定する方法と、共通ポリシーの例をいくつか示します。
Oracle Cloud Infrastructure Registry (コンテナ・レジストリとも呼ばれる)でリポジトリに対してユーザーが実行できる操作を詳細に制御できます。
リポジトリにアクセスする権限は、ユーザーが属しているグループから取得されます。グループの権限は、アイデンティティ・ポリシーによって定義されます。ポリシーは、グループのメンバーが実行できるアクションを定義します。ユーザーは、自分がメンバーに含まれているグループに設定されたポリシーに基づいてリポジトリにアクセスし、操作を実行します。リポジトリ・アクセスを制御するアイデンティティ・ポリシーは、テナンシおよびコンパートメント・レベルで設定できます。コンテナ・レジストリの詳細を参照してください。
リポジトリへのアクセスを制御する前に、すでにユーザーを作成して、適切なグループに配置しておく必要があります(ユーザーの管理およびグループの管理を参照)。その後、ポリシーおよびポリシー・ステートメントを作成して、リポジトリ・アクセスを制御できます(ポリシーの管理を参照)。
テナンシの管理者グループのユーザーは、テナンシに属するコンテナ・レジストリ内のすべてのリポジトリに対してすべての操作を実行できます。
共通ポリシー
この項のポリシーでは、次のようにグループ名の例を使用します:
- acme-viewers: リポジトリのリストの表示のみを制限するグループ。
- acme-pullers: イメージのプルを制限するグループ。
- acme-pushers: イメージのプッシュとプルを許可するグループ。
- acme-managers: イメージのプッシュとプル、リポジトリの削除およびリポジトリ・メタデータの編集(たとえば、プライベート・リポジトリを公開するため)を許可するグループ。
必ずサンプル・グループ名を独自のグループ名に置き換えてください。
アクセスのタイプ:テナンシ(または特定のコンパートメント)に属するコンテナ・レジストリ内のすべてのリポジトリのリストを参照する機能。ユーザーは、次のことができなくなります:
- リポジトリ内のイメージまたはレイヤーの表示
- リポジトリに対するイメージのプッシュまたはプル
ポリシーを作成する場所:
-
テナント内。例:
Allow group acme-viewers to inspect repos in tenancy
-
テナンシ内またはコンパートメント内。例:
Allow group acme-viewers to inspect repos in compartment acme-compartment
アクセスのタイプ:テナンシ(または特定のコンパートメント)に属するコンテナ・レジストリ内のすべてのリポジトリからイメージ(レイヤーおよびマニフェスト)を取得する機能。
ポリシーを作成する場所:
-
テナント内。例:
Allow group acme-pullers to read repos in tenancy
-
テナンシ内またはコンパートメント内。例:
Allow group acme-pullers to read repos in compartment acme-compartment
Type of access: Ability to pull images (layers and manifests) from any repository in Container Registry that has a name starting with "acme-web-app" and that belongs to the tenancy (or that belongs to a particular compartment).
ポリシーを作成する場所:
-
テナント内。例:
Allow group acme-pullers to read repos in tenancy where all { target.repo.name=/acme-web-app*/ }
-
テナンシ内またはコンパートメント内。例:
Allow group acme-pullers to read repos in compartment acme-compartment where all { target.repo.name=/acme-web-app*/ }
アクセスのタイプ:テナンシまたは特定のコンパートメントに属するコンテナ・レジストリ内の任意のリポジトリにイメージ(レイヤーおよびマニフェスト)をプッシュする機能。
イメージをプッシュするには、常にREPOSITORY_READ
およびREPOSITORY_UPDATE
権限が必要です。指定されたリポジトリがまだ存在しない場合、ユーザーは、イメージをプッシュするときにテナンシのルート・コンパートメントに新しいリポジトリを作成するためにREPOSITORY_CREATE
権限も必要です。この異常なシナリオの詳細は、「リポジトリの作成」を参照してください。
ポリシーを作成する場所:
-
テナント内。例:
Allow group acme-pushers to manage repos in tenancy
前の例が許容しすぎると考える場合(イメージのプッシュには必要ない
REPOSITORY_MANAGE
およびREPOSITORY_DELETE
権限が含まれているため)、権限を制限して、付与する権限を明示的に指定できます。例:Allow group acme-pushers to manage repos in tenancy where ANY {request.permission = 'REPOSITORY_READ', request.permission = 'REPOSITORY_UPDATE', request.permission = 'REPOSITORY_CREATE'}
-
テナンシ内またはコンパートメント内。たとえば、コンパートメントの場合:
Allow group acme-pushers to manage repos in compartment acme-compartment
前述のようにルート・コンパートメント以外のコンパートメントにポリシーを作成した場合、ユーザーはまだ存在しないリポジトリにイメージをプッシュできないことに注意してください。これは、前述のポリシーでは、テナンシのルート・コンパートメントに新しいリポジトリを作成する権限がユーザーに付与されないためです。この異常なシナリオの詳細は、「リポジトリの作成」を参照してください。
アクセスのタイプ:テナンシ(または特定のコンパートメント)に属するコンテナ・レジストリ内のリポジトリに対して、次の操作を実行する機能。
- 任意のリポジトリからのイメージのプル
- イメージを任意のリポジトリにプッシュ
- 新規リポジトリを作成します。つまり、任意のコンパートメントに空のリポジトリを作成するか、リポジトリがまだ存在しないイメージをプッシュするときにテナンシのルート・コンパートメントにリポジトリを作成します。ルート・コンパートメント以外のコンパートメントにポリシーを作成した場合、ユーザーはまだ存在しないリポジトリにイメージをプッシュできないことに注意してください。これは、ポリシーによって、ルート・コンパートメントに新しいリポジトリを作成する権限がユーザーに付与されないためです。この異常なシナリオの詳細は、「リポジトリの作成」を参照してください。
- リポジトリの削除
- パブリック・リポジトリをプライベート・リポジトリに、プライベート・リポジトリをパブリック・リポジトリに変更
ポリシーを作成する場所:
-
テナント内。例:
Allow group acme-managers to manage repos in tenancy
-
テナンシ内またはコンパートメント内。例:
Allow group acme-managers to manage repos in compartment acme-compartment
前述のポリシーをルート・コンパートメント以外のコンパートメントに作成した場合、ユーザーはまだ存在しないリポジトリにイメージをプッシュできないことに注意してください。これは、ポリシーによって、ルート・コンパートメントに新しいリポジトリを作成する権限がユーザーに付与されないためです。この異常なシナリオの詳細は、「リポジトリの作成」を参照してください。