IBM Cloud VPC Gen2 から IBM Cloud Object Storage (ICOS) へのアクセスを確認する


# 概要
今回はこのような構成を試してみたいと思います。
VPC から ICOS へのアクセスをログを見ながら確認します。

ちなみにですが IBM Cloud の場合、VPC - ICOS 間のデータ通信量に関する課金はないので、安心して使えます。
（以下のように Direct Endpoint を使った場合。）

>https://cloud.ibm.com/docs/vpc?topic=vpc-connecting-vpc-cos
Direct endpoints provide your servers with high-speed, direct connections to IBM Cloud services, which incur no added bandwidth costs.
There is no charge for traffic from your VPCs to all COS endpoints listed on this page.
>https://cloud.ibm.com/docs/cloud-object-storage?topic=cloud-object-storage-endpoints#advanced-endpoint-types
Direct endpoints are used in Bring-Your-Own-IP scenarios, generally for requests originating from resources within VPCs. Like Private endpoints, Direct endpoints provide better performance over Public endpoints and do not incur charges for any outgoing or incoming bandwidth even if the traffic is cross regions or across data centers.

![Kobito.GQm62I.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/101361/c31030bc-bfa9-6ec1-9f58-4bee3624bb1c.png "Kobito.GQm62I.png")

# ICOS IP Firewall 設定
`$(curl http://checkip.amazonaws.com)` を使って現在のアクセス元グローバルIPを入れておき、 自らのアクセス時に拒否されない設定にします。
また、それ以外の IP アドレスからのアクセスは全て拒否する設定にします。

