Google Cloud Compute Engineを始めた時の記録
Google Cloud Compute Engine のインスタンスを作成
とりあえず VM インスタンスを作ってみる
- プロジェクトを作成
- vm作成
- google compute engine api 有効化
- リージョン us-west1 (オレゴン) 選択
- ゾーン 指定なしのまま
- series E2 選択
- マシンタイプ E2-micro 選択
- ブートディスの構成を変更
- ブートディスクの種類をバランス永続ディスクから標準永続ディスクに変更
- 選択
- ネットワークを選択
- ネットワークインターフェースを開く
- ネットワークサービスティアを Premium からスタンダードに変更
- 完了
- 作成
インスタンス作成後、起動状態になる。
sshd のポート変更
いたずらアクセス軽減のために 22 以外のポート (ここではカスタムポート番号と記載する)で ssh できるように設定を追加する。
何か設定をミスる可能性も考慮して 22 のポートは残しておく。
sudo vi /etc/ssh/sshd_config.d/port.conf
Port 22
Port 1024より大きい何か適当な数字 <= カスタムポート番号
設定を反映するために sshd を再起動。
下記のどれかが正解 (全部正解かも)
sudo systemctl restart sshd
sudo service ssh restart
sudo /etc/init.d/ssh restart
いたずらアクセスできないようにファイアウォールを設定する
ファイアウォールの設定で
- デフォルトの 22 ポートは google cloud console の web ブラウザ ssh のみ許可。
- 外部からのアクセスはカスタムポート番号のみ許可。
のように設定すれば、いたずらは 99% 防げると思う。
外からアクセスできないように一旦インスタンスを停止。
ファイアウォールの設定をするために、新しくVPCネットワークを作成する
- VPC ネットワーク選択
- VPC ネットワークを作成を選択
- 名前に net-ce-default 入力
- 説明に compute engine のデフォルトのネットワーク
- 最大伝送単位 (MTU) はデフォルトの 1460 のまま
- ネットワークプロファイルを構成するはデフォルトのチェックなし
- サブネット作成モードは自動を選択
- ファイアウォールルールの一覧から net-ce-default-allow-ssh にチェックを入れる
- 動的ルーティングモードはデフォルトのリージョンのまま
- 最適なパス選択モードはレガシーのまま
- 作成
22 ポートに向けてアクセスで、ルールにヒットしなかったものは拒絶するためのファイアウォールルール追加
- net-ce-default-deny-all
- 優先度 65535
- 方向 上り(内向き)
- 一致したときのアクション 拒否
- IP範囲 0.0.0.0/0
- プロトコルとポート TCP 22
google console の web ブラウザ上の ssh 接続を許可するファイアウォールのルールを追加
- net-ce-default-allow-ssh-console
- 優先度 65001
- 方向 上り(内向き)
- 一致したときのアクション 許可
- IP範囲 35.235.240.0/20
- プロトコルとポート TCP 22
sshd の設定に追加したカスタムポート番号は外部からのアクセスを許可するファイアウォールのルールを追加
- net-ce-default-allow-sshカスタムポート番号
- 優先度 65000
- 方向 上り(内向き)
- 一致したときのアクション 許可
- IP範囲 0.0.0.0/0
- プロトコルとポート TCP カスタムポート番号
作成した vm インスタンスに作成したファイアウォールを適用
- Compute Engin VMインスタンスを選ぶ
- インスタンス名を選択
- 編集
- ネットワークインターフェースを default から net-ce-default に変更。完了。
- 保存
起動してみる
- インスタンスを開始
- ブラウザから ssh で接続。
- 不正ログインを試みているアクセスのログを確認。
cat /var/log/auth.log
terminal ソフトから ssh で接続できるように鍵を登録
web 上の console から ssh 接続したり、 gcloud compute ssh を使用して接続する時はこの対応は不要。
- 鍵のベアを作成する。鍵の種類は ed25519 推奨。RSA は避けるのが無難。
- Compute Engine VMインスタンスを選ぶ。
- インスタンス名を選択
- 編集
- SSH認証鍵のセクションん項目を追加を選択
- 公開鍵とユーザー名を記載する
ssh-ed25519 AAAAhogehoge username@pcname
- 保存
os の状態を最新にする
upgrade は結構時間がかかる (10分以上 ?) ので、気長に待つ。
sudo apt-get update
sudo apt-get upgrade
git インストール
sudo apt-get install git
git --version
git 初期設定
git config --global --add user.name "ユーザー名"
git config --global --add user.email "メールアドレス"
ユーザー名とメールアドレスは適当なものでも ok。
github と連携するなら github の noreply アドレスを設定するのがお勧め。
noreplyアドレスは github の Settings の Emails で『Keep my email addresses private』にチェック入れるとしようできる。具体的なアドレスは Keep my email addresses private のチェックマークの下あたりに記載があると思う。
『Block command line pushes that expose my email』はチェックを入れておくのが無難。
github に push するために認証鍵で github できるようにする
鍵を生成
ssh-keygen -t ed25519
公開鍵の内容を確認
cat ~/.ssh/id_ed25519.pub
github の profile の settings の SSH and GPG keys のページを開いて New SSH Key をクリック。
公開鍵の内容を追加する。
タイムゾーンを utc から jst に変更
sudo ln -sf /usr/share/zoneinfo/Asia/Tokyo /etc/localtime
vmインスタンスをリセット(再起動) ※必要ないかも?
docker インストール
古いパッケージのアンインストール。全部入っていなさそうだけど、実行しても問題なし。
for pkg in docker.io docker-doc docker-compose podman-docker containerd runc; do sudo apt-get remove $pkg; done
apt リポジトリに docker 追加
docker の公式リポジトリにアクセスするためのGPG鍵を追加
sudo apt-get update
sudo apt-get install ca-certificates curl
sudo install -m 0755 -d /etc/apt/keyrings
sudo curl -fsSL https://download.docker.com/linux/debian/gpg -o /etc/apt/keyrings/docker.asc
sudo chmod a+r /etc/apt/keyrings/docker.asc
docker の公式リポジトリを追加
echo \
"deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/debian \
$(. /etc/os-release && echo "$VERSION_CODENAME") stable" | \
sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
sudo apt-get update
docker インストール
sudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
sudo docker --version
docker を sudo 付けなくても実行できるように
※ユーザー名の部分は docker を実行するユーザー名に置き換える事
sudo groupadd docker
sudo usermod -aG docker ユーザー名
vmインスタンス再起動みたいに書いてあったけど、次のコマンドを実行すれば不要かも ?
newgrp docker
動作確認。 permission error が出なければ OK
docker run hello-world
その他よく使うツールのインストール
tree ..... テキストでツリー構造を表現するのをサポートしてくれる
sudo apt-get install tree
調査
os の種類やバージョン確認
cat /etc/os-release
どんな port を listen しているか?
ss -atn
sshd 稼働状態
/etc/init.d/ssh status
sshd 再起動時も含めたログ
/var/log/auth.log
タイムゾーン確認
date
cat /etc/timezone
cat /etc/localtime
トラブル色々
permission エラーが出る
$ docker run hello-world
docker: permission denied while trying to connect to the Docker daemon socket at unix:///var/run/docker.sock: Head "http://%2Fvar%2Frun%2Fdocker.sock/_ping": dial unix /var/run/docker.sock: connect: permission denied.
See 'docker run --help'.
sudo をつけなくも実行できる対応ができていない。
ssh の config に port を追加しても追加した port が listen されない
sshd_config ではなく ssh_config の方に設定を追加していた。
なんか思っていたより課金されている
Balanced PD Capoacity として課金。
ストレージがバランス永続ディスクだと無料枠対象外。
タイプを標準永続ディスクにする必要があった。
なんか思っていたより課金されている ?
Google Cloud Console の課金の請求一覧のしょうさいに
- E2 Instance Core running in America
- E2 Instance Ram running in America
で請求あるような表記になっていた
ゾーンを指定してしまっていて、リージョン が us-west1-a (オレゴン) になって課金されている ?
ゾーンを指定していなくても、ネットワークインターフェースのネットワークサービスティアが Premium になっていると、勝手にゾーンが指定された状態になる ?
us-west1 を選択すると必ずゾーンが指定される ?
課金されると表示されているけど、実際は請求されない ?
請求書の詳細を全部表示すると最後にdiscount の記載がされていて無料になっていた。
参考サイト
- debian に docker をインストールする
- docker を sudo 無しで実行できるようにする
- github noreply メールアドレスについて
Discussion