[Oracle Cloud] Object Storage へ Private でセキュアに接続 (Transit Routing + Network Sources)
はじめに
Object Storage は、Internet 上に公開されているサービスです。個人情報の格納など、セキュリティ要件の厳しい使い方のときに、Internet に公開されているサービスの利用は避けたい、といった考え方があります。このような時に対応するため、Private なネットワークに制限が出来ます。
今回の記事では、Object Storage のアクセスを、Private なネットワークに制限する方法をご紹介します。
構成
まず、紹介する構成の全体像をお見せします (画像の中のIP アドレスは削除済み)。
赤い吹き出しで書いている2点が重要なポイントです。
- Transit Routing : Internet に公開されている Object Storage を、IPsec VPN や FastConnect などの Private な方法で接続する
- Network Sources : Object Storage にアクセス可能な IP アドレスの制限
これによって、VCN環境とオンプレミス環境の Private Network に限定して、アクセスを利用できます。なお、画像のオンプレミス環境は、Tokyo Region を疑似的にオンプレミスとして扱っています。VyOS という仮想ルーターを使い、Tokyo Region からOsaka Region へ IPsec VPN 接続をしています。
前提条件
既に、Osaka Region と疑似オンプレミス環境が、IPsec VPN で接続されている状態から手順を紹介していきます。IPsec VPN で接続していて、BGP 経路交換で互いに接続出来る状態です。
OCI Console で見ると、つぎのように 2つのトンネルが Up になっています。
オンプレミス側ルーターの BGP 情報です。Osaka 側の Subnet の情報が伝わってきています。
vyos@vyos:~$ show ip bgp
BGP table version is 2, local router ID is 10.200.1.2, vrf id 0
Default local pref 100, local AS 65000
Status codes: s suppressed, d damped, h history, * valid, > best, = multipath,
i internal, r RIB-failure, S Stale, R Removed
Nexthop codes: @NNN nexthop's vrf id, < announce-nh-self
Origin codes: i - IGP, e - EGP, ? - incomplete
Network Next Hop Metric LocPrf Weight Path
*= 10.100.1.0/24 192.168.0.105 0 31898 i
*> 192.168.0.103 0 31898 i
*> 10.200.0.0/16 0.0.0.0 0 32768 i
Displayed 2 routes and 3 total paths
vyos@vyos:~$
Transit Routing 設定
まず、Transit Routing の設定のポイントを見てみましょう。赤い吹き出しで書いている通り、Osaka 側の DRG (Dynamic Routing Gateway) と SGW(Service Gateway) に Route Table を設定する箇所です。これを設定することで、オンプレミスに Object Storage を含めた OCI Service 群が BGP で経路広告されます。これによって、IPsec VPN のトンネル経由で、Object Storage が利用できます。
それでは設定方法を見て行きましょう。
DRG 用 Route Table の作成
Osaka DRG 用の Route Table 作成します
Create
クリック
Add
Service Gateway を選択
設定完了
DRG に Route Table を設定
DRG に、先ほど作成した Route Table を設定します。そのまえに、未設定のときのオンプレミス側の BGP 情報をみてみましょう。
10.100.1.0/24
が Osaka 側から伝わっています。それ以外は特に何もない状態です。
vyos@vyos:~$ show ip bgp
BGP table version is 2, local router ID is 10.200.1.2, vrf id 0
Default local pref 100, local AS 65000
Status codes: s suppressed, d damped, h history, * valid, > best, = multipath,
i internal, r RIB-failure, S Stale, R Removed
Nexthop codes: @NNN nexthop's vrf id, < announce-nh-self
Origin codes: i - IGP, e - EGP, ? - incomplete
Network Next Hop Metric LocPrf Weight Path
*= 10.100.1.0/24 192.168.0.105 0 31898 i
*> 192.168.0.103 0 31898 i
*> 10.200.0.0/16 0.0.0.0 0 32768 i
Displayed 2 routes and 3 total paths
vyos@vyos:~$
DRG で Associate を選ぶ
Associate
Associate 後、オンプレミス側のBGP 経路情報を確認すると、5 つほど経路情報が増えています。これは、Osaka 側の Object Storage を含めた Public IPの レンジが広告されています。
vyos@vyos:~$ show ip bgp
BGP table version is 7, local router ID is 10.200.1.2, vrf id 0
Default local pref 100, local AS 65000
Status codes: s suppressed, d damped, h history, * valid, > best, = multipath,
i internal, r RIB-failure, S Stale, R Removed
Nexthop codes: @NNN nexthop's vrf id, < announce-nh-selfOrigin codes: i - IGP, e - EGP, ? - incomplete
Network Next Hop Metric LocPrf Weight Path
*= 10.100.1.0/24 192.168.0.105 0 31898 i
*> 192.168.0.103 0 31898 i
*> 10.200.0.0/16 0.0.0.0 0 32768 i
*> 134.70.112.0/22 192.168.0.103 0 31898 i
*= 192.168.0.105 0 31898 i
*= 140.91.48.0/23 192.168.0.105 0 31898 i
*> 192.168.0.103 0 31898 i
*= 140.204.30.128/25
192.168.0.105 0 31898 i
*> 192.168.0.103 0 31898 i
*> 192.29.240.0/22 192.168.0.103 0 31898 i
*= 192.168.0.105 0 31898 i
*> 192.29.248.0/25 192.168.0.103 0 31898 i
*= 192.168.0.105 0 31898 i
Displayed 7 routes and 13 total paths
vyos@vyos:~$
念のため、Object Storage の IP アドレスを確認しましょう。dig コマンドで見てみると、134.70.112.3
となっています。経路広告されている1つに含まれていることがわかりますね。
> dig +dnssec @8.8.4.4 objectstorage.ap-osaka-1.oraclecloud.com
; <<>> DiG 9.11.3-1ubuntu1.1-Ubuntu <<>> +dnssec @8.8.4.4 objectstorage.ap-osaka-1.oraclecloud.com
; (1 server found)
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 14902
;; flags: qr rd ra; QUERY: 1, ANSWER: 2, AUTHORITY: 0, ADDITIONAL: 1
;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags: do; udp: 512
;; QUESTION SECTION:
;objectstorage.ap-osaka-1.oraclecloud.com. IN A
;; ANSWER SECTION:
objectstorage.ap-osaka-1.oraclecloud.com. 2680 IN CNAME objectstorage.ap-osaka-1.oci.oraclecloud.com.
objectstorage.ap-osaka-1.oci.oraclecloud.com. 59 IN A 134.70.112.3
;; Query time: 13 msec
;; SERVER: 8.8.4.4#53(8.8.4.4)
;; WHEN: Thu Nov 12 11:41:22 JST 2020
;; MSG SIZE rcvd: 128
Service Gateway 用 Route Table の作成
Osaka SGW 用の Route Table 作成します
create
クリック
add
オンプレミス側のネットワーク情報を指定
結果
Service Gateway に Route Table を設定
Associate を選ぶ
Associate
IAM
次に、Network Source を使って、Object Storage にアクセス可能な IP アドレスを制限します。Network Source は、IAM 周りの概念になっていて、IAM Policy と紐づけることで、特定のグループに対して、IP アドレス制限が出来ます。当たり前の内容ですが、IAM Policy は厳密にアクセス権を制御が必要です。特に、Administrators 権限のユーザーは、なにもかも設定変更が出来るので、注意が必要です。
それでは設定方法を紹介します。
Network Sources
Network Source を作成
VCNとオンプレミスのネットワークを定義
完了
User
次に、オンプレミスから Object Storage にアクセスする時のユーザーを払いだします。適当に IAM で作成します。
- Group : cli_group01
- User : cli_user01
また、この IAM User について、OCI CLI の実行権限を付与します。適当に Document を参照して設定しましょう。
IAM Policy
IAM Policy を設定して、先ほど作成したユーザーの Object Storage への権限を設定します。
-
cli_bucket
バケットのみ操作可能 - Network Sourceでネットワーク制限
- オブジェクトの新規作成のみ (Delete 出来ない、上書きできない)
Allow group cli_group01 to manage objects in compartment cli where all {target.bucket.name='cli_bucket', request.permission='OBJECT_CREATE', request.networkSource.name='OnPremis_Network'}
許可する操作内容は、使い方に応じて調整してください。
IAM User Capability
更に厳密にするために、IAM User のコンソールログインを禁止します。払い出したユーザーは、Object Storage へオブジェクトの新規作成のみさせたいため、コンソールログイン権限は不要です。
Edit
API Keys のみ有効化
外すことにより、OCI Console のログイン不可
実行確認
これで設定完了です。オンプレミス側に用意している、OCI CLI 設定済みなマシンから、Object Storage へファイルを Put します。
まず名前解決を試みます。名前解決自体は、オンプレミス側のDNSで行います。正常に名前解決が出来ています。
[opc@private-machine01 .oci]$ dig +dnssec objectstorage.ap-osaka-1.oraclecloud.com
; <<>> DiG 9.11.4-P2-RedHat-9.11.4-26.P2.el7 <<>> +dnssec objectstorage.ap-osaka-1.oraclecloud.com
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 526
;; flags: qr rd ra; QUERY: 1, ANSWER: 2, AUTHORITY: 13, ADDITIONAL: 1
;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags: do; udp: 4096
;; QUESTION SECTION:
;objectstorage.ap-osaka-1.oraclecloud.com. IN A
;; ANSWER SECTION:
objectstorage.ap-osaka-1.oraclecloud.com. 1256 IN CNAME objectstorage.ap-osaka-1.oci.oraclecloud.com.
objectstorage.ap-osaka-1.oci.oraclecloud.com. 3 IN A 134.70.112.3
;; AUTHORITY SECTION:
. 516323 IN NS b.root-servers.net.
. 516323 IN NS h.root-servers.net.
. 516323 IN NS k.root-servers.net.
. 516323 IN NS l.root-servers.net.
. 516323 IN NS a.root-servers.net.
. 516323 IN NS g.root-servers.net.
. 516323 IN NS i.root-servers.net.
. 516323 IN NS j.root-servers.net.
. 516323 IN NS c.root-servers.net.
. 516323 IN NS m.root-servers.net.
. 516323 IN NS d.root-servers.net.
. 516323 IN NS e.root-servers.net.
. 516323 IN NS f.root-servers.net.
;; Query time: 0 msec
;; SERVER: 169.254.169.254#53(169.254.169.254)
;; WHEN: Thu Nov 12 08:39:48 GMT 2020
;; MSG SIZE rcvd: 339
[opc@private-machine01 .oci]$
OCI CLI で、ファイルを格納します。
[opc@private-machine01 ~]$ oci os object put --bucket-name cli_bucket --file /home/opc/work/test.txt
Uploading object [####################################] 100%
{
"etag": "4c13b759-73ff-41d2-a76d-7a08080eda5a",
"last-modified": "Thu, 12 Nov 2020 14:55:36 GMT",
"opc-content-md5": "bBxtqkgS4lAqjcrDhiBBIw=="
}
正常に格納が出来ていますね。
では次に、クレデンシャル情報が漏れた時を想定して、VCNとオンプレミス以外の環境から試してみます。エラーになるのが正しい動きです。
[opc@test ~]$ oci os object put --bucket-name cli_bucket --file /home/opc/work/test.txt
Uploading object [####################################] 100%ServiceError:
{
"code": "BucketNotFound",
"message": "Either the bucket named 'cli_bucket' does not exist in the namespace 'nrakwqacaro2' or you are not authorized to access it",
"opc-request-id": "kix-1:hu18f07XBxDTvJ7gxwbcSRd1Hf1JCrjO6JNfkolot04J1q69QE4i4FqIhXNBRhwS",
"status": 404
}
正常に セキュアなアクセスが確認できました。
参考URL
Author And Source
この問題について([Oracle Cloud] Object Storage へ Private でセキュアに接続 (Transit Routing + Network Sources)), 我々は、より多くの情報をここで見つけました https://qiita.com/sugimount/items/833bf598886653dec6a1著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .