20190319-AWSでSSHサーバを試してみる(花火&dozono 合同セッション)

ref: [https://wp.infra-workshop.tech/event/sshserver_on_aws/ ]

概要

  • ゴールは
    • AWSでタイトルのものを作る
      • Publish subnetとかPrivateサブネットとか
      • できる限りセキュアに作る
  • Private ... 内部ネットワーク
  • ちょこっとだけセキュリティがらみの話も
  • デモの手順もあまりチェックしてないので、誰かサポートしてくれると嬉しい
  • 期限は1週間

イントロ: AWS

そもそもAWSでネットワークで組むとは

  • まずはAWSの話
  • Discordに入っている
    • Laptop, Mobile等、デバイスがある(スタート地点)

PC - (ごにょごにょ) - 先は画像参照

  • AWS
    • VPC(Virtual Private Cloud)
      • AWS<「パブリッククラウドじゃない、クラウドの会社だ」
      • VPCによりプライベートクラウドのように使える
    • IGW(Internet GateWay)
      • VPCをインターネットに公開したい
      • IGWによってVPCがインターネットに接続される

実演: マネジメントコントール

  • バージニア北部(一番安い)

  • VPC

    • Create VPC
    • 名前付け
    • CIDR(サブネットの範囲) の決定
      • Classless Inter Domain Routing
      • ネットワーク部、ホスト部+suffix
      • AWSのIP空間を自由に作ることができる
    • Create!
    • ほとんど無償で使えるネットワークサービス
      • VPC立てるだけは無料
      • 一部有償なので注意(一部): NAT, Elastic IP, VPN, Endpoint
  • IGW

    • Nameタグ
    • 作成
    • できた!!
    • 名前しか付けてない->detached
    • VPCにアタッチしてあげる->VPCが外につながることができる
  • EC2

    • 今回はサーバーを作る
  • その前に...サブネットを作る必要がある (必須)

    • Subnet
      • routing, FWと紐づけてくれる機能
      • subnetとIGWを接続
      • VPCのCIDRからどれだけ切り出すか
        • CIDRブロック
      • アベイラビリティゾーン
        • データセンターとくっつけて特定のデータセンター内に作れる
        • BCP観点で複数に作るのが推奨
      • オンプレミスにおける以下を自動で作った感じ
        • VLANを切る
        • DHCP
        • DNS
    • タイトルに戻ると・・・「Public」と「Private」
      • routingによって、どのようになるかかわる
      • ex: public subnet 10.0.0.0/24 ・・・IGWとつなげる
        • RT(route table)(オンプレニおけるL3スイッチ)をIGWとSubnet間に用意する必要あり
          • Name tag, VPCを設定
          • 一発! L3スイッチのひな型ができた
          • VPC内では自動で設定することが可能
          • 0.0.0.0/0 -> IGWという設定を入れる
          • サブネットに関連付ける
          • 自分からも外に出れるし、外からも自分に入れる
      • ex: Private Subnet 10.0.1.0/24 ・・・IGWとつながない
        • サブネット作成!!
        • localしかない->VPC内とはできるけど、外とはできない
  • EC2を今度こそ作る Public側

    • ※terminated ... しんでる奴なので気にしないで
    • 何故多段にしたいか?
      • Public Subnetは誰でも入れる
      • オンプレでいうところのDMZ
      • こんなとこでDBやAP居たら攻撃受けちゃうよね?
      • だからPrivateに入れたい
      • けどPrivateに入れたら手元のPCから繋げないじゃん?
        • Routing的にIGWと繋がってないから
    • PublicにSSHサーバを踏み台として
    • ※サーバー作成はネットワークとあまり関係ないので適当に
      • ネットワーク選択: Public Subnetに
      • 自動割り当てパブリックIP
        • 無料でグローバルIPがもらえる
        • 何気にすごいよね
    • SecureSHell用のセキュリティグループ設定
      • ソース 0.0.0.0/0は怖い場合、マイIPにすればコンソールに繋いでるIPが見れる
    • 起動ポチッ
    • キーペア設定が出る
      • 新しいキーペアの作成
        • .pem ・・・秘密鍵->自分で所有
        • .pub ・・・公開鍵->AWSが所有
          • 後でもっかい鍵作り直そう(コッソリ)
      • マシン立ち上げ!!
      • runnningになったら入れるようになるヨ
  • アクセスする

    • ssh -l ec2-user ...
      • fingerprint is ...
      • @@@@@@@@@@@@@@@@@@@@@@ WARNING: UNPROTECTED PRIVATE KEY FILE @@@@@@@@@@@@@@@@@@@@@@@@
        • ちゃんとchmod 400 で秘密鍵は保護しましょう
  • Private SubnetにAPサーバを作成

    • パスワード認証切れてる
      • けど、APサーバにどうやって接続すれば?
      • Publicなとこに認証情報を置くわけにはいかない
    • ssh-agentを使う!!
      • 鍵の情報を、踏み台に置くことなく転送することができる
      • ~/.ssh/config
Host iw Hostname グローバルIP Port 22 User ec2-user IdentityFile 生成した秘密鍵
  • ssh iw
    • できた!
Host ap HostName APサーバのプライベートIP User ec2-user IdentityFile ProxyCommand ssh -W %h:22 iw
  • ProxyCommand使った方法見たことなかったので勉強になった

    • いつもPortForwardしてる
  • プライベート通信を確認

    • ping 8.8.8.8 -> 通らない
  • NATゲートウェイ作ってみる

    • ルーターみたいなのができた!
    • けどRoute Table書いてない!
    • ひな型作る
    • ルート設定返る
      • 0.0.0.0/0 Target->NAT Gateway
    • インターネットを使うにはNATを経由する
      • ※厳密にはNAPT
      • ping 8.8.8.8
        • 通った
      • yum
        • 行けた
        • docker入れて社内ポータルやってみよう
      • curl どうちゃらこうちゃら
      • docker動いた
      • docker-compose.yaml
      • sudo docker-compose
      • わちゃわちゃ
    • LocalForwardで手元PCからdockerの8000まで繋ぐ
    • SSH再接続
      • できない
    • セキュリティグループ止まってた
    • APサーバの8000を0.0.0.0/0でアクセス許可
    • WordPress動いた!
  • Wekan入れる

    • 同じ流れで8080をsshに入れる、セキュリティグループ許可
    • 動いた!
      • DOTO
      • Doing
      • DONE!
      • 💯

質問コーナー

Q. 踏み台にt3 microも必要なんですか?

  • 聞きそこなった
    • 多分そんなに必要ない
    • 気にして無さそう

Q. 自動で割り当てられるGIPは固定ではない感じでしょうか?

  • 聞きそこなった

Q. 安心・安全に使うには、sshd_config も編集した方が良いのでしょうか?それとも Amazon Linux は始めから結構強固な設定になっている?

  • 結構強固になってます
    • sshdの設定
    • portは22
    • dsakey止まってる
    • パスワード認証も止まってる

Q. キーペアは何度でも変更可能ですか?

  • マシン立ち上げるときに決める

これは「Linuxの機能」すかね。(AWSってわけじゃなく。非Linux環境にも同様のソフトがあるみたいですが。)

  • Macでも行ける
  • Windows でも putty で行ける

IGW?

  • VPCを外に出すため"だけ"の機能
  • RTと別々にしてる

Q.IGWにNATの設定をしてNAT経由でしか外にだせないのとSSHサーバを置く違いって何ですか?

  • SSH・・・外から
  • NAT・・・中から

Q. ルーティングって立ち上げた機器毎に設定する必要はないのでしょうか?(サブネットに設定を入れたら適用されたように見えました)

  • IP誰がふるの?
    • VPCがしてくれてる
    • DGとかも設定してくれてる
    • DHCPが勝手に動いてる
    • OSは立ち上がったら勝手にアサインしてくれる
      • クラウドっぽい!!CloudNative!
        • インフラストラクチャがAPIで使える
        • プログラムから起動したりする
      • オンプレ・・・IP管理表とか使って・・・

Q. .ssh-keygenで出てきたed25519って、awsもうサポートしてますか?(Azureがまだサポートしてないというのを見つけたの##

  • 入った後は自由にできる
  • やり様で
    • 鍵を作成後、AMIでよしなにすればed25519使えそう

ec2-userって無効にできるんです?キーペアと紐づいてるのかなぁと思いまして

  • Cloud-Initで検索っ

Q. 踏み台のインスタンスとNATインスタンスを同じサーバを使って実現することはできますか?

  • できないことは無い
    • NATがちっちゃい奴だときつくなる
    • EC2はマシンのサイジングに併せてネットワークのサイジングが決まる
    • NATは 10Gbpsでもさばける(つよい)