name: exercises-unix class: title, smokescreen, shelf, no-footer # 第06回 Unix演習<br><small>EC2のフィルタを調べる</small> <div class=footnote> <small><small> </small></small> </div> --- class: compact,img-right # 全体像(講義スライドより図を再掲) ![height480px](/slides/service/aws/academy/images/aws-security-overview.png) - <B>これから(2)の部分(= Unixのネットワークフィルタがかかっていないこと)</B>を確認します --- class: compact # 例題:<small>iptablesでEC2にはフィルタが何もないことを確認する</small> <small> - iptablesコマンドはフィルタの管理コマンド - `iptables -L`は全フィルタルールを表示する(-LのLはlistの意味) ``` $ sudo iptables -L Chain INPUT (policy ACCEPT) target prot opt source destination Chain FORWARD (policy ACCEPT) target prot opt source destination Chain OUTPUT (policy ACCEPT) target prot opt source destination ``` - `(policy ACCEPT)`はデフォルトの挙動を意味しています - どの条件でも「ACCEPT(許可)」なので、あらゆる通信が通り抜けてしまう状態 - ルールが何もありません。なのでデフォルトのACCEPTとなります - 注: `Chain ...`行と`target ...`行はルール表示のヘッダ(ガイドライン)の部分で、 ルールではありません </small> --- class: compact # [参考]<small>自分で運用するサーバではACCEPT/REJECTがある</small> <small> ``` Chain INPUT (policy ACCEPT) target prot opt source destination ACCEPT all -- anywhere anywhere state RELATED,ESTABLISHED ACCEPT tcp -- anywhere anywhere state NEW tcp dpt:ssh ACCEPT udp -- anywhere anywhere udp dpt:domain ACCEPT tcp -- anywhere anywhere tcp dpt:http REJECT all -- anywhere anywhere reject-with icmp-port-unreachable Chain FORWARD (policy DROP) target prot opt source destination ACCEPT all -- anywhere anywhere ctstate RELATED,ESTABLISHED ACCEPT all -- anywhere anywhere REJECT all -- anywhere anywhere reject-with icmp-port-unreachable Chain OUTPUT (policy ACCEPT) target prot opt source destination ACCEPT all -- anywhere anywhere ``` </small> --- class: compact, img-right # ではAWSでは誰が防御しているのか?(復習) ![height240px](/slides/service/aws/academy/images/aws-security-overview.png) ![height240px](/slides/service/aws/academy/images/aws-acl-overview.png) - 答えは「AWS側でやっています」 1. ネットワークフィルタ <small> - パケットのヘッダを見て判断 - AWS側でフィルタをかけます(1) - <B>EC2に対するsecurity group</B> - デフォルトは何も通さない - 通したいプロトコルを明示的に許可 - 実はOSそのものは無防備(2) </small> 1. もうひとつ全然違う仕組みのIAM <small> - ユーザ権限などによる判断 - <B>このあとやります</B> </small> --- name: exercises-aws class: title, smokescreen, shelf, no-footer # 第06回 AWS演習<br><small>IAMロールとS3初期化</small> <div class=footnote> <small><small> </small></small> </div> --- class: compact # 課題(必須): IAMの役割を体感する(体感するだけ) <div class=footnote> <small><small> (脚注) EC2提供のOSイメージにはAWS管理コマンドaws(/usr/bin/aws)が入っています <br> 注: 逆に言えば、自分でインストールするイメージに、このコマンドは入っていません </small></small> </div> - 今回は「IAMの役割を体感」します - 今回はawsコマンドを使い、以下の挙動を確かめてもらいます 1. IAMロールなしでS3にアクセスする -> 失敗! 1. IAMロールをEC2に追加 1. IAMロールをEC2に追加するとS3にアクセスできるようになる -> 成功! --- class: compact,img-right # EC2に権限を与えるには?(講義スライドの復習) <div class=footnote> <small><small> (脚注) security groupで守るサービスもあるが、 いまどきは作成時にsecurity groupが自動設定されるので気にしなくても大丈夫みたい </small></small> </div> ![](/slides/service/aws/academy/images/aws-security-overview.png) <small> - (講義スライドで解説したように) - AWSのアクセス制御は2系統ある - これからIAMによる許可を体験する - 今回の課題は「<B>ユーザではなく</B>EC2<B>サービスに他のAWSサービスの利用許可</B>を出したい」です - この場合、IAMではなく<B>IAMロール(IAM role)</B>の設定となることに注意(図中の(4)) </small> <!-- section-begin aws.s3.create.bucket --> --- class: title, smokescreen, shelf, no-footer # AWS S3バケットの作成 <div class=footnote> <small><small> </small></small> </div> --- class: compact # AWS S3とは? - Google Driveみたいなもの - 一般には、Google DriveやAWS S3のことをオブジェクトストレージと呼んでいます - 第9回の講義で少し話します - 用語が違うので、ここは覚えること - バケット(Bucket) ... Google Driveの一番上の階層のフォルダみたいなもの - オブジェクト(Object) ... Google Driveの各ファイルのこと --- class: compact,img-right # S3バケットの作成(1) ![](/slides/service/aws/academy/images/aws-s3-console-01.png) - AWS consoleでS3を探してクリック - <B>画面右下のオレンジの「バケットを作成」</B>をクリック(右図) --- class: compact,img-right # S3バケットの作成(2) ![](/slides/service/aws/academy/images/aws-s3-console-new-bucket.png) - 「バケットを作成」画面(右図)で - <B>バケット名</B>をつけます - バケット名は<B>学籍番号</B>にします - それ以外の設定はデフォルトのまま - (縦長の画面なので、だいぶ下にスクロールして) 画面右下のオレンジの「バケットを作成」をクリック(右図) - 最初の画面(前頁の図)に戻るので、 下の方に作成したバケット名があることを確認してください --- class: compact # 【動作確認】awsコマンドでS3が使えないことを確認 - EC2の上でawsコマンドを利用します - `aws s3 ls`で、バケットの一覧を表示してみましょう - EC2に権限が無い(IAMロールがない)ので、次のエラーメッセージが表示されます ``` $ aws s3 ls Unable to locate credentials. You can configure credentials by running "aws configure". ``` - 注: これが<B>正しい挙動</B>です <!-- section-end aws.s3.create.bucket --> <!-- section-begin aws.ec2.add.iam-role --> --- class: title, smokescreen, shelf, no-footer # EC2にIAMロールを追加 <div class=footnote> <small><small> </small></small> </div> <div class=iam-role-begin></div> --- class: compact # EC2にIAMロールを追加 ![height240px](/slides/service/aws/academy/images/aws-ec2-instance-01.png) ![height240px](/slides/service/aws/academy/images/aws-ec2-instance-02.png) ![height240px](/slides/service/aws/academy/images/aws-ec2-instance-03.png) <small> 1. EC2の管理画面でEC2を選択してクリック 1. 「インスタンス概要」画面(上図(左))を出します 1. 右上の「アクション -> セキュリティ -> IAMロールを変更」をクリック(上図(中)) 1. 「IAMロールを変更」画面の選択肢(上図(右))から<B>LabInstanceProfile</B>を選び、 <br> 右下の「IAMロールの更新」をクリック 1. 「インスタンス概要」(上図(左))で、IAMロールが<B>LabRole</B>と設定されたことを確認します - 失敗していたら、もういちど最初からやりなおしてみてください </small> <div class=iam-role-end></div> <!-- section-end aws.ec2.add.iam-role --> <!-- section-begin aws.ec2.check.if.cli-aws.can.s3.ls --> --- class: title, smokescreen, shelf, no-footer # EC2からAWS S3を使う <div class=footnote> <small><small> </small></small> </div> --- class: compact # 【動作確認】awsコマンドでS3が使えることを確認 - EC2の上でawsコマンドを利用 <small> ``` $ aws s3 ls ``` - さきほど作成したバケット名(学籍番号)が表示されます。これが正しい挙動です - IAMの設定に失敗していると次のようなエラーメッセージが表示されます。 インスタンス概要を確認し、 必要ならIAMロールの設定をしなおしてください ``` $ aws s3 ls Unable to locate credentials. You can configure credentials by running "aws configure". ``` </small> <!-- section-end aws.ec2.check.if.cli-aws.can.s3.ls -->