yuuki blog

プログラミング をアプトプットしています。

AWS (登録方法)

 AWSとは

AWSとは「Amazon Web Servises」の略で、通販で有名な米Amazonが提供しているサーバーに関するサービスの総称です。

 

 Amazon S3

Amazon S3」とはAWSの中のサービスの1つで、「Amazon Simple Storage Service」の略称です。
ネット上にデータを保存する箱を借りられるようなイメージで、ここに画像などを保存したり、保存してある画像を取得したりすることができます。

これまで画像を保存する際はActiveStorageを用いてアプリケーションのディレクトリに保存してきましたが、これから行う作業により、画像はAmazon S3へ保存されることになります。

この「Amazon S3」を使うことで、データ容量を気にすることなく画像を保存することができます。S3に保存できるデータの量は膨大で、個人で作成するアプリで使われるレベルの量なら完全に無料で利用できます。

 

 

無料使用期間について


AWSは、アカウント作成から12ヶ月間、様々なサービスを無料で利用できます。その中には、本章で取り扱うS3も含まれています。
しかし、12ヶ月の無料期間を過ぎた後からは、使用量に応じて料金が発生するため注意が必要です。
そのため、AWSを用いる必要性が無くなったアプリケーションは、インスタンスの停止やElasticIPの開放、S3バケットの削除を行い、不要な料金が発生しない様に気をつけましょう。

サービス名 無料枠
Amazon EC2 750時間/月 (t2.microインスタンスの使用もこれに含む)まで
Amazon S3 5GBの標準ストレージ、20,000件のGETリクエスト、2,000件のPUTリクエス
Elastic IPアドレス 実行中のインスタンスに関連づけられたElastic IPアドレスを1つだけ

 

以下の場合は課金対象となります。

サービス名 料金が発生する場合
Elastic IPアドレス インスタンスに紐付いていないElastic IPアドレスがある
IAM IAMユーザーの一時的なセキュリティ認証情報を使用して、他のAWSサービスにアクセスする

 

AWSアカウントの作成方法

 

AWSのサイトにアクセスしましょう

まず【こちら】をクリックして、AWSのサイトにアクセスします。

サインアップボタンを押しましょう

トップページに遷移すると、右上に「無料サインアップ」と書かれたボタンがありますので、クリックします。

https://tech-master.s3.amazonaws.com/uploads/curriculums//b178704f64e62248f030f66876438bb3.png

アカウント情報を登録

サインアップボタンをクリックすると以下のようなページに遷移するので、「メールアドレス」「パスワード」「AWSアカウント名」を入力して"続行"をクリックしてください。

EmailとPassword入力

画面遷移後、セキュリティチェックがあるので、画面指示に従って進めます。

https://tech-master.s3.amazonaws.com/uploads/curriculums//e66236e51c7d16dd68ebbe543ea144b2.png

次に連絡先情報を登録します。
以下の画像のような連絡先情報を入力するページに遷移するので、各項目の入力とアグリーメントをチェックして、"アカウントを作成して続行"をクリックしましょう。入力は全て半角英数字で入力します。

 アカウントの種類は「パーソナル」を選択してください。
 ご自分の住所を入力します。

https://tech-master.s3.amazonaws.com/uploads/curriculums//627324648cd64b42c0c0b0cadaecc1b7.png

次に支払情報を登録します。
以下のような支払情報を入力するページに遷移するので、各項目に入力し、"検証して追加する"をクリックします。

https://tech-master.s3.amazonaws.com/uploads/curriculums//4473a0c4732bfa1c59dada4bf1caa548.png

次に本人確認をしす。
以下のような本人確認をするページに遷移するので、①〜④まで入力します。なお、検証コードをどのように受け取りますか?の欄は「テキストメッセージ(SMS)」をチェックしましょう。入力し終えたら"お問い合わせください"をクリックしてください。

https://tech-master.s3.amazonaws.com/uploads/curriculums//e9ca926c770baa0fdabe26eb021ffe8f.png

