Cloud Service
OCI IAM
誰が・どのコンパートメントの・何に・何をできるかをポリシーで制御する OCI の認証認可サービス。テナンシ全体のアクセス制御の土台。AWS IAM に相当。
- 1.誰が何にどの操作をできるかをポリシーで制御する認証認可基盤。
- 2.Allow 文のみで記述しデフォルト全拒否。サービス自体は無料。
- 3.コンパートメントで区切り最小権限を付与するのが設計の核。
解決する課題
- 全員がテナンシ管理者、では事故が起きる → 必要な人に必要な権限だけ渡したい
- リソースをチーム・環境ごとに分離したい → コンパートメントで論理的に区切り、境界に権限を付ける
- インスタンスやFunctionにキーを埋め込みたくない → インスタンスプリンシパル/リソースプリンシパルで安全に
- 監査で「誰が何をできるか」を説明したい → ポリシーは英語ライクな文で記述でき可読性が高い
主要概念と用語
- テナンシ(Tenancy): OCI アカウントのルートに当たる最上位コンテナ。ルートコンパートメントを内包する
- コンパートメント(Compartment): リソースを入れる論理的な箱。ポリシーを当てる主な境界で、最大6階層までネスト可能。リージョンをまたいでグローバルに存在する
- アイデンティティドメイン(Identity Domain): ユーザー/グループ/認証設定(MFA・フェデレーション・サインオンポリシー)を束ねる入れ物。OCI 版 IDaaS(旧 Oracle Identity Cloud Service の後継)
- ユーザー / グループ: 人やアプリに紐づく ID と、その束。権限はグループ単位で付与するのが基本
- ポリシー(Policy):
Allow <group> to <verb> <resource-type> in <compartment> [where <condition>]という構文で許可を記述。**OCI のポリシーは「許可(Allow)のみ」**で、明示的 Deny 文は書かない(デフォルト全拒否) - 動的グループ(Dynamic Group): ユーザーではなくリソース(インスタンス等)をメンバーにするグループ。ルールにマッチした計算リソースに権限を渡せる
- プリンシパル: 認証主体。ユーザー(人)、インスタンスプリンシパル、リソースプリンシパル(Functions など)の3種が代表
仕様・制限・クォータ
- IAM はグローバル(ホームリージョンで管理。ユーザー/グループ/ポリシーは全リージョンに伝播)。テナンシ作成時に選んだホームリージョンでのみ IAM の書き込みができる
- ポリシーはコンパートメント単位でアタッチし、サブコンパートメントへ継承される(上位で許可した権限は下位にも及ぶ)
- ポリシー文の動詞は粒度の粗い順に
inspect<read<use<manageの4段階。リソース種別ごとに対応する API 操作がマッピングされている - ポリシーには**条件(
where)**を付けられる(例:request.region、target.compartment.name、特定タグの有無など) - フェデレーション: アイデンティティドメインは SAML 2.0 / OpenID Connect に対応し、Microsoft Entra ID 等の外部 IdP と連携できる
- 主な上限の目安(テナンシ既定、引き上げ申請可): コンパートメント階層 6 レベル、ポリシー/グループ/ユーザー数などにサービス制限あり
内部の仕組み
API リクエストが来ると、OCI は次のように認可を評価します。
- デフォルトは全拒否(どのポリシーにも該当しなければ拒否)
- リクエスト元グループ・対象リソース種別・対象コンパートメントに一致するポリシー文(Allow)があれば許可
- ポリシーの継承により、対象コンパートメントの祖先コンパートメントに書かれた Allow も評価対象になる
where条件があれば、リクエスト属性(リージョン・タグ等)が条件を満たす場合のみ許可
OCI のポリシーは Allow 文のみで構成され、AWS のような明示的 Deny 文はありません。アクセスを絞るには「Allow を書かない/条件で狭める/コンパートメントを分ける」で表現します。「何を許すか」を積み上げる発想です。
設計パターン / ベストプラクティス
- 最小権限の原則: グループ × コンパートメント × 動詞(
read/use/manage)を必要最小限に絞る - コンパートメント設計を先に: 環境(dev/stg/prod)やチームでコンパートメントを切り、境界にポリシーを当てる。これが OCI の権限設計の核
- 動的グループ + インスタンス/リソースプリンシパル: Compute や Functions にはキーを置かず、動的グループ経由で権限を付与する
- グループに権限、ユーザーは権限を直接持たせない: 権限はグループ単位、人の入れ替えはグループのメンバー変更で対応
- 管理者の最小化: テナンシ管理者(
Administratorsグループ)は緊急時のみ。日常は用途別の管理グループへ委譲
運用・監視・トラブルシュート
- OCI Audit で「誰がいつ何の API を呼んだか」をテナンシ全体で記録(既定で有効)
- Cloud Guard で過剰権限・公開リソース・設定ミスを検出し、自動レスポンスを設定
- 権限エラー(
NotAuthorizedOrNotFoundが典型)が出たら、グループ所属 → 対象コンパートメント → ポリシー文の動詞/リソース種別 →where条件の順に確認 - ポリシーの効果確認には、ポリシー文の対象を絞ってテストし、Audit ログで実際の許可/拒否を突き合わせる
コスト
IAM 自体は無料。アイデンティティドメインも基本機能(OCI 操作のための認証認可)は追加料金なしで、追加のアプリ連携や高度な機能を使う上位タイプのみ課金されます。
| 項目 | 課金 | 備考 |
|---|---|---|
| IAM(ポリシー/グループ/ユーザー) | 無料 | OCI のアクセス制御の土台部分 |
| アイデンティティドメイン Free タイプ | 無料 | OCI コンソール/API のための認証認可・MFA・基本フェデレーション |
| アイデンティティドメイン 上位タイプ | ユーザー課金(MAU 等) | 外部アプリのSSO・大規模ID管理など追加機能を使う場合 |
| インスタンス/リソースプリンシパル | 無料 | キー不要の認証。利用自体に追加料金なし |
セキュリティ
- MFA を必須化: アイデンティティドメインのサインオンポリシーで、特に管理者に多要素認証を強制
- 長期 API キーよりプリンシパル認証: Compute はインスタンスプリンシパル、Functions はリソースプリンシパルを使い、
~/.ociの鍵配布をなくす - 条件で締める: ポリシーの
whereでrequest.regionや送信元・タグを縛り、適用範囲を限定 - フェデレーションで一元管理: 既存の IdP(Entra ID 等)と SAML/OIDC 連携し、人の ID を社の認証基盤に集約
Allow group X to manage all-resources in tenancy を一般ユーザーグループに付与するのは NG。これはテナンシ全体のフル管理権限で、AWS の AdministratorAccess をルート相当で配るのと同じ危険度です。コンパートメントとリソース種別を限定し、manage ではなく use/read で足りないかを必ず見直してください。
関連サービス・比較(AWS との対応)
| 観点 | OCI IAM | AWS IAM |
|---|---|---|
| 権限の境界 | コンパートメント(リソースを入れる箱に継承) | アカウント/リソース+ポリシー範囲 |
| ポリシー記法 | 英語ライクな文(Allow のみ) | JSON(Allow / Deny) |
| 明示的 Deny | なし(Allow を積み上げる) | あり(明示的 Deny が最優先) |
| 人以外への権限付与 | 動的グループ + インスタンス/リソースプリンシパル | IAM ロール(インスタンスプロファイル) |
| 一時認証情報 | プリンシパル経由でトークン自動取得 | STS(AssumeRole) |
| ID 管理基盤 | アイデンティティドメイン(IDaaS 内蔵) | IAM + IAM Identity Center |
| 監査ログ | OCI Audit | CloudTrail |
ハンズオン / CLI例
# 1) グループを作成(--compartment-id にはテナンシOCIDを指定)
oci iam group create \
--name app-readers \
--description "Read-only group for app team" \
--compartment-id $OCI_TENANCY
# 2) ポリシーを作成:app-readers に dev コンパートメント内の
# オブジェクトストレージを read だけ許可(OCIポリシーはAllow文の配列)
oci iam policy create \
--name app-readers-policy \
--description "Allow read on object storage in dev" \
--compartment-id $OCI_TENANCY \
--statements '["Allow group app-readers to read object-family in compartment dev"]'
# 3) 動的グループを作成:dev コンパートメント内の全インスタンスをメンバーに
oci iam dynamic-group create \
--name dev-instances \
--description "All compute instances in dev compartment" \
--matching-rule "ALL {instance.compartment.id = '$DEV_COMPARTMENT_OCID'}"
# 4) インスタンスプリンシパルで認証して自分の権限主体を確認(鍵不要)
# Compute インスタンス上で実行する
oci os ns get --auth instance_principal
OCI Service
OCI IAMを実務で読む
TL;DRは入口です。実際に選ぶ・使う段階では、何を解決するか、何と比較するか、導入後にどこで詰まるかまで見る必要があります。
解決すること
セキュリティ・ID
比較で見る軸
クラウド: OCI / カテゴリ: セキュリティ・ID / 難易度: intermediate
導入後に効く点
Allow 文のみで記述しデフォルト全拒否。サービス自体は無料。
先に潰すリスク
サービス単体ではなく、権限、ネットワーク、監視、課金、バックアップを含めて設計する必要がある。
- クラウド
- OCI
- カテゴリ
- セキュリティ・ID
- 難易度
- intermediate
- 関連資格
- —
- 設計柱
- security / operational
判断チェックリスト
- 自社の用途が「セキュリティ・ID / security」に近いか確認する。
- 強みである「誰が何にどの操作をできるかをポリシーで制御する認証認可基盤。」が本当に評価軸になるか確認する。
- 注意点の「サービス単体ではなく、権限、ネットワーク、監視、課金、バックアップを含めて設計する必要がある。」を運用で吸収できるか確認する。
- 公開値や仕様値は、対象プラン・対象機種・対象リージョンまで確認する。
- 既存システム、ID、ネットワーク、監視、バックアップとの接続方法を先に洗い出す。
- 小さく試してから、本番移行、権限設計、障害時手順、コスト監視を決める。
他クラウドの同等サービス
役割が近いサービスです。設計の置き換えや比較検討の参考に。