プログラミング初心者がアーキテクトっぽく語る

見苦しい記事も多数あるとは思いますが訂正しつつブログと共に成長していければと思います

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インスタンス起動

  • 踏み台用のEC2インスタンスを起動します
    • SubnetはPublic Networkを選択します
    • Security GroupのInbound RuleではSSHを許可します
    • Security GroupのOutbound RuleでSSHを許可します
  • Private NetoworkにEC2インスタンスを起動します
    • SubnetはPrivate Networkを選択します
    • Security GroupのInbound RuleとOutbound RuleではSSHを許可します
  • 具体的な手順についてはこちらの過去記事を参照してください

architecting.hateblo.jp


Step5 - アクセス


後始末

  • 不要になったらNAT gatewayを削除して、Elastic IPを開放することを忘れないようにしましょう

AWSで安全なEC2インスタンスを立ち上げるための鉄則

EC2インスタンスハッカーに攻撃されて乗っ取られたりしたら嫌ですよね。

でも不必要に怖がっていたらクラウドなんて使えないですよね。

必要なのは正しい知識です。

AWSからBest Practiceが提示されているので理解しておきましょう。

aws.amazon.com


管理用SSHアクセスにはEC2 Instance Connectを利用する

  • EC2 Instance Connectの接続はIAMを利用して安全に管理されている
  • 接続元をAWSに限定できるので安全なSecurity Group Inbound Ruleを作成できる

rootユーザによるSSH接続を許容しない

  • AWSが提供するAMIはほとんどrootユーザによるSSH接続を許可していない

SSH接続ではパスワード認証ではなくKey Pairを使用する

  • パスワード認証を無効化することで総当り攻撃などの攻撃を無効化できる
  • AWSが提供するAmazon LinuxのAMIなどはパスワード認証が無効化されている

不明なソースからのアクセスを制限する

  • 自分のPCアドレスや、会社のネットワークなどからのアクセスのみを許可すること
  • EC2 Instance Connectを利用する場合、EC2 Instance Connectが利用するアドレス帯も許可すること

不要なプロトコルへのアクセスを制限する

  • RDP、SSHHTTPS等、必要なポート以外はSecurity GroupのInbound Ruleで制限すること

OSを最新の状態に保つ

  • 以上の全てを実行してもOSやライブラリの脆弱性をつかれてハッキングされるリスクは以前、残っている
  • 既知の脆弱性を防ぐためにもすぐに更新を実行すること
    • sudo yum update

Linux EC2インスタンスを起動してRemote Desktop接続する

前回はLinxu EC2インスタンスSSHで接続する手順を紹介しました。

architecting.hateblo.jp

しかしGUIを利用したいときもあるかと思います。

今回はAmazon LinuxのMATEというデスクトップ環境へRemote Desktopでアクセスする方法を紹介します。

この公式マニュアルがネタ元です。

docs.aws.amazon.com

注意しておきたいのが、xrdpのためにec2-userのパスワード認証を有効にしている点です。

SSHが辞書攻撃を受けても乗っ取られないよう対策してください。

以下に対策の例をいくつか挙げます。

  • Security Groupを使ってEC2 Instance Connect以外からのSSH接続を全て拒否する
  • SSHで証明書を利用する

Step1

  • Security Groupを作成します
  • Outbound Ruleは最初から入力されているので必要に応じて変更してください
  • Inbound RuleでRDP(3389)とSSH(22)を許可します。
    • SSHはxrdpの設定をするために利用します
    • SSHを許可するSecurity Groupの作成については前回の記事を参考にしてください。


Step2

  • LinuxのEC2インスタンスを作成します。
  • MATEデスクトップ環境を含んだAMIを選んでください

  • 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つソースを指定するとよいでしょう
    • EC2インスタンスSSH接続するPCのアドレス
    • Instance Connectで使用されるアドレス
      • Tokyo Region: 3.112.23.0/29
      • North Virginia Region: 18.206.107.24/29


Step2

  • Key Pairをまだ作成していない場合は作成します
  • 作成するとpemファイルがダウンロードされるので失くさないよう大事に保管します


Step3


Step4

  • EC2インスタンスがRunning状態になったらチェックして「Connect」を押下します


Step5a - EC2 Instance Connectの場合

  • EC2 Instance Connectタブで「Connect」を押下します


Step5b - PCからSSH接続する場合

  • SSH clientタブを選択します
  • 表示されたsshコマンドをコピーします

  • Terminalを開いてKey Pairのpemファイルが保存されているフォルダに移動します
  • pemファイルのPermissionを変更していない場合は変更します
  • 先程コピーしたsshコマンドを実行すると接続されます

AWSで管理作業用IAMユーザを作成する

AWSアカウントを作成したら最初に実施しておきたいことを紹介しています。

前回はBilling Alarmの有効化について取り上げました。

architecting.hateblo.jp

今回は管理用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を有効化します

architecting.hateblo.jp


まとめ

これまで以下の3つの作業を実施しました。

  • RootアカウントのMFA有効化
  • Billing Alarmの設定
  • 作業用IAMユーザの作成とMFA有効化

これでAWSアカウントを安全に利用する準備が整いました。

EC2インスタンスを立ち上げる際に安全上、注意したい点もここにまとめたので必要に応じて参照してください。

architecting.hateblo.jp

AWSでBilling Alarmを有効にする

AWSアカウントを作成したら最初に実施しておきたいことを紹介しています。

前回はRootアカウントのMulti Factor Authentication(MFA)の有効化について取り上げました。

architecting.hateblo.jp

今回は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ユーザを作成します。

architecting.hateblo.jp

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を設定しましょう。

architecting.hateblo.jp