画面遷移後、しばらくするとショートメールが届くので、画面に表示されるPIN番号を入力します。本人確認が完了したら次へ進みます。

https://tech-master.s3.amazonaws.com/uploads/curriculums//d99329e45121dcedca4f81c95eb2845d.png

成功すれば下記のような画面に遷移します。

https://tech-master.s3.amazonaws.com/uploads/curriculums//9f30e7f5b72775c60b2f9f5919818fc2.png

次にサポートプランを選択します。
以下の画像のようなサポートプランを選択するページに遷移するので、ベーシックプランを選択して、次へ進みましょう。

https://tech-master.s3.amazonaws.com/uploads/curriculums//9730de2e1711a4edd91afb4faaad81e5.png

これでアカウントが作成されました!数分後に、登録したメールアドレスに確認メールが来るので、確認します(認証等はありません)。

 作成したアカウントでサインインします

「コンソールにサインイン」をクリックすると、アカウント情報を登録する最初の画面に戻ってきます。今回は、先ほど登録したメールアドレスとパスワードを入力して、サインインします。

https://tech-master.s3.amazonaws.com/uploads/curriculums//7952ef6491fb82fb8eebb0cb518a662e.png

以下の画像のような画面が表示されたら、正しくサインインができています。

https://tech-master.s3.amazonaws.com/uploads/curriculums//85d8961050682b93eea93ba15cd42831.png

AWS上のセキュリティ対策

まず最初に、セキュリティ対策を行います。これは、パスワードが漏れるなどといった事態によりアカウントが不正に利用され、高額な利用料を請求されるといったことを防ぐためです。
例えば悪意を持ったユーザーにAWSのIDとパスワードが漏れてしまったとします。
そうすると、AWSの中には従量課金制のサービスもあるため、他人がなりすましログインして膨大な処理を行うと、それに対する支払いが発生してしまいます。
このような状況を防ぐためにもしっかりとセキュリティ対策を行います。

https://tech-master.s3.amazonaws.com/uploads/curriculums//ce57ea84a7b977a276f790e14a210f0b.png

今回は以下の3つの設定を行います。

  • 二段階認証の設定
  • IAMユーザーの作成
  • git-secretsの利用

それでは順に進めていきましょう。

二段階認証を設定

二段階認証は、あるサービスにログインする際に「通常パスワード」に加えて「別の方法でも認証されないとログインできないようにする」仕組みです。
万が一パスワードが漏れたとしても、それだけでは乗っ取られないため安全性を高めることができます。

今回は以下の2つの場合に二段階認証がされるように設定します。

  • AWSへのルートユーザーでのログイン時
  • AWSへのIAMユーザーでのログイン時
このIAMユーザーについては、次に確認します。

二段階認証のために、Authyというアプリケーションを利用します。スマートフォン(iOS/Android)でもPCでも使うことができます。

Authyを起動するとパスワードが表示されるので、二段階認証の際にそれを入力します。パスワードは一定時間ごとに自動で変更されるため、漏洩のリスクが低くなります。

Authyをインストール

まずは「Authy」を自分のスマホにインストールします。自分が利用するスマホの種別に応じたものを導入します

次に初期設定をしましょう。
初めてアプリを起動すると「電話番号」と「メールアドレス」を聞かれるので登録します。
なお電話番号ですが、ここで登録した番号にSMSで確認コードが来ますので、自分のスマホの電話番号を登録します。

  • codeは+81 (Japan)
  • 最初の0を抜いた自分のスマホの電話番号

登録後に「GET ACCOUNT VERIFICATION VIA」のメッセージが表示されるので、確認コード送付方法として「SMS」を選択しましょう。

届いた確認コードをAuthyに入力したら、初期設定が完了です。スマートフォンのOSによっては確認コードが自動入力されてアプリのトップ画面に遷移します。

次にAWSで二段階認証を行うための設定を行います。
ヘッダー部分に表示されているアカウント名をクリックして、メニューの中から 「マイセキュリティ資格情報」 を選択します。

