Loading
BLOG 開発者ブログ

2021年8月12日

[Azure]Cosmos DBにIP制限をかける

Azure Cosmos DBにはセキュリティに関する機能が色々と存在しますが、今回はIP制限を試していきます。

こんにちは。
クラウドソリューショングループのimai.kです。

冒頭に記載させていただいた通り、
今回はAzureのCosmos DBに対するIPアクセス制限をかけていきます。

目次


今回の構成

簡易な構成ですが、「IP制限をかけていない場合」と「IP制限をかけた場合」の2つの状態を作ることで、IP制限を試していきます。

実際の構成は以下のようになります。



Cosmos DBアカウントを作成する

まずは、AzureコンソールからCosmos DBアカウントを作成していきます。
リージョンは東日本にしておきます。



Cosmos DBアカウント作成時のネットワーク設定において、「すべてのネットワーク」からアクセス可能にしておきます。



Cosmos DBアカウントが作成できたら、サンプルデータを作成しておきます。



手元のPCからCosmos DBにアクセスする

作成したCosmos DBはどこからでもアクセス可能な設定になっているため、まずは手元のPCからアクセスしてみます。
アクセスはCosmos DBのREST APIを使用して、curlでリクエストしてみます。
(所々マスクしています。)

curl -X POST -H "x-ms-date: Sun, 1 Aug 2021 00:00:00 GMT" -H "x-ms-version: 2018-12-31" -H "x-ms-documentdb-isquery: true" -H "Content-Type: application/query+json" -H "authorization: type%3Dmaster%26ver%3D1.0%26sig%3Dxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" -d '{"query": "SELECT * FROM c where c.id = @id", "parameters": [{"name": "@id", "value": "1"}]}' "https://xxxxxxx.documents.azure.com/dbs/xxxxxx/colls/xxxxxx/docs"

{"_rid":"noprAOFKlGw=","Documents":[{"id":"1","message":"hello","_rid":"noprAOFKlGwBAAAAAAAAAA==","_self":"dbs\/noprAA==\/colls\/noprAOFKlGw=\/docs\/noprAOFKlGwBAAAAAAAAAA==\/","_etag":"\"0000bf03-0000-2300-0000-611134100000\"","_attachments":"attachments\/","_ts":1628517392}],"_count":1}

上記リクエストではCosmos DBに対してクエリを投げています。
レスポンスとして先ほど作成したサンプルデータが返却されたため、アクセスできることが確認できました。

Cosmos DBアクセス用のVMを立てる

後続のステップでCosmos DBのIP制限を行うために、
Cosmos DBへのアクセスを許容するVMを立て、IPアドレスを付与しておきます。

VMのOSはなんでも大丈夫ですが、今回はCentOSの7.9で試しました。
VMができたらSSHして、先ほどと同様にCosmos DBにリクエストしてみます。

curl -X POST -H "x-ms-date: Sun, 1 Aug 2021 00:00:00 GMT" -H "x-ms-version: 2018-12-31" -H "x-ms-documentdb-isquery: true" -H "Content-Type: application/query+json" -H "authorization: type%3Dmaster%26ver%3D1.0%26sig%3Dxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" -d '{"query": "SELECT * FROM c where c.id = @id", "parameters": [{"name": "@id", "value": "1"}]}' "https://xxxxxxx.documents.azure.com/dbs/xxxxxx/colls/xxxxxx/docs"

{"_rid":"noprAOFKlGw=","Documents":[{"id":"1","message":"hello","_rid":"noprAOFKlGwBAAAAAAAAAA==","_self":"dbs\/noprAA==\/colls\/noprAOFKlGw=\/docs\/noprAOFKlGwBAAAAAAAAAA==\/","_etag":"\"0000bf03-0000-2300-0000-611134100000\"","_attachments":"attachments\/","_ts":1628517392}],"_count":1}

同じようにレスポンスが返れば問題ありません。

Cosmos DBにIPアクセス制限を設定する

Cosmos DBにIPアクセス制限を設定します。
Cosmos DBアカウントの「ファイアウォールと仮想ネットワーク」を開き、「選択したネットワーク」にチェックをつけます。
すると、アクセス許可のIPアドレス入力欄(赤枠部分)が表示されるので、先ほど作成したVMのIPアドレスを入力し保存します。

反映には5-10分ほどかかるようです。



IP制限が機能しているか試す

設定したアクセス制限が機能しているか試します。

まずはVMからAPIを叩くと、

curl -X POST -H "x-ms-date: Sun, 1 Aug 2021 00:00:00 GMT" -H "x-ms-version: 2018-12-31" -H "x-ms-documentdb-isquery: true" -H "Content-Type: application/query+json" -H "authorization: type%3Dmaster%26ver%3D1.0%26sig%3Dxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" -d '{"query": "SELECT * FROM c where c.id = @id", "parameters": [{"name": "@id", "value": "1"}]}' "https://xxxxxxx.documents.azure.com/dbs/xxxxxx/colls/xxxxxx/docs"

{"_rid":"noprAOFKlGw=","Documents":[{"id":"1","message":"hello","_rid":"noprAOFKlGwBAAAAAAAAAA==","_self":"dbs\/noprAA==\/colls\/noprAOFKlGw=\/docs\/noprAOFKlGwBAAAAAAAAAA==\/","_etag":"\"0000bf03-0000-2300-0000-611134100000\"","_attachments":"attachments\/","_ts":1628517392}],"_count":1}

先ほど同様問題なく成功しました。

次にPCから実行します。

curl -X POST -H "x-ms-date: Sun, 1 Aug 2021 00:00:00 GMT" -H "x-ms-version: 2018-12-31" -H "x-ms-documentdb-isquery: true" -H "Content-Type: application/query+json" -H "authorization: type%3Dmaster%26ver%3D1.0%26sig%3Dxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" -d '{"query": "SELECT * FROM c where c.id = @id", "parameters": [{"name": "@id", "value": "1"}]}' "https://xxxxxxx.documents.azure.com/dbs/xxxxxx/colls/xxxxxx/docs"

{"code":"Forbidden","message":"Request originated from client IP xxx.xxx.xxx.xxx through public internet. This is blocked by your Cosmos DB account firewall settings. More info: https://aka.ms/cosmosdb-tsg-forbidden\r\nActivityId: xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx, Microsoft.Azure.Documents.Common/2.14.0"}

今度はリクエストが拒否されたため、IP制限が機能していることが確認できます。

最後に

以上のように、Cosmos DBに対するIPアクセス制限が実現できました。
簡単に制限をかけることができますが、反映にラグがあるため本番運用中のシステムなどはオペレーションに要注意ですね!

imai.kのブログ