2月のリリースになってしまいますが、OCI の オブジェクトストレージ にIPアドレスでアクセス制限をかける事ができるようになりました。
リファレンスに記載されている内容だけでは、少し分かりにくかったので、備忘録ついでに紹介したいと思います。
手順としては、アクセスを許可するIPアドレスを設定した ネットワーク・ソース を作成し、制限をかけるユーザグループに ポリシー 定義する事で実現します。
それでは、設定方法を確認していきます。
1.ネットワーク・ソースの作成
左メニューの「アイデンティティ」-「ネットワーク・ソース」を選択し、ネットワーク・ソース画面へ遷移します。
ネットワーク・ソース画面で、「ネットワーク・ソースの作成」ボタンを押下し、ネットワーク・ソース作成を表示します。
ネットワーク・ソースの作成で、以下の項目を設定し、「作成」ボタンを押下します。
- 名前:ネットワーク・ソース名
- 説明:ネットワーク・ソースの説明
- ソース
- 「OCIサービスの許可」をチェック
- ネットワークタイプ:「パブリック・ネットワーク」を選択
(他に「仮想クラウド・ネットワーク」の選択が可能で、VCNからのアクセスを制御する場合は、こちらを選択して下さい。) - IPアドレス/CIDRブロック:アクセスを許可するIPアドレスとCIDRブロック
(弊社のグローバルIPアドレスを設定しています)
2.検証用ユーザの作成
今回の検証用に IAMユーザ を作成します。
手順は省略しますが、以下のユーザを作成しました。
- ユーザ名:blog-user
- ユーザグループ:blog_group
(ユーザグループは新たに作成したもので、Policy は何も設定されておりません。)
3.ネットワーク・ソースの Policy を定義
検証ユーザのグループにネットワーク・ソースの Policy を定義します。
左メニューの「アイデンティティ」-「ポリシー」を選択し、ポリシー画面へ遷移します。
ポリシー画面の左にあるコンパートメントでルートコンパートメントを選択し、「ポリシーの作成」ボタンを押下します。
ポリシーの作成で、以下の項目を設定し、「作成」ボタンを押下します。
- 名前:ポリシー名
- 説明:ポリシーの説明
- ポリシーのバージョニング
- 「ポリシーを最新の状態に維持」を選択
- ポリシー・ステートメント
allow group blog_group to manage object-family in Tenancy where
request.networkSource.name='NWR_PUB'
(グループの指定には検証用に作成したユーザのグループ名blog_group
を指定し、request.networkSource.nameには作成したネットワーク・ソース名NWR_PUB
を指定します。)
以上の設定で、blog_group
グループのユーザは、ネットワーク・ソースで指定したIPアドレスからの接続のみオブジェクトストレージを操作する事が可能となります。
4.確認(アクセス許可したIPアドレス)
ネットワーク・ソースで定義したグローバルIPアドレスが割り振られている状態である事を確認しておきます。
まずは、作成した検証用ユーザでコンソール画面にログインします。
ログイン後、オブジェクトを配置しているコンパートメント・リージョンのオブジェクト・ストレージ画面を表示します。
ネットワーク・ソースで定義したIPアドレスからの接続である為、バケットの一覧が表示される事が確認できます。
検証用のユーザ情報で、OCI CLI からもバケット一覧が取得できる事が確認できます。
(下記コマンドで指定の必要なコンパーメントIDは、~/.oci/oci_cli_rc で指定しています。)
1 2 3 4 5 6 7 8 9 10 11 12 |
$ oci os bucket list --query "data [*].{"Name":"name"}" [ { "Name": "Bkt01" }, { "Name": "Bkt02" }, { "Name": "Bkt03" } ] |
5.確認(アクセス許可した以外のIPアドレス)
ネットワーク・ソースで定義したグローバルIPアドレス以外からのアクセスを確認してみます。
(弊社には、通常使用している回線とは別に副回線があるので、回線を切り替える事で、グローバルIPアドレスが変更されます。)
検証用ユーザでコンソール画面にログインし、先程と同様にオブジェクト・ストレージ画面を表示します。
リクエストを実行する権限がない旨のメッセージが表示され、バケットの一覧表示ができない事が確認できました。
「バケットの作成」ボタンが表示されてはいますが、作成しようとしても作成する事ができません。
また、OCI CLI からもアクセスし、情報が取得できない事を確認します。
1 2 3 4 5 6 7 8 |
$ oci os bucket list --query "data [*].{"Name":"name"}" ServiceError: { "code": "NamespaceNotFound", "message": "You do not have authorization to perform this request, or the requested resource could not be found.", "opc-request-id": "nrt-1:N5C・・・略)", "status": 404 } |
6.まとめ
アクセス元のIPアドレスでアクセスの可否が制御できるようになった事で、同じユーザであっても、特定の環境からしかアクセスできなくする等、より強固にセキュリティ面の調整が可能となりました。
また、嬉しい事に、本手順でポリシーを設定したユーザグループに属するユーザで 事前認証済みリクエスト を作成すれば、事前認証済みリクエストでもIPアドレスの制限が可能となります。
これによって、相手がOCIユーザでない場合にも、IP制限を設けてオブジェクトストレージを介してファイルを連携する事が可能となります。
現時点では、ネットワーク・ソースの適用はオブジェクトストレージのみとなっていますが、今後、ネットワークセキュリティグループ等で制御できないリソースが追加されていく予感がします。
今後のリリースにも注目していきたいと思います。