https://tech-master.s3.amazonaws.com/uploads/curriculums//922d044d022cf0fb6faf55ad78b70a3f.png

モーダル画面が表示されたら 「Continue to Security Credentials」 をクリックします。

何も表示されずに次の画面に遷移することもあります。

https://tech-master.s3.amazonaws.com/uploads/curriculums//9e440df08e49c03baf9103e62d0b1ddb.png

メニューの中の 「多要素認証(MFA)」 をクリックすると内容が展開されますので、「MFAの有効化」 をクリックしましょう。

https://tech-master.s3.amazonaws.com/uploads/curriculums//104f6e5d836c4839cba9237bdddf3eca.png

モーダル画面の中から「仮想MFAデバイス」が選択されているのを確認して、続行をクリックします。

https://tech-master.s3.amazonaws.com/uploads/curriculums//7e6fbd2e078c0bebe160fd4b74c7a71b.png

次の画面で「QRコードの表示」をクリックすると、QRコードが表示されます。

https://tech-master.s3.amazonaws.com/uploads/curriculums//2bd0e9ca5824183320d09fb4ae6ffeb9.png

ここまで終えたら、スマートフォンでAuthyを開きましょう。

ここからはAuthyにAWSアカウントを追加していきます。
Authyを開いたら、下記画像に従って操作してください。

https://tech-master.s3.amazonaws.com/uploads/curriculums//0d519c7a6a844a151cf235ddd09a5861.png

カメラが起動しますので、先ほどのQRコードを読み取りましょう。

設定画面を終了すると、二段階認証用のパスワードが表示されるようになります。
ワンタイムパスワードと呼ばれるもので、30秒経つと自動的にそのパスワードは無効になります。

このパスワードをAWSで入力します。

https://tech-master.s3.amazonaws.com/uploads/curriculums//e4f74d220f671a5a99a346365200ae1d.png

1つ目のパスワードを上の欄に、その次に表示されたパスワードを下の欄に入力します。
最後に「MFAの割り当て」をクリックして設定は完了です。
AWSのログイン時に追加でパスワードを求められるようになりますので、Authyで表示されたパスワードを入力しましょう。

IAMユーザーを作成

IAMユーザーとは、AWSのサービスの1つです。
最初にAWSで作ったアカウントはルートユーザーと呼ばれ、ルートユーザーでAWSにログインするとAWS内の全ての機能を使うことができてしまいます。
そのため、万が一ルートユーザーのID・パスワードが漏洩し悪用されると、第三者が全ての機能を使えてしまいます。

https://tech-master.s3.amazonaws.com/uploads/curriculums//8927be02e88f68c19cea0b29bd11bd5d.png

このような状況を防ぐために、使えるサービスを制限したユーザーを作成し、通常の作業はそのユーザーでログインし行うようにします。

この機能を制限したユーザーを作成できる機能が「IAM」です。
それでは実際に「IAMユーザー」を作成しましょう。

IAMユーザーを作成

ログイン後の以下のページの検索のフォームに「IAM」と打ち込み、出てきた検索結果からIAMのページに飛んでください。

https://tech-master.s3.amazonaws.com/uploads/curriculums//decc150c8e71774416fbc617619072ff.png

遷移先のページで、以下をクリックします。

https://tech-master.s3.amazonaws.com/uploads/curriculums//952308e6a91e63e1ecbcfbb91157ea3d.png

左上の「ユーザーを追加」を選択してください。

https://tech-master.s3.amazonaws.com/uploads/curriculums//cc09e386d0acce905ccad157b2c0ec36.png

ここでは作成するユーザーの名前を登録します。

https://tech-master.s3.amazonaws.com/uploads/curriculums//b0760d72ba36ec167611e69acfbb4969.png

記入したら、「次のステップ:アクセス権限」をクリックしましょう。

「既存のポリシーを直接アタッチ」から「AmazonS3FullAccess」に設定してください。

