AWS 踏み台サーバー(bastion)経由でSSH接続

踏み台サーバーの英語:bastion
英語名のbastionをそのままAWSのインスタンス名に使用することが多いかと思います。

踏み台サーバのセキュリティ
踏み台サーバーは、例えば アクセスする地域が限定されていてアクセスできない場合に、許可されている地域のサーバ経由でアクセスするなど、悪いイメージがあるかもしれませんが、アプリケーションのセキュリティ対策としては有効な手段の一つとなっています。

踏み台サーバーとは?
踏み台サーバーとは中継サーバーで、踏み台サーバーを経由してでないとターゲットのサーバーにアクセスできないようセキュリティグループを設定する。
踏み台サーバーからアクセスすれば、接続先のWebサーバに踏み台サーバから接続してきたと思わせることができる。

– パブリックIPをインスタンスに割り当てる必要がない
– アクセス制御の対象を踏み台サーバに限定できるため、運用負荷を軽減

AWSでの設定方法
1. VPCの作成
2. Subnetの作成(踏み台サーバ、アプリサーバ、データストア)
3. Internet Gateway
4. Route Tableの確認、設定
5. Security Groupの作成(踏み台サーバ、アプリケーションサーバ、DB用)
6. 踏み台サーバの構築

※セキュリティグループをそれぞれ作成する

VPCのセキュリティグループ

– セキュリティグループは、インスタンスの仮想ファイアウォールとして機能し、インバウンドトラフィックとアウトバウンドトラフィックをコントロール
– VPC 内でインスタンスを起動した場合、そのインスタンスには最大 5 つのセキュリティグループを割り当てることができる
– 起動時に特定のグループを指定しないと、インスタンスは VPC のデフォルトのセキュリティグループに自動的に割り当てられる

AWS「ネットワーク&セキュリティ」の「セキュリティグループ」を見ます。

セキュリティグループとは
インバウンド
送信元 プロトコル ポート範囲 コメント

アウトバウンド
送信先 プロトコル ポート範囲 コメント

SSHをAnywhere(0.0.0.0/0)に対して開放し、万一キーペアが流出してしまった場合、クラッキングを受けた場合、SSHに脆弱性が発見された場合など、
様々なリスクがある。

なるほど、セキュリティグループ(VPC)でインバウンド、アウトバウンドを制御しているのね。

ec2でperlを動かそう

/var/www/cgi-bin

[ec2-user@ cgi-bin]$ ls
hello.cgi
[ec2-user@ cgi-bin]$ sudo chmod +x hello.cgi

#!/usr/bin/perl --
print "Content-type: text/html \n\n";
print "Hello";

きた

mysql
mysql> create database perldb;
Query OK, 1 row affected (0.02 sec)

mysql> use perldb;
Database changed
mysql> create table t1(
-> a int,
-> b varchar(10)
-> );
Query OK, 0 rows affected (0.04 sec)

mysql> insert into t1 values(1, ‘asakura’),(2, ‘adachi’),(3, ‘kobayakawa’);
Query OK, 3 rows affected (0.00 sec)
Records: 3 Duplicates: 0 Warnings: 0

mysql> select * from t1;
+——+————+
| a | b |
+——+————+
| 1 | asakura |
| 2 | adachi |
| 3 | kobayakawa |
+——+————+
3 rows in set (0.01 sec)

$ perl hoge.pl
Can’t locate DBI.pm in @INC (@INC contains: /usr/local/lib64/perl5 /usr/local/share/perl5 /usr/lib64/perl5/vendor_perl /usr/share/perl5/vendor_perl /usr/lib64/perl5 /usr/share/perl5 .) at hoge.pl line 4.
BEGIN failed–compilation aborted at hoge.pl line 4.

sudo yum -y install perl-DBI perl-DBD-MySQL

きた!OKKKKKKKKKKKKKKKK

次はservlet mysqlだ。ここわなー

mysqlのpasswordを忘れた時

passwordが違うと表示
ERROR 1045 (28000): Access denied for user ‘root’@’localhost’ (using password: YES)

さっぱり覚えていない
ec2の初期パスワードか?
[ec2-user@ ~]$ cat /var/log/mysqld.log

[ec2-user@ ~]$ mysql -u root -p
Enter password:
ERROR 1045 (28000): Access denied for user ‘root’@’localhost’ (using password: YES)
違うらしい。。

mysqlを止めて、/etc/my.cnfを編集
[ec2-user@ ~]$ sudo service mysqld stop
Stopping mysqld: [ OK ]
[ec2-user@]$ sudo vi /etc/my.cnf

skip-grant-tables を追加

再起動して、-pなしでログイン
[ec2-user@~]$ sudo service mysqld start
Starting mysqld: [ OK ]
[ec2-user@ ~]$ mysql -u root

> UPDATE mysql.user SET authentication_string = PASSWORD(‘new password’) WHERE User = ‘root’ AND Host = ‘localhost’;
> FLUSH PRIVILEGES;

