private networkのEC2インスタンスに踏み台インスタンス経由でアクセスする
Private NetworkはInternet Gatewayがなく、Public IPアドレス割当もない、安全なSubnetです。
外部からのアクセスが必要ないEC2インスタンスはPrivate Networkに構築することが一般的です。
それらEC2インスタンスに管理上の理由で外部からアクセスしたい場合は踏み台インスタンス経由でアクセスします。
今回はPrivate Networkに構築したEC2インスタンスに踏み台インスタンスからSSH接続する手順を紹介します。
Step1 - Private Subnet作成
- まずはPrivate Subnetを作成します
- 「VPC」を開き、画面左メニューから「Subnets」を選択します
- 既存のIPv4 CIDRをチェックして、空いているCIDRブロックを確認します
- 「Create subnet」を押下してSubnetを作成します
- 適切なVPCを選択します
- 例ではDefault VPCを選択しています
- Subnet nameを記入します
- VPC名とAZ名を含めておくと便利です
- AZとCIDR blockを記入します
- 例では"us-east-1a"、172.31.96.0/20を記入しています
--
Step2 - NAT Gateway作成(Optional)
- 次にPrivateインスタンス外部通信用(yum/apt-get等)のNAT Gatewayを作成します
- 画面左メニューから「NAT gateways」を選択し、「Create NAT gateway」を押下します
- 「Name」を記入します
- 「Subnet」はPublic Subnetを選択します
- 「Connectivity Type」はPublicです
- Elastic IPを割り当ててください
Step3 - Route Table作成
- Private Network用のRoute Tableを作成します
- 画面左メニューから「Route tables」を選択し、「Create route table」を押下します
- 「Name」と「VPC」を記入して「Create route table」を押下します
- 「Routes」タブで「Edit routes」を選択します
- 「Add route」を選択してNAT Gatewayへのルートを追加します
- 最後に作成したRoute TableをPrivate Subnetに紐付けます
- 「Subnet associations」タブで「Edit subnet associations」を選択します
- private networkを選びます
Step4 - EC2インスタンス起動
Step5 - アクセス
- 踏み台インスタンスからPrivateインスタンスへSSHできるよう、PC上でKey Pairを
ssh-add
しますssh-add -K Key Pair名
- PCから踏み台インスタンスへ
-A
オプション付きでSSHしますssh -A -i "Key Pair名" ec2-user@踏み台インスタンスのPublic Address
- 踏み台インスタンスからPrivateインスタンスへSSHします
ssh ec2-user@PrivateインスタンスのPrivate Address
後始末
- 不要になったらNAT gatewayを削除して、Elastic IPを開放することを忘れないようにしましょう
AWSで安全なEC2インスタンスを立ち上げるための鉄則
EC2インスタンスをハッカーに攻撃されて乗っ取られたりしたら嫌ですよね。
でも不必要に怖がっていたらクラウドなんて使えないですよね。
必要なのは正しい知識です。
AWSからBest Practiceが提示されているので理解しておきましょう。
管理用SSHアクセスにはEC2 Instance Connectを利用する
- EC2 Instance Connectの接続はIAMを利用して安全に管理されている
- 接続元をAWSに限定できるので安全なSecurity Group Inbound Ruleを作成できる
rootユーザによるSSH接続を許容しない
SSH接続ではパスワード認証ではなくKey Pairを使用する
不明なソースからのアクセスを制限する
- 自分のPCアドレスや、会社のネットワークなどからのアクセスのみを許可すること
- EC2 Instance Connectを利用する場合、EC2 Instance Connectが利用するアドレス帯も許可すること
不要なプロトコルへのアクセスを制限する
OSを最新の状態に保つ
Linux EC2インスタンスを起動してRemote Desktop接続する
前回はLinxu EC2インスタンスにSSHで接続する手順を紹介しました。
しかしGUIを利用したいときもあるかと思います。
今回はAmazon LinuxのMATEというデスクトップ環境へRemote Desktopでアクセスする方法を紹介します。
この公式マニュアルがネタ元です。
注意しておきたいのが、xrdpのためにec2-userのパスワード認証を有効にしている点です。
SSHが辞書攻撃を受けても乗っ取られないよう対策してください。
以下に対策の例をいくつか挙げます。
Step1
- Security Groupを作成します
- Outbound Ruleは最初から入力されているので必要に応じて変更してください
- Inbound RuleでRDP(3389)とSSH(22)を許可します。
Step2
- Key Pairを指定していください
- Key Pairについては前回の記事を参考にしてください
- 先程作成したSecurity Groupを選んでRDPとSSHを許可してください
- 他はデフォルトで大丈夫です。
Step3
- EC2インスタンスが起動したらEC2 Instance ConnectでSSH接続してください
- EC2 Instance Connectで接続する手順については前回の記事を参考にしてください
- まずはOSを最新化してください
sudo yum update
sudo reboot
Step4
- xrdpを設定します
- ec2-userのパスワードを設定してください
sudo passwd ec2-user
- 証明書を作成して、公開鍵を
/etc/xrdp/key.pem
に、証明書を/etc/xrdp/cert.pem
に配置してください
- xrdpサービスが有効になっていることを確認してください
systemctl status xrdp
Step5
- Remote Desktopクライアントを使って接続してください
Linux EC2インスタンスを起動してSSH接続する
LinuxのEC2インスタンスを作成してSSH接続しましょう。
Step1
- Security Groupを作成します
- 悪意のある攻撃を避けるため、EC2インスタンスに通信できるアドレスを制限します
- Outbound Ruleは最初から入力されているので必要に応じて変更してください
- Inbound RuleでSSHを許可します。
- Inbound Ruleにはは以下の2つソースを指定するとよいでしょう
Step2
- Key Pairをまだ作成していない場合は作成します
- 作成するとpemファイルがダウンロードされるので失くさないよう大事に保管します
Step3
Step4
- EC2インスタンスがRunning状態になったらチェックして「Connect」を押下します
Step5a - EC2 Instance Connectの場合
- EC2 Instance Connectタブで「Connect」を押下します
Step5b - PCからSSH接続する場合
- Terminalを開いてKey Pairのpemファイルが保存されているフォルダに移動します
- pemファイルのPermissionを変更していない場合は変更します
- 先程コピーしたsshコマンドを実行すると接続されます
AWSで管理作業用IAMユーザを作成する
AWSアカウントを作成したら最初に実施しておきたいことを紹介しています。
前回はBilling Alarmの有効化について取り上げました。
今回は管理用IAMユーザの作成について紹介します。
管理用IAMユーザの作成
AWSではRootユーザで作業することは推奨されていません。
Rootの代わりに利用するIAMユーザを作成しましょう。
具体的には以下の4つの作業を行います。
- Account Aliasの作成
- IAMユーザでサインインするときに使います
- IAMユーザのBilling情報へのアクセスを許可
- デフォルトではIAMユーザはBilling情報へアクセスできません
- IAMユーザの作成
- IAMユーザのMFA有効化
1. Account Aliasの作成
Step1
- 「IAM」を開きます
- 画面右の「Account Alias」の「Create」を選択します
Step2
- Account Aliasを入力します
- 「Save changes」を押下します
2. IAMユーザのBilling情報へのアクセスを許可
Step1
- Console画面右上のアカウント名をクリックして「Account」を選択します
--
Step2
- 「IAM User and Role Access to Billing Information」で「Edit」を選択します
Step3
- 「Activate IAM Access」をチェックします
- 「Update」を押下します
3. IAMユーザの作成
Step1
- 「IAM」を開きます
- 「Users」を選択し、「Add users」を押下します
Step2
- ユーザ名、パスワードを入力します
- 他の欄は画像を参考にチェックしてください
- 「Next」を押下します
Step3
- 「Create group」を押下します
Step4
- グループ名を入力します
- 「AdministratorAccess」をチェックします
Step5
- ページ下部にある「Create user group」を押下します
--
Step6
- 作成したグループを選択します
- 「Next」を押下します
Step7
- 確認して「Create User」を押下します
Step8
- 「Return to users list」を押下します
Step9
- サインアウトして、再度サインインします
- 「IAM user」を選択します
- 「1. Account Aliasの作成」で作成したAccount Aliasを入力します
- 「Next」を押下します
Step10
- 作成したIAMユーザ名とパスワードを入力します
- 「Sign in」を押下します
4. IAMユーザのMFA有効化
Step1
- 作成したIAMユーザでサインインします
- サインイン済みであれば不要です
- Rootユーザと同じ方法でMFAを有効化します
まとめ
これまで以下の3つの作業を実施しました。
- RootアカウントのMFA有効化
- Billing Alarmの設定
- 作業用IAMユーザの作成とMFA有効化
これでAWSアカウントを安全に利用する準備が整いました。
EC2インスタンスを立ち上げる際に安全上、注意したい点もここにまとめたので必要に応じて参照してください。
AWSでBilling Alarmを有効にする
AWSアカウントを作成したら最初に実施しておきたいことを紹介しています。
前回はRootアカウントのMulti Factor Authentication(MFA)の有効化について取り上げました。
今回はBiling Alarmの設定について紹介します。
Billing Alarm
Cloudの利用で注意すべきことの一つが利用料です。
ある日突然、高額な料金を請求されないようBilling Alarmを設定しましょう。
設定した金額を超過したときにメールで通知してくれ、過請求を防ぐことができます。
Step1
- Console画面右上のアカウント名をクリックし、「Account」を選択します
Step2
- 「Billing preferences」を選択します
- 「Receive Billing Alerts」をチェックします
- ついでに全部チェックしてもいいです
- 「Save preferences」を押下します
Step3
- 「CloudWatch」を開きます
- 「Billing」を選択します
Step4
- 「Create alarm」を押下します
Step5
- 「Select Metric」を押下します
Step6
- 「Billing」を選択します
Step7
- 「Total Estimated Charge」を選択します
Step8
- 「USD」をチェックします
- 「Select metric」を押下します
Step9
- 「than...」にしきい値を記載します
- この例では想定利用料が$10を超過するとAlarmが発生します
- 「Next」を押下します
Step10
- 「Create new topic」をチェックし、新規SNS topicを作成します
- Topic名を入力します
- メールを送信するメールアドレスを入力します
- 「Create topic」を押下します
Step11
- ページ下部の「Next」を押下します
Step12
- アラーム名を入力します
- 「Next」を押下します
Step13
- 「Create alarm」を押下します
Step14
- この時点では以下のような警告が表示され、Alarmが発生してもメールは送信されません
- Step10で登録したメールアドレスを確認し、AWSからの確認メールをConfirmしてください
完了
- これでBilling Alarmの設定は完了です
次回
次回はRootアカウントの替わりに利用する、管理作業用IAMユーザを作成します。
AWSのRootアカウントのMFAを有効にする
クラウドの勉強のためにAWSのFree Tierでアカウントを作成しました。
アカウントを作成した後、最初にやっておいた方がよいことをまとめます。
まずはRootアカウントのMulti Factor Authentication(MFA)の有効化です。
RootアカウントのMFA有効化
Rootアカウントは全ての権限を持っており、Rootアカウントの権限を制限することはAWSの仕様上、できません。
悪意のあるユーザにRootアカウントを乗っ取られた場合の被害は甚大です。
このためAWSではRootアカウントのMFAを有効化することと、Access Keyを利用しないことが推奨されています。
AWSにアカウントを作成したらすぐにMFAを有効化しましょう。
Step1
- アカウント作成時に入力したメールアドレスとパスワードでサインインします。
Step2
- IAMに移動します。
- 「Add MFA」、もしくは「My security credentials」をクリックします。
Step3
- 「Assign MFA device」をクリックします。
Step4
- 「Device name」を入力して「Next」をクリックします。
- 認証アプリでは「Device name」@「Account Alias」で表示されるのでユーザ名等、区別しやすい名前をつけましょう。
Step5
- Google Authenticatorをスマートホンにインストールして起動します。
- 他のAWSがサポートしている認証アプリでも手順は同じです
- Google Authenticatorで「+」ボタンを押して、AWS設定画面のQRコードを読み取ります。
- Google Authenticatorが表示したコードをMFA code 1に入力します。
- Google Authenticator上でコードがタイムアウトして新しいコードが表示されたらMFA code 2に入力します。
- 「Add MFA」をクリックします。
Step6
- MFAの設定が完了しました。
動作確認
- 一度、サインアウトして再度、Rootでログインします。
- メールアドレス、パスワード入力後にMFAコードの入力を求められます。
- Google Authenticatorで表示されたコードを入力してログインできれば成功です。
次回
次回は突然、高額請求をされないようにBilling Alarmを設定しましょう。