チェックを入れたら「次のステップ タグ」と書かれたボタンをクリックします。

https://tech-master.s3.amazonaws.com/uploads/curriculums//4fe4da99773676f4e0d26017c5ef1b5e.png

次は何もせずに、「次のステップ: 確認」を押してください。

https://tech-master.s3.amazonaws.com/uploads/curriculums//c76b55e264ff756cc24970fbb18b8517.png

最後に設定の確認をして、画像と同じ設定になっていればOKです。「ユーザーの作成」をクリックしてください。

https://tech-master.s3.amazonaws.com/uploads/curriculums//cb0be430a3a6b440335bb2db692c2f83.png

これで「IAMユーザー」の作成が完了しました。

最後に、忘れずに認証情報をダウンロードしておきましょう!

https://tech-master.s3.amazonaws.com/uploads/curriculums//eb54fd5a6ebfd797065180b491f3b67b.png

続いて、「IAMユーザーのパスワード」を設定します。

IAMユーザーのパスワードを設定

IAMのメニューから作成したIAMユーザーをクリックします。「認証情報」のタブをクリックすると以下のページに遷移するので コンソールのパスワード欄の「管理」 をクリックします。

https://tech-master.s3.amazonaws.com/uploads/curriculums//ad8b5888567834eb321863f966321016.png

そのまま下の画像のように「有効化」「自動生成パスワード」をクリックします。

https://tech-master.s3.amazonaws.com/uploads/curriculums//fdf0f8846f359a34c16deb06bce029e4.png

ルートユーザーの時と同じく、認証情報はダウンロードしておきましょう(ここではcsvファイルとしてダウンロードできます)。

https://tech-master.s3.amazonaws.com/uploads/curriculums//4a1f66eebc53f8cf282d64b59a78e860.png

作成したIAMユーザーでログイン

それでは今作成したIAMユーザーでログインできることを確認してみましょう。
まずルートアカウントのサインアウトを行います。

https://tech-master.s3.amazonaws.com/uploads/curriculums//6ffcdfbc294d6e8afe5ad6f38267ee45.png

続いて、先ほどダウンロードしたcredentialの情報を使ってログインします。

https://tech-master.s3.amazonaws.com/uploads/curriculums//eae149b54ab0ac8d89d6342265ea6a87.png

上記画像の①をクリックすると、以下のようなログイン画面に遷移します。②のユーザー名とパスワードを入力してサインインしましょう。

https://tech-master.s3.amazonaws.com/uploads/curriculums//30e7176de913e5891922580dd2e6d4f6.png

正常にログインできれば成功です!

ルートユーザーで再度サインイン

IAMユーザーでログインできることが確認できたら一度ログアウトし、改めてルートユーザーでログインしなおします。
サインインアウト→コンソールにサインインを選択すると以下のような画面に遷移します。「ルートユーザーのEメールを使用したサインイン」を選択しましょう。

https://tech-master.s3.amazonaws.com/uploads/curriculums//2592504b8a5e27d0aa8e91746b455cb2.png

以下の画面からサインインします。

二段階認証になっていることに注意してください。

https://tech-master.s3.amazonaws.com/uploads/curriculums//8511a3c4dc4bcce4a05ad06bc1c52bab.png

IAMユーザーも二段階認証

続いて、再びIAMのユーザー選択画面から先ほど作成したユーザー名を選択し遷移したページ先で、以下の「MFAデバイスの割当」をクリックします。

https://tech-master.s3.amazonaws.com/uploads/curriculums//65e3da37fa1a84e61c70e051a656c228.png

あとは ルートユーザーの時と同じ手順で二段階認証の設定をします。

git-secretsを利用

今みなさんはGitHubのpublicリポジトリソースコードをアップロードしています。
そのため、誤操作でパスワードをGitHubにpushしてしまうと誰でも見られる状態になってしまいます。「git-secrets」は、そのような誤操作を防いでくれるツールです。

git-secrets