[ec2-user@]$ sudo vi /etc/my.cnf
# skip-grant-tables //コメントアウト

$ sudo service mysqld restart
Stopping mysqld: [ OK ]
Starting mysqld: [ OK ]
[ec2-user@ ~]$ mysql -u root -p
Enter password:
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 3
Server version: 5.7.22 MySQL Community Server (GPL)

Copyright (c) 2000, 2018, Oracle and/or its affiliates. All rights reserved.

OK!ふう、焦った~

githubからec2へデプロイ

デプロイとは、ソフトウェアの分野で、開発したソフトウェアを利用できるように実際の運用環境に展開すること。

IAMからロールへ行く
CodeDeployを選択する

ec2 インスタンス
# CodeDeployエージェント
wget https://aws-codedeploy-ap-northeast-1.s3.amazonaws.com/latest/install
chmod +x ./install
sudo ./install auto

# 実行
sudo service codedeploy-agent start

appspec.ymlを編集して、githubにpush

version: 0.0
os: linux
files:
  - source: /
    destination: /home/ec2-user/dev/

code deployからアプリケーションの作成
deployする

deploy長いな。。

EC2 インスタンスタイプ比較

インスタンスタイプはさまざまな CPU、メモリ、ストレージ、ネットワークキャパシティーの組み合わせによって構成されているため、アプリケーションのリソースとして適切な組み合わせを柔軟に選択できる。

要件に応じてリソースをスケールできる。

T3…T3 インスタンスは、ベースラインレベルの CPU パフォーマンスを実現する次世代の汎用バーストインスタンスタイプで、いつでも必要に応じて CPU 使用率をバーストさせる機能を備えている。
T3 インスタンスは、コンピューティング、メモリ、ネットワークの各リソースのバランスが良く、幅広い汎用ワークロードに適している。
ベースラインのしきい値下でワークロードが動作しているときに CPU クレジットを蓄積
– CPU クレジットと、一貫したベースラインパフォーマンスによって制御されるバースト可能な CPU
– ピーク時のパフォーマンスを確保するUnlimited モード (デフォルト) と、毎月のコストを予測できる標準モードオプション
– AWS Nitro System と高周波のインテル Xeon スケーラブルプロセッサにより、T2 インスタンスに対して最大 30% の価格パフォーマンスの向上を実現

T2 インスタンスは、ベースラインレベルの CPU パフォーマンスを提供し、ベースラインを超えてバーストする機能を備えているバーストパフォーマンスインスタンス
ワークロードに必要とされる限り、高い CPU パフォーマンスを維持できます。ほとんどの汎用ワークロードについて、T2 Unlimited インスタンスは追加料金を一切生じることなく十分なパフォーマンスを提供
– 高クロックのインテル Xeon プロセッサ
– CPU クレジットと、一貫したベースラインパフォーマンスによって制御されるバースト可能な CPU
– 最も低コストな汎用インスタンスタイプであり、無料利用枠の対象*

M5 インスタンスは、最新世代の汎用インスタンス
このファミリーでは、コンピューティング、メモリ、ネットワークの各リソースがバランスよく提供されるため、多くのアプリケーションに適している。
– インテル Advanced Vector Extension (AVX-512) の新しい命令セットを搭載した、インテル Xeon® Platinum 8175 プロセッサ (2.5 GHz)
– さらに大きなインスタンスサイズ m5.24xlarge で、96 コアの vCPU と 384 GiB のメモリを提供
– 拡張ネットワーキングを採用した最大 25 Gbps のネットワーク帯域幅

M4 インスタンスでは、コンピューティング、メモリ、ネットワークの各リソースがバランスよく提供されるため、多くのアプリケーションに適している
– インテル Xeon® E5-2686 v4 (Broadwell) プロセッサ (2.3 GHz) またはインテル Xeon® E5-2676 v3 (Haswell) プロセッサ (2.4 GHz)
– デフォルトで EBS 最適化、追加料金なし

各 vCPU はインテル Xeon コアのハイパースレッド
インスタンスタイプによって使用しているプロセッサーが違いますね。

AWS auto scaling

EC2からauto scaling groupを押下します。

get started を押下後、Amazon Linux 2 AMIを選択します。

public ip addressを各インスタンスに割り当てる。

セキュリティグループの設定

auto scaling groupの詳細設計

auto scaling group

ec2でpythonにpost

[ec2-user@ip-xxx-xx-xx-xx app]$ python -V
Python 2.7.14

[ec2-user@ip-xxx-xx-xx-xx app]$ python35
Python 3.5.5 (default, Apr 25 2018, 23:51:32)
[GCC 4.8.5 20150623 (Red Hat 4.8.5-11)] on linux
Type “help”, “copyright”, “credits” or “license” for more information.
>>>

python2系だからか?
usr/binを見ます。

うまくいきませんね。
他の方法を試してみましょうか。。