AWS, AzureユーザがGCPを勉強します ~サーバ(CentOS7)にログインするまで~

# はじめに
これまで、AWS, Azure, Niftyクラウド, さくらクラウドを触ってきましたがGCPで構築をしたことがありませんでした。何となくGCP触ってみたくなったので、いつまで続くか分からないですがGCPについて勉強してみます。


# この記事でやること
サーバ(IaaS)を構築して、ログインするまでをやってみます。
その作業の中で気になった点を、**AWSやAzureの構築経験から**自分なりにまとめます。
GCPの細かい操作方法については記載しません。
他のクラウドサービスを触ったことのある方向けの内容となります。

- 大まかな内容
    - VPCについて
    - Compute Engineについて
        - GIP設定
        - ファイアウォール
        - サーバへの接続方法
        - サーバ内ファイアウォール


# GCPのネットワーク(VPC)
### VPCについて
- 詳しくは[公式ドキュメント(Virtual Private Cloud（VPC）ネットワークの概要)](https://cloud.google.com/compute/docs/vpc/?hl=ja)を見てください。
- VPCはリージョンに紐づきません。
    - リージョン間の通信はGCP内の専用線でプライベート通信で行われます。
        - 自前のDCを用意することで実現したようです。

- サブネットワークはリージョンに紐づきます。

# GCPのサーバ(Compute Engine)
### エフェメラルとは
- IPにエフェメラルというものを指定できますが、こちらは**静的なIPアドレスではないです。**
- インスタンスタイプを変更するときに、IPアドレスが変わってしまうことがあるようです。
- **外部IPアドレスをエフェメラルにするとIPアドレスが変わってしまうので、注意してください！**
    - 静的IPの取得は、GCP管理画面の左ペインの[VPCネットワーク]⇒[外部IPアドレス]から可能です。


### ファイアウォールの考え方
- ファイアウォール作成時に設定する[ターゲットタグ]と同様の[ネットワークタグ]が設定されたサーバに対して適用されます。

ファイアウォールの設定画面(VPCネットワーク⇒ファイアウォールルール)
![gcp2.png](https://qiita-image-store.s3.amazonaws.com/0/168635/5bafac21-bd92-e1ff-0c87-65e96f9397e7.png)
Compute Engineの設定画面(Compute Engine⇒VMインスタンス)
![gcp1.png](https://qiita-image-store.s3.amazonaws.com/0/168635/afde81d7-db4b-3f05-c4ba-8ba5994dc32b.png)

### サーバへの接続について
- GCPの管理画面から接続可能です。
    - TeratermといったSSHクライアントツールがなくても接続できます。
- 接続するデフォルトユーザはGCPに登録したアカウント名(gmailのユーザ名?)になってました。
- rootには`sudo su -`で切り替え可能でした。


ブラウザからサーバにSSH接続する(Compute Engine⇒VMインスタンス⇒ブラウザウィンドウで開く)
![gcp3.png](https://qiita-image-store.s3.amazonaws.com/0/168635/36f4d592-b979-1456-3136-ff92d54aa457.png)


### サーバ内のファイアウォール
- GCPのサーバ(Compute Engine)にはfirewalldがいました！
- 使わない場合は停止しましょう。
- ※CentOS7の環境で調査しています。


```
[root@instance-1 ~]# systemctl status firewalld
● firewalld.service - firewalld - dynamic firewall daemon
   Loaded: loaded (/usr/lib/systemd/system/firewalld.service; enabled; vendor preset: enabled)
   Active: active (running) since Sun 2018-11-04 11:16:45 UTC; 49min ago
     Docs: man:firewalld(1)
 Main PID: 397 (firewalld)
   CGroup: /system.slice/firewalld.service
           └─397 /usr/bin/python -Es /usr/sbin/firewalld --nofork --nopid

Nov 04 11:16:44 localhost systemd[1]: Starting firewalld - dynamic firewall daemon...
Nov 04 11:16:45 localhost systemd[1]: Started firewalld - dynamic firewall daemon.
Nov 04 11:16:46 localhost firewalld[397]: WARNING: /etc/sysconfig/network-scripts/ifcfg-eth0: Duplicate option definition: 'IPV6INIT=yes'
```

### CentOS7にインストールされているサービス
- 以下のサービスが立ち上がっていました。
- GCP特有のサービスがちらほらみえますね。

```
[root@instance-1 ~]# systemctl list-units --type=service | grep running
acpid.service                      loaded active running ACPI Event Daemon
auditd.service                     loaded active running Security Auditing Service
chronyd.service                    loaded active running NTP client/server
crond.service                      loaded active running Command Scheduler
dbus.service                       loaded active running D-Bus System Message Bus
getty@tty1.service                 loaded active running Getty on tty1
google-accounts-daemon.service     loaded active running Google Compute Engine Accounts Daemon
google-clock-skew-daemon.service   loaded active running Google Compute Engine Clock Skew Daemon
google-network-daemon.service      loaded active running Google Compute Engine Network Daemon
NetworkManager.service             loaded active running Network Manager
polkit.service                     loaded active running Authorization Manager
postfix.service                    loaded active running Postfix Mail Transport Agent
rsyslog.service                    loaded active running System Logging Service
serial-getty@ttyS0.service         loaded active running Serial Getty on ttyS0
sshd.service                       loaded active running OpenSSH server daemon
systemd-journald.service           loaded active running Journal Service
systemd-logind.service             loaded active running Login Service
systemd-udevd.service              loaded active running udev Kernel Device Manager
tuned.service                      loaded active running Dynamic System Tuning Daemon
```


# まとめ
- サーバに接続するまでに行った作業は以下の通りでした。
    - VPC作成
    - サブネット作成
    - Compute Engine作成
    - ファイアウォール作成&紐づけ
- AWSと違ってルートテーブルは作成しなくてもサーバに接続することが可能でした。
    - VPCを作成した際、自動で作成と紐づけがされていました。
- GCPのネットワークについては、もう少し勉強が必要です。
    - AWSやAzureはオンプレで作成するよなパブリックNWとプライベートNWをそのままクラウド上で行う感じでしたが、GCPはそれにとどまらないようなGCPなりのNW設計思想があるように感じました。
    - GCPが提唱するベストプラクティスを勉強しようと思います。