はじめに
タイトル通りですが、本記事では OCI IAM Policy を送信元IPで制限する手順についてまとめていきます。
以前、送信元IP制限に関して似たような記事を投稿しています。
下記記事で記載した機能は、OCIコンソールへのログインを制限するものです。
ただ、この機能では CLI/SDK 操作に対して制限されません
CLI/SDK の認証方式がトークンベース認証の場合は、ブラウザ認証のため上記記事の機能で制限可能です
概要
実現方法は、Network Sources を利用します。
以前は Object Storage に対する API 操作のみ制限対象だったようですが、現状は全ての API 操作が対象となっています
※ 公式ドキュメントに明確な制限が記載されていないのと、後述の検証で Object Storage 以外の操作が失敗するため、上記のように記載しています
具体的には、IAM Policy の conditions にて指定することで利用します。
allow group CorporateUsers to manage object-family in tenancy where request.networkSource.name='corpnet'
使用方法(デモ)
検証構成
検証構成は以下の通りです。
なお、以下環境は作成済みで進めていきます。
- 検証ユーザーの API Key
- ローカルPCのOCI CLI 設定
- 環境構築コードは以下 GitHub にあげてますので、よかったら覗いてみてください
実践
Network Sources 作成
Network Sources を作成します。
OCI コンソール左上のハンバーガーマークをクリックし、「Identity & Security」→「Network Sources」をクリックします。

「Create network source」をクリックします。

任意の名前と、今回は許可するアドレス帯を入力し「Create」をクリックします。
今回はこちらを参考に自宅のGIPを指定しています。
アドレス帯の記載ルールは下記参照ください。
IAM Policy 作成
作成手順は割愛しますが、以下のステートメントを作成します。
allow group verification/verify_admin to manage all-resources in compartment oci-iam-policy-restrict-based-on-source-ip where request.networkSource.name='restricted-public-ip'
動作確認(成功パターン)
それではまず成功パターンを見ていきましょう。
以下コマンドを実行しましたが、リクエストは正常に処理されています。
$ oci iam policy list -c ocid1.compartment.oc1..fugafuga
{
"data": [
{
"compartment-id": "ocid1.compartment.oc1..fugafuga",
"defined-tags": {
"Common": {
"Env": "prd",
"ManagedByTerraform": "true",
"System": "oci-iam-policy-restrict-based-on-source-ip"
},
"Oracle-Tags": {
"CreatedBy": "default/hogehoge@example.com",
"CreatedOn": "2026-01-24T06:21:57.970Z"
}
},
"description": "Privileges Administrator",
"freeform-tags": {},
"id": "ocid1.policy.oc1..hogehoge",
"inactive-status": null,
"lifecycle-state": "ACTIVE",
"name": "admin-restrict-source-ip-policy",
"statements": [
"allow group verification/verify_admin to manage all-resources in compartment oci-iam-policy-restrict-based-on-source-ip where request.networkSource.name='restricted-public-ip'"
],
"time-created": "2026-01-24T06:21:58.013000+00:00",
"version-date": null
}
]
}
動作確認(失敗パターン)
続いて失敗パターンを見ていきましょう。
Network Sourcesの値を適当なIPに変更します。

この状態で先程と同様のコマンドを実行すると、認証エラーとなりました。
送信元IP制限が効いていますね。
$ oci iam policy list -c ocid1.compartment.oc1..fugafuga
ServiceError:
{
"client_version": "Oracle-PythonSDK/2.164.0, Oracle-PythonCLI/3.71.0",
"code": "NotAuthorizedOrNotFound",
"logging_tips": "Please run the OCI CLI command using --debug flag to find more debug information.",
"message": "Authorization failed or requested resource not found.",
"opc-request-id": "1B97254408DC403A920108A783BAB247/2C474AC9D3A2F6EB98A574694E525473/1DA4DD1BC37155ADFECDF0954996BE0A",
"operation_name": "list_policies",
"request_endpoint": "GET https://identity.ap-tokyo-1.oci.oraclecloud.com/20160918/policies",
"status": 404,
"target_service": "identity",
"timestamp": "2026-01-24T10:57:28.714283+00:00",
"troubleshooting_tips": "See [https://docs.oracle.com/iaas/Content/API/References/apierrors.htm] for more information about resolving this error. If you are unable to resolve this issue, run this CLI command with --debug option and contact Oracle support and provide them the full error message."
}
おわりに
本記事では、Network Sources を使った IAM Policy の送信元IP制限についてまとめました。
所感としては、IAM ユーザー向けと言うより、VCN 内リソース向けな印象です。
IAM ユーザー向けの制限をするならば、「冒頭に載せた記事の機能」+「IAM Policy の deny ステートメントで API Key 作成を制限する」が管理としてはしやすいのかなという印象です。
この点は別途記事にしていこうと思います。
🌟この記事が誰かの役に立てば幸いです!
また、ご質問やフィードバックもお待ちしています。