- [Setting a firewall](https://cloud.ibm.com/docs/cloud-object-storage?topic=cloud-object-storage-setting-a-firewall#setting-a-firewall)

```shell:

export BUCKET_NAME=content-library

export ACCESS_TOKEN=$(ibmcloud iam oauth-tokens --output JSON | jq -r '.iam_token')
echo $ACCESS_TOKEN

curl -X PATCH https://config.cloud-object-storage.cloud.ibm.com/v1/b/$BUCKET_NAME -H "authorization: $ACCESS_TOKEN" -d @- << EOF
{
  "firewall": {
    "allowed_ip": [
      "$(curl http://checkip.amazonaws.com)"
    ]
  }
}
EOF

curl https://config.cloud-object-storage.cloud.ibm.com/v1/b/$BUCKET_NAME -H "authorization: $ACCESS_TOKEN" | jq -r
```

# IBM Cloud Activity Tracker with LogDNA 注文
以下の URL から IBM Cloud Activity Tracker with LogDNA を注文します。
ICOS と同じリージョンになるように構成します。

https://cloud.ibm.com/catalog/services/ibm-cloud-activity-tracker-with-logdna
![Kobito.PTYbqs.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/101361/0363cbff-4c77-7a80-8d0f-7e8c8b742c1c.png "Kobito.PTYbqs.png")

# ICOS の Activity Tracker 連携設定
ICOS IP Firewall のアクセスログが確認するために、以下のように Activity Tracker 連携設定をします。
>[Tracking events using Activity Tracker with LogDNA](https://cloud.ibm.com/docs/cloud-object-storage?topic=cloud-object-storage-at)

- 「Track data events」にチェック
- 「read & write」を選択
- VPC 用の Direct Endpoint を確認
	- `s3.direct.jp-tok.cloud-object-storage.appdomain.cloud`
	- [Connecting to IBM Cloud Object Storage from VPC](https://cloud.ibm.com/docs/vpc?topic=vpc-connecting-vpc-cos)

![貼り付けた画像_2020_10_08_14_34.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/101361/5000e9f0-6fe9-046b-3afb-0e59eff8538a.png "貼り付けた画像_2020_10_08_14_34.png")

# VPC から ICOS へのアクセスが拒否されることを確認

VPC の Windows Server から [S3 Browser](https://s3browser.com/) を使ってアクセス確認します。

- [Connecting to Windows instances](https://cloud.ibm.com/docs/vpc?topic=vpc-vsi_is_connecting_windows)

ICOS で発行した HMAC のサービス認証情報を元に以下のように設定します。

![貼り付けた画像_2020_10_08_14_56.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/101361/660352fa-6533-707b-7f94-1a3007576e08.png "貼り付けた画像_2020_10_08_14_56.png")
![貼り付けた画像_2020_10_08_14_53.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/101361/571f4555-c398-a17e-08f2-03b4fab0295b.png "貼り付けた画像_2020_10_08_14_53.png")

その後に対象バケットに対して、VPC の Windows Server から ICOS へのアクセスが拒否されることを確認します。

![Kobito.TGU1Ge.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/101361/afef4e47-fdcc-6ca4-70fc-c2cf09098add.png "Kobito.TGU1Ge.png")


# IBM Cloud Activity Tracker with LogDNA でアクセス拒否のログを確認

IBM Cloud Activity Tracker with LogDNA の画面から以下のようなアクセスログが確認できます。
ソース IP が `10.223.220.45` となっていますね。

- [Activity Tracker events](https://cloud.ibm.com/docs/cloud-object-storage?topic=cloud-object-storage-at-events)

![貼り付けた画像_2020_09_30_17_02.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/101361/cd752353-0813-4155-640f-dae69498818f.png "貼り付けた画像_2020_09_30_17_02.png")


# VPC から ICOS へのアクセス時に許可すべき IP アドレス
先ほどの `10.223.220.45` は、VPC を作成するとゾーンごとに払い出される「[Cloud Service Endpoint source address](https://cloud.ibm.com/docs/vpc?topic=vpc-vpc-behind-the-curtain#cse-source-addresses)」のことです。

>Cloud Service Endpoint source addresses are the IP addresses that identify a VPC and zone combination outside of the VPC. For example, a source address is used when a service outside of the VPC is called through a cloud service endpoint. The IP address of the virtual server instance is replaced with an IPv4 address, the source address, that identifies the VPC to the cloud service endpoint.

![貼り付けた画像_2020_10_08_14_46.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/101361/babdf2b6-21f6-9a76-01a6-59b018e9a17c.png "貼り付けた画像_2020_10_08_14_46.png")

# 

VPC から ICOS へのアクセス時にソース IP は「Cloud Service Endpoint source address」に置き換わるので、`10.223.220.45` を ICOS IP Firewall で許可します。

```shell:

export BUCKET_NAME=content-library

export ACCESS_TOKEN=$(ibmcloud iam oauth-tokens --output JSON | jq -r '.iam_token')
echo $ACCESS_TOKEN

curl -X PATCH https://config.cloud-object-storage.cloud.ibm.com/v1/b/$BUCKET_NAME -H "authorization: $ACCESS_TOKEN" -d @- << EOF
{
  "firewall": {
    "allowed_ip": [
      "$(curl http://checkip.amazonaws.com)",
      "10.223.220.45"
    ]
  }
}
EOF

curl https://config.cloud-object-storage.cloud.ibm.com/v1/b/$BUCKET_NAME -H "authorization: $ACCESS_TOKEN" | jq -r
```

# VPC から ICOS へのアクセスが許可されることを確認

VPC の Windows Server から [S3 Browser](https://s3browser.com/) を使ってアクセス確認します。
以下のように対象バケットに対して、VPC の Windows Server から ICOS へのアクセスが許可されることを確認します。

![Kobito.TbNjaN.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/101361/c35bcf49-78cf-0888-a3a6-729c93075e10.png "Kobito.TbNjaN.png")

# IBM Cloud Activity Tracker with LogDNA でアクセス許可のログを確認

IBM Cloud Activity Tracker with LogDNA の画面から以下のようなアクセスログが確認できます。
ICOS IP Firewall の設定変更が適用された後に、アクセス `OK` となっていることが確認できます。
 
 ![貼り付けた画像_2020_09_30_17_16.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/101361/fd137515-0886-0642-b558-1ae3782902fe.png "貼り付けた画像_2020_09_30_17_16.png")

# さいごに

ICOS IP Firewall のログが IBM Cloud Activity Tracker with LogDNA で確認できることがわかりました。
また、VPC からのアクセス時のソース IP を許可すれば、アクセスできることが確認できました。

IBM Cloud VPC でキャンペーンも実施しているので、ぜひ使ってみてください。

>https://www.ibm.com/jp-ja/cloud/vpc
![Kobito.XW6XIf.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/101361/e6351fee-b674-706f-a968-de5f4c68423d.png "Kobito.XW6XIf.png")

# 参考 : Flow logs for VPC で確認できる情報

```json:flow_log.json
{
  "version": "0.0.1",
  "collector_crn": "crn:v1:bluemix:public:is:jp-tok:a/xxx::flow-log-collector:rxxx",
  "attached_endpoint_type": "vnic",
  "network_interface_id": "xxx",
  "instance_crn": "crn:v1:bluemix:public:is:jp-tok-3:a/xxx::instance:xxx",
  "vpc_crn": "crn:v1:bluemix:public:is:jp-tok:a/xxx::vpc:xxx",
  "capture_start_time": "2020-10-08T05:50:58Z",
  "capture_end_time": "2020-10-08T05:55:58Z",
  "state": "ok",
  "number_of_flow_logs": 25,
  "flow_logs": [
    {
      "start_time": "2020-10-08T05:50:56Z",
      "end_time": "2020-10-08T05:51:11Z",
      "connection_start_time": "2020-10-08T05:50:56Z",
      "direction": "O",
      "action": "accepted",
      "initiator_ip": "192.168.250.9",
      "target_ip": "161.26.0.22",
      "initiator_port": 51450,
      "target_port": 443,
      "transport_protocol": 6,
      "ether_type": "IPv4",
      "was_initiated": true,
      "was_terminated": true,
      "bytes_from_initiator": 1591,
      "packets_from_initiator": 11,
      "bytes_from_target": 7095,
      "packets_from_target": 11,
      "cumulative_bytes_from_initiator": 1591,
      "cumulative_packets_from_initiator": 11,
      "cumulative_bytes_from_target": 7095,
      "cumulative_packets_from_target": 11
    },
    ...
```