Oracle Cloud Infrastructure(OCI)のポリシーは、クラウドリソースへのアクセス制御を可能にする重要な仕組みです。本記事では、ポリシーの基本構造から高度な機能(継承、条件付きポリシー、タグベース制御、ネットワークソース、動的グループ)まで、詳しく解説します。
ポリシーの継承とアタッチ
OCIのポリシーは、親コンパートメントから子コンパートメントに継承されます。この継承により、管理者が作成したポリシーを複数のレベルで適用可能です。
組み込みポリシー
OCIには、あらかじめ設定された管理者用ポリシーがあります。
textコードをコピーするAllow group Administrators to manage all-resources in tenancy
このポリシー(Tenant Admin Policy)は、テナンシ全体に適用され、すべてのリソースへの管理アクセスを許可します。
ポリシーアタッチ
ポリシーは特定の場所にアタッチ(関連付け)されます。アタッチ場所により、変更や削除可能なユーザーが制御されます。
- アタッチ場所とコンパートメント名の指定方法
アタッチ場所が異なると、ポリシー記述時のコンパートメント名の指定方法も変化します。
条件付きポリシー
条件付きポリシーを利用すると、Where句やCondition句を活用して細かいアクセス制御が可能になります。条件がTrue、False、またはNot Applicableに評価されることでアクセスが制御されます。
条件付きポリシーの構文
- 単一条件bashコードをコピーする
where <変数名> = '<値>' where <変数名> != '<値>'
- 複数条件phpコードをコピーする
any{<条件1>, <条件2>, ...} all{<条件1>, <条件2>, ...}
- 変数構造
request.<属性>
: リクエスト自体に関する属性。target.<属性>
: リソースまたはターゲットに関する属性。
条件例
以下は特定の条件付きポリシーの記述例です:
textコードをコピーするallow group NetworkAdmins to manage instances in compartment Sandbox where request.permission = 'VOLUME_INSPECT'
最小権限の強制と拡張ポリシー
OCIでは、リソースへのアクセス権限を最小化する設計が推奨されます。
権限の付与
権限(AuthZの単位)は、操作を実行するユーザーの能力を制御します。以下の動詞を活用して簡略化されたポリシーを記述できます:
inspect
: リソースのリスト化と非機密情報の取得。read
: リソースにアクセス可能だが変更不可。use
: リソースの操作(例: 起動、停止)。manage
: リソースの完全管理。
例
特定の条件で権限を付与する場合:
textコードをコピーするallow group DatabaseAdmins to manage databases in compartment Production where request.permission = 'VOLUME_READ'
タグベースのアクセス制御(TBAC)
タグベースのアクセス制御を使用すると、タグを利用して柔軟なポリシーを定義できます。これにより、リソースの管理が効率化されます。
TBACの仕組み
- 条件とタグ変数のセット
条件付きポリシーと同様に、タグを条件として使用します。 - リソースとタグの紐づけ
- リクエスト元のリソース(グループ、動的グループ、コンパートメント)。
- リクエスト対象のリソース(コンパートメントや特定のリソース)。
例
特定のタグを持つリソースにのみアクセスを許可するポリシー:
textコードをコピーするallow group Developers to manage all-resources in compartment DevEnvironment where target.tag.key = 'Environment' and target.tag.value = 'Development'
ネットワークソースによるアクセス制御
ネットワークソースは、発信元のIPアドレスに基づいてアクセスを制御する仕組みです。
特徴
- 指定可能な属性
- パブリックIPアドレス。
- VCNネットワーク。
- 構成方法
OCIコンソールの「アイデンティティメニュー」からネットワークソースを設定可能。
例
特定のIPアドレスからのアクセスを許可するポリシー:
textコードをコピーするallow group Admins to manage buckets in compartment Storage where request.network-source = 'TrustedIPs'
動的グループ
動的グループは、動的な属性に基づいてグループメンバーを定義する仕組みです。
プリンシパルの種類
- ユーザー: 組織内の従業員や管理者。
- インスタンス: OCIテナンシ内で動作する一意のコンピュートインスタンス。
- サービス: OCIが提供するサービス(例: オブジェクトストレージ、データベース)。
- リソース: OCIの特定のエンティティ(例: バケットやインスタンス)。
例
動的グループを活用したポリシーの記述:
textコードをコピーするallow dynamic-group InstanceGroup to read buckets in compartment DataStorage
まとめ
OCIのポリシーは、単純な権限付与から高度な条件付きポリシーやタグベースの制御まで、幅広い機能を提供します。以下のポイントを活用することで、より効率的でセキュアなアクセス管理が可能です:
- ポリシーの継承とアタッチで管理効率を向上。
- 条件付きポリシーで細かいアクセス制御を実現。
- 最小権限の強制でセキュリティを向上。
- タグベースのアクセス制御でリソース管理を柔軟化。
- ネットワークソースでIPアドレスによる制御を簡易化。
- 動的グループで属性に基づくグループ管理を効率化。