pushしようとしたコードをチェックし、パスワードだと推定されるような文字列が含まれている場合はそこで処理が中断される仕組みとなっています。

それでは実際に設定していきましょう。

git-secretsをインストール

ターミナルから、Homebrewを経由してgit-secretsを導入します。

ターミナル
1
2
% cd ~/
% brew install git-secrets

git-secretsが導入できたら、設定を適用したいリポジトリに移動して、git-secretsを有効化します。

ターミナル
1
2
% cd アプリケーション名 #開発中のアプリケーションディレクトリに移動
% git secrets --install

これで、有効化を行なったリポジトリでgit-secretsを使用する準備ができました。

続いて、「どのようなコードのコミットを防ぐのか」を設定していきましょう。この後の作業は開発中アプリケーションのディレクトリで実行していきます。

 git-secretsの条件を設定

下記のコマンドを実行することで、secret_key, access_keyなど、アップロードしたくないAWS関連の秘密情報を一括で設定することができます。

ターミナル
1
% git secrets --register-aws --global

現在のgit-secretsの設定は、下記のコマンドで確認することができます。

ターミナル
1
2
3
4
5
6
7
8
% git secrets --list

secrets.providers git secrets --aws-provider
secrets.patterns [A-Z0-9]{20}
secrets.patterns ("|')?(AWS|aws|Aws)?_?(SECRET|secret|Secret)?_?(ACCESS|access|Access)?_?(KEY|key|Key)("|')?\s*(:|=>|=)\s*("|')?[A-Za-z0-9/\+=]{40}("|')?
secrets.patterns ("|')?(AWS|aws|Aws)?_?(ACCOUNT|account|Account)_?(ID|id|Id)?("|')?\s*(:|=>|=)\s*("|')?[0-9]{4}\-?[0-9]{4}\-?[0-9]{4}("|')?
secrets.allowed AKIAIOSFODNN7EXAMPLE
secrets.allowed wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY

これで、「git secrets --install」を行なったリポジトリでは、コミット時にAWSの秘密情報を含んだコードがないかチェックされるようになりました。

「うっかりパスワードをGitHubに載せてしまった」という事態を防ぐことができるので、必ず設定を行うようにしましょう。

 今後作成する全てのリポジトリにgit-secretsが適用されるようにしましょう

ここまでの設定では、今後作成するリポジトリにはgit-secretsが適用されません。
特段の理由がなければ、以下のコマンドを実行して自動で適用されるようにしましょう。

ターミナル(開発中のアプリで実行)
1
2
% git secrets --install ~/.git-templates/git-secrets
% git config --global init.templatedir '~/.git-templates/git-secrets'

 GitHub Desktopからgit-secretsを利用できるようにしましょう

GitHub Desktop経由でgit secretsを利用する場合は、追加の設定をします。
この時、Github Desktopがapplicationフォルダに存在している必要があります。

適宜移動しておきましょう。

https://tech-master.s3.amazonaws.com/uploads/curriculums//14f3e6af77ec58b528f765b8c332c0db.png

GitHub Desktopを利用するため、以下を実行しましょう。

ターミナル
1
% sudo cp /usr/local/bin/git-secrets /Applications/GitHub\ Desktop.app/Contents/Resources/app/git/bin/git-secrets

https://tech-master.s3.amazonaws.com/uploads/curriculums//c2a58d26e2a468420775aaa8284c1a90.gif

sudoコマンドはパスワードの入力が必要です。入力の際は、とくに画面には何も表示されません。しかし、入力自体は認識されています。
上記コマンドで「No such file or directory」のエラーがでる場合は以下のコマンドを実行しましょう。

GitHub Desktopのバージョンが古い場合、上記のコマンドではなく、以下のコマンドでないと設定ができないことがあるためです。

ターミナル
1
% sudo cp /usr/local/bin/git-secrets /Applications/GitHub\ Desktop.app/Contents/Resources/git/bin/git-secrets

ここまでで、事前に行うセキュリティ対策の作業は終了です