なんか楽天カードから引き落とされてる毎月の金額が多いとは感じてましたが、AWS(Amazone Web Service)の仮想マシンを削除し忘れていて、その分が課金されていた模様(涙)。
『1 US$ = 110.132159 円(2018年2月4日 現在)』ってなってたので、約500円ぐらい無駄に出費していたことに(泣)
インスタンスを削除する前に、せっかくなんで、最後に何かトライしてみたいと思います。
⇧ AWS(Amazon Web Services)については、上記サイト様が詳しいです。
そんでは、今回もハマりにハマっていきますか~。
AWS Toolkit for EclipseというEclipseプラグイン
AWS Toolkit for Eclipse は、AWSが提供しているオープンソースのEclipseプラグインで、Amazon EC2(Amazon Elastic Compute Cloud)やAmazon RDS(Amazon Relational Database Service)といった、AWS上のサービスをEclipseから操作できるようです。
というわけで、まずはEclipseを起動。(いい加減、バージョンを上げた方が良いかな?)
⇧ 上記サイト様によると、2018年の6月にはまた新しいバージョンが登場予定らしいですね。(Eclipse 4.7 Oxygen にしてもないのに、もう次のバージョンが出るとは...)
起動できたらば、「ヘルプ(H)」>「Eclipse マーケットプレイス(M)...」を選択。
「検索(I):」で、「AWS Toolkit for Eclipse」で検索するようですが、AWS Toolkitぐらいまででもヒットしました。(2018年2月4日 現在)
「AWS Toolkit for Eclipse 2.0」の「インストール」をクリック。
インストールするツールを選択する画面が表示されるので、すべてにチェックが付いていることを確認し、「確認(C)>」をクリック。
「使用条件の条項に同意します(A)」にチェックを付け、「完了(F)」。
インストールが完了すると、再起動を促されるので、「はい(Y)」を選択。
「AWS Toolkit for Eclipse」のアイコンが追加されます。
AWSのアクセスユーザー(IAM ユーザー)の作成
EclipseからAWS上のサービスにアクセスするために、AWSの「IAM(Identity & Accesss Management)」 というサービスで、Eclipseからのアクセス用のAWSユーザーを作成します。
AWSにログインしたらば、「コンソールへログイン」を選択。
「すべてのサービス」を開いて、下の方にスクロールすると、
⇧ 「セキュリティ、アイデンティティ、コンプライアンス 」という項目があるので、その中の「IAM」を選択。画面遷移したらば、「ユーザー」を選択。(ただし、これは間違ってました、先に「ポリシー」を作成せねばいけないらしい。参考書が旧かったのか。)
「ユーザーを追加」を選択。
「ユーザー名*」を入力し、「アクセスの種類*」にチェックを付けたら、「次のステップ:アクセス権限」をクリック。
「既存のポリシーを直接アタッチ」を選択し、「ポリシー名」の「AmazoEC2FullAccess」にチェックを入れ、「ポリシーの作成」をクリック。
※ Amazon RDSなんかのサービスを利用する場合は、そちらにもチェック。
「サービス」、「アクション」、「リソース」、「リクエスト条件」を編集していきます。まずは、「サービス」の行をクリック。
今回は、「EC2(Amazon EC2)」を選択。
続いて、「アクション」の行をクリック。
「All EC2 actions(ec2.*)」にチェック。警告が出ますが、次の「リソース」のところで「すべてのリソース」を選択すると消えます。「閉じる」をクリック。
「アクション」を編集した段階で、「リソース」にいろいろ表示されますが、「リソース」の行をクリックし編集していきます。
ラジオボタンが表示されるので、「すべてのリソース」を選択し、「閉じる」を選択。
「リクエスト条件」は、「MFAが必須」を選択。
MFA(Multi-Factor Authentication)とは 、Wikipediaによりますと、
Multi-factor authentication (MFA) is a method of confirming a user's claimed identity in which a user is granted access only after successfully presenting 2 or more pieces of evidence (or factors) to an authenticationmechanism: knowledge (something they and only they know), possession (something they and only they have), and inherence (something they and only they are).
Two-factor authentication (also known as 2FA) is a type (subset) of multi-factor authentication. It is a method of confirming a user's claimed identity by utilizing a combination of two different factors: 1) something they know, 2) something they have, or 3) something they are.
A good example of two-factor authentication is the withdrawing of money from a ATM; only the correct combination of a bank card (something that the user possesses) and a PIN (personal identification number, something that the user knows) allows the transaction to be carried out.
Two-step verification or two-step authentication is a method of confirming a user's claimed identity by utilizing something they know (password) and a second factor other than something they have or something they are. An example of a second step is the user repeating back something that was sent to them through an out-of-bandmechanism. Or the second step might be a 6 digit number generated by an app that is common to the user and the authentication system.
残~念、日本語じゃないじゃな~い! Googleの翻訳こんにゃくによりますと、
『認証メカニズムに2つ以上の証拠(または要因)を正常に提示した後でのみ、ユーザにアクセス権が与えられているユーザの主張された身元を確認する方法です。』
日本語では、「多要素認証」なんて言葉でもってもてはやされてますが、要するに、認証するときに2つ以上情報が必要ってことで、
などが該当するんではないでしょうか。(ユーザーID以外に、例えばスマホなどのハードウェアで生成されたトークンを認証に利用みたいな感じですかね)
⇧ ワンタイムパスワードについては、上記サイト様が詳しいです。
だいぶ、脱線してしまいましたが、すべて編集できたら、「Review Policy」をクリック。
「名前*」は必須なので、何か適当に。他は無くても良いみたいです。
「Create Policy」をクリック。
ポリシーが作成されます。
「ポリシータイプ」で「ユーザーによる管理」を選択すると、
作成したポリシーを確認できます。
AWSのアクセスユーザー(IAM ユーザー)が作成されてない
おい、AWSどうなってる?
⇧ IAM ユーザーが存在しません 、じゃねぇ~!とりあえず、もう一回、「ユーザーを追加」を選択。(どうやら、参考書は既に作成されていたポリシーを使ってたようですね)
「既存のポリシーを直接アタッチ」を選択し、「ポリシータイプ」で「ユーザーによる管理」を選択。
先ほど作成したポリシーにチェックを付け、「次のステップ: 確認」を選択。
「ユーザーの作成」をクリック。
今度はユーザーが作成さたようです。「閉じる」を選択。
ユーザーが追加されています。「ユーザー名」で追加されたユーザーをクリック。
「認証情報」タブをクリック。
「アクセスキーID」でアクセスする感じですかね?
⇧ MFAデバイスがまだ設定されていませんね。
MFA(Multi-Factor Authentication)を設定してみる
せっかくなので、MFAを設定していこうと思うのですが、Windowsの場合は、
⇧ 上記サイト様によると、「WinAuth」という仮想MFAアプリケーションを利用することで、スマホなどの実機が無くてもMFAを試すことができるようです。
https://winauth.github.io/winauth/index.html にアクセス。
ページ下部にスクロールすると、
「Downloads」の項目に「Stable and Beta Downloads」というリンクがあるのでクリック。
「WinAuth-x.x.x.zip」を選択すれ選択すれば良いかと。(今回は、「WinAuth-3.6.2.zip」を選択)
ダウンロードされたzipファイルに「WinAuth.exe」という実行ファイルが入っています。適当な場所に展開しておきます。
自分はデスクトップに適当なフォルダを作成してそこに配置しました。
AWSのユーザーの認証情報の設定
AWSの「ユーザー」で作成したユーザーを選択し、「認証情報」タブを選択し、「MFAデバイスの割り当て」の をクリック。
「MFAデバイスの管理」というウィンドウが開くので、「仮想 MFA デバイス」が選択されていることを確認し、「次のステップ」をクリック。
「次のステップ」をクリック。
「手動設定のシークレットキーを表示」をクリック。
「仮想 MFA アプリケーションによって求められたら、以下のシークレット設定キーを入力します。」と表示され、「シークレット設定キー」が表示されるので、コピーします。
ダウンロードして展開しておいた「WinAuth.exe」を実行。
「I understand and accept the conditions of this BETA version.」にチェックを入れ「OK」をクリック。
「Add」をクリック。
「Google」を選択します。
「Name:」は適当に変えても良さそうです。(自分はGoogleのままになってしまっていた。)
「1. Enter the Secret Code for your ~」のところに「シークレット設定キー」を張り付けます。その後に「Verify Authenticator」をクリック。
6桁の数字が表示されるので、一回目と
二回目の数字を、
「MFAデバイスの管理」のウィンドウの「認証コード 1」「認証コード 2」にそれぞれの6桁の数字を入力し、「仮想 MFAの有効化」をクリック。
WithAuthのほうで、「OK」をクリックすると、「Protection」という画面になるので、「Protect with my own password」にチェックを付け、「Password」「Verify」に適当なパスワードを入力します。「OK」をクリック。
これで、WinAuth.exeでワンタイムパスワードが生成できるようになったようです。
EclipseからAWSにアクセスしてみる
AWS toolkit for Eclipseのアイコンの横の▼をクリックし、「Open AWS Management Perspective」を選択。
「AWS Management」という「パースペクティブ」に切り替わります。「AWS Exploer」の「AWS Account not Configured」を選択した状態で右クリックし、「Configure AWS Accounts」を選択。
AWSへ接続するための情報を入力していくのですが、
「アクセス・キーID(A):」「秘密アクセス・キー(S):」は、AWS側のコンソールの「すべてのサービス」>「IAM」を選択し、「ユーザー」でユーザーを選んだあとに、「認証情報」タブに切り替えて、
「アクセスキー」の項目の「アクセスキー ID」で「アクセス・キーID(A):」は確認できますが、
「秘密アクセス・キー(S):」はどうやって確認するのか?
⇧ 上記サイト様によると、な、何と!アクセスキーを作成したときの一度しか確認できないらしいです...。
仕方がないので、新たに作成することにしました。
「アクセスキーの作成」をクリックすると、「成功」というポップアップが表示され、「シークレットアクセスキー」を確認できます。「.csv ファイルのダウンロード」でファイルもダウンロードできるようです。
※ただし、この場のみ。
アクセスキーは2個までしか作れないようなので、要らなくなったら削除して、新たに作成していくのがAmazonスタイルらしいです。
Eclipseのほうで、「アクセス・キーID(A):」「秘密アクセス・キー(S):」を入力し、「OK」。
で、接続されてしまうという...MFA使われずに接続されてしまって良いんですかね?
「C:¥Users¥ユーザー名¥.aws¥credetials」を変更したよってなるので、「はい」をクリック。
「Amazon Exploere」の「Amazon EC2」をダブルクリックするとビューが表示されます。「EC2 AMIs」はAWSが用意してるいろんなアプリのイメージみたいです。
Dockerでいうと、コンテナの元となるDockerイメージみたいなもんですかね?
ただ、今回は、既に作成してるEC2インスタンス(仮想マシン)をEclipseから起動させたいんですが、Eclipseから新しいインスタンスを作ってAWSにデプロイっていうような情報ばっかりで、まいっちんぐマチコ先生、ってなもんですが。
AWS Toolkit for EclipseでEC2インスタンスにssh接続のための設定
ネットをさ迷うこと3日、AWSのEC2インスタンス(仮想マシン)にssh接続する参考サイト見つけましたよ~。
⇧ 上記サイト様が説明してくれてました。
まずは、「ウィンドウ(W)」>「設定(P)」を選択。
「AWS ツールキット」>「キー・ペア」を選択し、 を選択。
「Key Pair Name:」に適当な名前を入力し、「OK」。
「キー・ペア」が追加されてます。
「Private Key Directory:」で指定した場所に秘密鍵が作成されます。(※本来、秘密鍵はセキュリティの観点から厳重に管理する必要があります。)
続いて、同じくEclipseの「ウィンドウ(W)」>「設定(P)」を選択したら、「一般」>「ネットワーク接続」>「SSH2」を選択し、「秘密鍵(R):」の項目で、「秘密鍵の追加(I)...」を選択。
先ほど、作成した秘密鍵を選択。「開く(O)」をクリック。
「秘密鍵(R):」に追加されてることを確認し、「OK」を選択。
続いて、「パースペクティブ(R)」>「パースペクティブを開く(O)」>「その他(O)...」を選択。
「リモート・システム・エクスプローラー」を選択し、「OK」。
「リモート・システム・エクスプローラー」のパースペクティブに切り替わったら、
「リモート・システム」の中の「ローカル」を選択した状態で右クリックし、「新規(A)」>「接続(A)...」を選択。
「SSHのみ」を選択し、「次へ(N)>」。(「Amazon EC2」が無かったので)
「ホスト名:」のところに、EC2インスタンスの「Elastic IP」、もしくは「パブリック DNS (IPv4) 」を指定します。
「Elastic IP」「パブリック DNS (IPv4) 」を確認するために、AWSのコンソールにログインし、「すべてのサービス」>「EC2」を選択し、
「インスタンス」をクリック。
利用したいインスタンスを選択すると、下の方にインスタンスの情報が表示されるので、「説明」タブで、「Elastic IP」もしくは、「パブリック DNS (IPv4) 」をコピーします。
再び、Eclipseに戻ってきて、「ホスト名」に「Elastic IP」もしくは、「パブリック DNS (IPv4) 」を張り付けます。「接続名:」は適当に。「説明:」は無くても大丈夫かと。「次へ(N)>」。
自分はデフォルトの状態で「次へ(N)>」を選択しました。
ここもデフォルトの状態で「完了(F)」を選択しました。
作成した「接続名」を選択した状態で右クリックし、「接続(L)」を選択。
「ユーザーID:(I)」は「ec2-user」で。パスワードを設定している場合は、「パスワード(オプション):(B)」を入力し、「OK(O)」。(パスワードを設定していない場合は、パスワードは空欄のままでOK。)
はい、エラー。接続できず。
EC2インスタンスを起動します。
起動中...
起動しました。
再度、Eclipseの「リモート・システム」接続で、「警告」が出ますが、「はい(Y)」。
エラー。
「
SSH を使用した EC2 Linux インスタンスへの接続の問題に関するトラブルシューティングはどのように行えばいいですか?
」
SSH を使用して、現在の IP アドレスから EC2 インスタンスにアクセスできないことを示しています。
デフォルトでは EC2 インスタンスへのネットワーク接続は有効化されていません。AWS マネジメントコンソールにて、VPC 内の設定変更を行う必要があります。
SSH を使用して EC2 Linux インスタンスへ接続するには、まず IP アドレスからの SSH 経由での EC2 インスタンスへのアクセスに対するセキュリティグループ許可を確認してください。
⇧ むっちゃ面倒くさい...セキュリティを堅牢にしたいのは分かりますが、何とかならんもんですかね。
とりあえず、設定してみる。AWSのコンソールにログインしたら、「すべてのサービス」>「コンピューティング 」>「EC2」を選択し、「インスタンス」を選択後、利用したいインスタンスを選択。「説明」タブの「セキュリティグループ」をクリック。
「インバウンド」タブを選択し、「編集」をクリック。
(「セキュリティグループ」がない場合は「セキュリティグループの作成」で作成。)
「ルールの追加」で、「タイプ」を「SSH」、「ソース」を「マイ IP」にして「保存」をクリック。
続いて、『ルートテーブルがインターネットからの送受信を許可するように設定されていることを確認』。
「すべてのサービス」>「ネットワーキング & コンテンツ配信 」>「VPC」を選択するんですが、検索で「VPC」としてもいけるようです。
「ルートテーブル」を選択。
ルートテーブルを選択すると、
下の方に情報が表示されるので、「ルート」タブを選択。「ターゲット」の『igw-xxxxxx』ってのが『インターネットゲートウェイ (IGW) に向けたデフォルトルート』ってことだと思われます。
サイドバーで「インターネットゲートウェイ」を選択し、『インタネットゲートウェイ』の「ID」が、上記の「ターゲット」と合っているのが確認できれば大丈夫かと。
で、再び、Eclipseの「リモート・システム」から接続を試みるも認証エラー。
秘密キー (.pem) ファイルが PuTTY によって認識される形式 (.ppk) に変換されていることを確認します。プライベートキーの変換の詳細については、「PuTTY を使用した Windows から Linux インスタンスへの接続」を参照してください。
注記
PuTTYgen でプライベートキーファイルをロードし、[Generate] ではなく [Save Private Key] を選択します。
何てこった...変換しとらんかった....そりゃ接続できんですね。
PuTTY は、Amazon EC2 によって生成されるプライベートキー形式 (.pem) をネイティブにサポートしていません。PuTTY には、キーを必要な PuTTY 形式 (.ppk) に変換できる PuTTYgen と呼ばれるツールが含まれています。PuTTY を使用してインスタンスへの接続を試みる前に、秘密キーをこの形式 (.ppk) に変換する必要があります。
PuTTY を使用した Windows から Linux インスタンスへの接続 - Amazon Elastic Compute Cloud
というわけで、Eclipseで作成した「キーペア」 の「秘密鍵」を「.ppk」形式に変換していきます。「Puttygen」を起動します。(PuTTYがインストールされていれば、Puttygenも一緒に付いてくるようです。)
「Parameters」で「SSH-2 RSA」を選択。(新しいバージョンのPUTTYを使っている場合は、「RSA」を選択。)
「Actions」で「Load」を選択。
今回は、Eclipseの「キーペア」で作成した「秘密鍵」を選択します。
「OK」をクリック。
「Save private key」をクリック。
「key passphrase」などを入力していないため、警告が出ますが「はい(Y)」をクリック。
「ファイル名(N):」を「キーペア」で作成した秘密鍵と同じ名前にして、「保存(S)」をクリック。
次に、「公開鍵」を作成。「Save public key」を選択。
「ファイル名(N):」は何でも良いみたいです。「保存(S)」をクリック。
をクリックでPuttygenを終了。
「.ppk」形式の秘密鍵と、公開鍵が作成されています。
Eclipseで、「ウィンドウ(W)」>「設定(P)」を選択。
「一般」>「ネットワーク」>「SSH2」の「一般(G)」タブで、「秘密鍵(R):」で前に追加したpem形式のファイルのパスを消して、「秘密鍵の追加(I)...」を選択。
「.ppk」形式の秘密鍵を選択。「開く(O)」をクリック。
「OK」をクリック。
で、またAWS側で作業と。
⇧ キーペアをインポートするのと、EC2にログインして、パブリックキー(公開鍵のこと)を「.ssh/authorized_keys」に追記するらしい。
「キーペア」で「キーペアの作成」をクリック。
Puttygenで作成した公開鍵を選択。
「インポート」をクリック。
キーペアが追加されました。
EC2インスタンスにsshログインし、「.ssh/authorized_keys」に公開鍵の内容を追記すれば良いようです。
sshが利用できるクライアントソフト(WindowsだとTera Termなどが有名?)などで、
ホスト名 | EC2インスタンスの「Elastic IP」もしくは、「パブリック DNS (IPv4) 」 |
---|---|
ユーザー名 | ec2-user |
EC2インスタンスに接続し、viエディターで「.ssh/authorized_keys」に公開鍵の内容を追記します。
sudo vi .ssh/authorized_keys
追記前の状態
追記後の状態
という感じで、追記したあとに、作成したキーペアの秘密鍵と公開鍵で再度接続を試みるも接続できない。
ログインしているEC2インスタンスの中に、「/var/log/secure」ファイルがあってログイン時などのログを残してくれているらしい。
sudo vi /var/log/secure
Feb 12 19:45:33 ip-172-31-28-245 sshd[2634]: error: buffer_get_ret: trying to get more bytes 257 than in buffer 26 Feb 12 19:45:33 ip-172-31-28-245 sshd[2634]: error: buffer_get_string_ret: buffer_get failed Feb 12 19:45:33 ip-172-31-28-245 sshd[2634]: error: buffer_get_bignum2_ret: invalid bignum Feb 12 19:45:33 ip-172-31-28-245 sshd[2634]: error: key_from_blob: can't read rsa key Feb 12 19:45:33 ip-172-31-28-245 sshd[2634]: error: key_read: key_from_blob AAAAB3NzaC1yc2EAAAADAQABAAABAQCwvXugF0oYClKVs4vQUVeiGk9EUwMxx4KZ\n failed Feb 12 19:45:33 ip-172-31-28-245 sshd[2634]: error: Received disconnect from 39.111.245.70: 14: No supported authentication methods available [preauth]
⇧ 上記サイト様によりますと、改行コードの問題らしいですね。
⇧ 改行コードを削除して1行にした状態で、行の先頭に「ssh-rsa」、行の末尾に「キーペア」の名前をつけ足して、AWSのEC2インスタンス側にsshログインし、「.ssh/authorized_keys」に追記すればOK。
再度、接続でようやく接続できました。「リモート・システム」のところで、EC2インスタンスのディレクトリ構成が表示されてます。
今回もハマりにハマってしまいましたが、なんとかEclipseからAWSのEC2インスタンスにssh接続できたということで。
MFAとか IAM ユーザーとか全然活用できてないですが、今回はこのへんで。