Closed98

awsざっくりキャッチアップ 1

ハガユウキハガユウキ

クラウドは、提供するサービスのレベルによって様々な形態がある(Iaas, Paas, SaaS)
Vercelとかは、PaaSに分類される

ハガユウキハガユウキ

AWSは当初IaaS(サーバーの時間貸し)をしていたが、サーバーレスやAI機能のサービスなどもリリースされているので、AWSは、IaaSの枠を超えたクラウド形態に成長している。

ハガユウキハガユウキ

AWSの「サービス」(AWSサービス)とは、AWSが提供している様々な機能のこと。
(例、EC2やS3といったサービス)

AWSの「リソース」とは、AWSサービスを使って作成されたもののことである。

ハガユウキハガユウキ

awsサービスを利用するとき、awsアカウントを作成する必要がある。
そして、awsアカウントは、awsのリソースを管理するために使われる。
awsアカウント同士で、awsのリソースを共有したりできないので注意。
(awsアカウントごとに独立した環境がある)

ハガユウキハガユウキ

ルートユーザーが乗っ取られると、不正利用されて、多額の請求されたりするのでめんどい

ハガユウキハガユウキ

awsアカウントを作成すると自動的にユーザーも作成されて、このユーザーをルートユーザーと呼ぶ。
強力な権限を持っているので、このアカウントの中に必要な権限のみに制限したユーザーを作成して、このユーザーでリソースの作成とかを行う。

ハガユウキハガユウキ

ユーザーごとにawsアカウント持てば良くないかと思ったけど、
awsアカウント単位で利用料が計算されたり、awsサポートはアカウント単位で契約したり、アカウントごとにリソースの環境が独立してたりするから、それらが面倒で1アカウントでやった方が良いのか。

ハガユウキハガユウキ

開発、検証、本番で環境を分けたい時とかは、awsアカウント分けても良さそう

ハガユウキハガユウキ

リージョンとは、世界中の地理的にはなれた領域のこと
リージョン内にデーターセンターがある

ハガユウキハガユウキ

リージョンの中にアベイラビリティゾーンと呼ばれる、物理的に離れたデータセンター群がある。
リージョン内に複数のアベイラビリティゾーンがある。

ハガユウキハガユウキ

AWS Identity and Access Management (IAM) は、AWS リソースへのアクセスを安全に管理するためのウェブサービスです
IAM を使用して、誰を認証 (サインイン) し、誰にリソースの使用を認可する (アクセス許可を付与する) かを制御します

IAMは、awsリソースへのアクセスを安全に管理するためのサービス。
IAMを使用することで、誰を認証して、誰にリソースの使用を許可するかを設定できる
https://docs.aws.amazon.com/ja_jp/IAM/latest/UserGuide/introduction.html

ハガユウキハガユウキ

AWS アカウント ルートユーザーと呼ばれ、アカウントの作成に使用した E メールアドレスとパスワードでサインインすることによってアクセスできます

ルートユーザーとしてログインするには、、AWSアカウントの作成に使用したEmailとパスワードでサインインすれば良い。

ハガユウキハガユウキ

IAMが付与するIDと、ユーザーにしか用意できない情報(Password)をセットでログイン情報として入力する

ハガユウキハガユウキ

ユーザーごとに認可を設定するのはめんどい。
なので、グループを使った認可の設定がある。

ハガユウキハガユウキ

グループに認可を設定すれば、そのグループに所属する人はその認可になるから、ユーザーが増えても、そのグループに所属させたり、認可の条件が変更したりしても、変更が楽なのか

ハガユウキハガユウキ

IAMのセキュリティベストプラクティス
https://docs.aws.amazon.com/ja_jp/IAM/latest/UserGuide/best-practices.html

  • ルートユーザーのアクセスキーを削除
  • ルートユーザーのMFAを有効化
  • 個々のIAMユーザーの作成
  • グループを使用したアクセス許可の割り当て
  • IAMパスワードポリシーの適用
ハガユウキハガユウキ

デフォルトだとルートユーザーにはアクセスキーは作成されない。
ルートユーザーのアクセスキーが漏れるとめんどいから、そもそもルートユーザーのアクセスキーをプログラム上で使わない方が良い。

ハガユウキハガユウキ

初期設定だと、ルートユーザーはメアドとpassでログインできる
権限強いのに、安全な認証方法と言えないので、ルートユーザーのログインに関しては、MFAを導入した方が良い。

ハガユウキハガユウキ

ルートユーザーは権限が強すぎるから、通常の開発では一般ユーザー(IAMユーザー)を作成した方が良い

ハガユウキハガユウキ

IAMでユーザー追加するとき、urlとnameとpasswordが表示されるから、それはメモしとく
urlでアクセスするとログイン画面になってidが勝手に入力されている。あとは、nameとpassを入れたらそのIAMユーザーでログインできる。ログイン成功したらパスワードリセット画面になって、自動パスワードをオリジナルのパスワードに変更する。

デフォルトの認可はIAMUserChangePasswordしかないのか

ハガユウキハガユウキ

グループにAWSリソースの認可を設定する際に、それぞれのリソースに対して認可を設定するのは現実的ではない。なので、複数のリソースへの認可を束ねたポリシーという概念があって、そのポリシーをグループにアタッチ(設定)した方が良い。

ハガユウキハガユウキ

グループにPowerUserAccessとIAMFullAccessというポリシーをアタッチして、そのグループにさっきのIAMユーザー所属させたら、IAM使えるようになってた

ハガユウキハガユウキ
  • IAMグループとは、IAMユーザーをグループ単位で管理するための仕組み。
  • IAMユーザーと同じく、IAMグループにもIAMポリシーを付与できる。
  • IAMグループにIAMユーザーを所属させると、そのIAMユーザーにもIAMグループのIAMポリシーが付与される。
ハガユウキハガユウキ

NATゲートウェイ、ElasticIpは1h単位で使用料がかかるので、学習終了したらリソースをすぐ消す

ハガユウキハガユウキ

コンピュータネットワークとは、複数台のコンピュータを相互に接続して、相互に情報をやりとりする技術や状態のこと
コンピュータネットワークを構築するためには、物理的な設定をした後に、論理的な設定をする必要がある

https://zenn.dev/link/comments/a4f6f1e9e06cdc

ハガユウキハガユウキ

クラウドを使わないネットワークを用意する場合、サーバーやケーブルやネットワーク機器などは、物理的なものを用意して構築する必要があった。
AWSでネットワークを構築する時は、VPCというサービスを使うと仮想的なネットワークを作ることができる。
VPCの中にネットワーク機器に相当するリソースを追加していく。
VPC同士はお互いに独立していて、お互いが影響し合うことがないようになっている。

https://docs.aws.amazon.com/ja_jp/vpc/latest/userguide/what-is-amazon-vpc.html

ハガユウキハガユウキ

IPアドレスの範囲が広い方が、同じネットワーク内にたくさんのIPアドレスを用意できる。

しかし、VPCで指定できるサブネットマスクは最大16ビットまで

ハガユウキハガユウキ

下の命名規則でリソース名をつけると良いそう

システム名ーリソース名(-リソース識別し)
ハガユウキハガユウキ

社内LANの構築やネットワークの実験時等、インターネットを使用しないときにプライベートIPアドレスを使用します。

https://yukihaga.hatenablog.com/entry/2022/11/05/123305#:~:text=までである-,パブリックIPアドレスとプライベートIPアドレス,-IPアドレスは

ipアドレスには、パブリックipアドレスとプライベートipアドレスの2種類がある。
プライベートipアドレスは社内のLAN構築とかに向いている。
RFC1918で定義されているプライベートipアドレス以外をvpcで使用すると、インターネット内のグローバルipアドレス(= パブリックipアドレス)と重複してサーバーなどと通信できなくなる可能性があるので、注意。

ハガユウキハガユウキ

サブネットとは、ネットワーク内のネットワークを分割した小さなネットワークのこと。
サブネットは、vpcのipアドレスの範囲を分割した単位で作る。

サブネットを作成する目的としては、外部公開するサービスかどうかをリソース単位で振り分けなくても管理できたり、耐障害性のために作成する。
(そもそもサブネットはリージョン内のアベイラビリティゾーンに作成する)

ハガユウキハガユウキ

作成したサブネットのCIDRブロックは変更できないので、慎重にCIDRを設計する必要がある
サブネットのCIDRブロックを設計するときは、以下を気をつける必要がある。

  • 作成するサブネットの数
  • サブネット内に作成するリソースの数

この2つはトレードオフの関係である

ハガユウキハガユウキ

一般的には、サブネット数とリソース数のそれぞれに余裕を持たせた設計が良い。

ハガユウキハガユウキ

IPアドレス範囲をCIDR表記する場合、その範囲は「CIDRブロック」と呼ばれる。

ハガユウキハガユウキ

vpc内にサブネットを作るから、サブネットのCIDRブロックはVPCのCIDRブロック内にある必要がある。

ハガユウキハガユウキ

サブネットのCIDRをどう設計するかで、そのVPCで使えるサブネットの数と、サブネットないに作成するリソースの数が決まるのか

ハガユウキハガユウキ

ネットワーク内のリソースは、ipアドレスによって特定できる。特定することでそのリソースと通信できる

vpcのCIDRブロックが10.0.0.0/16だとすると、ネットワーク部で16ビット使っている
サブネットで4bit使うように設計すると、
サブネットは2 ** 4 = 16個作れて、サブネット内にリソースは2 * 12 = 4091個作れる

ハガユウキハガユウキ

ネットワーク部は同じネットワークに属する限りは、同じ値である。そしてホスト部が割り当てたいサーバーやクライアント、ネットワーク機器に対する連番となる。

ハガユウキハガユウキ

ゲートウェイ (gateway) は、コンピュータネットワークをプロトコルの異なるネットワークと接続するためのネットワークノードである。

https://ja.wikipedia.org/wiki/ゲートウェイ

ハガユウキハガユウキ

IPv4 でインターネット経由の通信ができるようにするには、インスタンスにパブリック IPv4 アドレスが必要です。インスタンスにパブリック IPv4 アドレスが自動的に割り当てられるように VPC を設定するか、インスタンスに Elastic IP アドレスを割り当てることができます。インスタンスは、VPC とサブネット内で定義されたプライベート(内部)IP アドレス空間のみを認識します。インターネットゲートウェイはインスタンスに代わって 1 対 1 の NAT を論理的に行います。そのため、トラフィックが VPC サブネットから出てインターネットへ向かうとき、返信アドレスフィールドは、インスタンスのプライベート IP アドレスではなくパブリック IPv4 アドレスまたは Elastic IP アドレスに設定されます。逆に、インスタンスのパブリック IPv4 アドレスまたは Elastic IP アドレス宛てのトラフィックは、その送信先アドレスがインスタンスのプライベート IPv4 アドレスに変換されてから、VPC に配信されます。

インターネットゲートウェイはパブリックipをプライベートipにnat変換している。なので、プライベートipのcidrブロックのサブネットにアクセスできるのか。
https://docs.aws.amazon.com/ja_jp/vpc/latest/userguide/VPC_Internet_Gateway.html
https://milestone-of-se.nesuke.com/sv-advanced/aws/internet-nat-gateway/

NAT(Network Address Translation)はIPアドレスを変換する技術です。

https://www.infraexpert.com/study/ip10.html

ハガユウキハガユウキ

インターネットゲートウェイとは、VPCで作成されたネットワークとインターネット間の通信を可能にするためのものである。
インターネットゲートウェイがないと、インターネットとvpc内のawsリソースが相互に通信できない

https://docs.aws.amazon.com/ja_jp/vpc/latest/userguide/VPC_Internet_Gateway.html

ハガユウキハガユウキ

インターネットゲートウェイを選んでアクションを押してvpcにアタッチできる。
アタッチする、vpc-idにアタッチしたvpcが設定されるようになる


ハガユウキハガユウキ

https://zenn.dev/link/comments/3d01ac12f8e9bd

vpcで作成されたリソースがインターネットゲートウェイを通じてインターネットと通信するためには、リソースにパブリックipを割り当てる必要がある。
プライベートサブネットのリソースもインターネットを通じてソフトウェアをインストールしたかったりする(この場合、sshで踏み台経由でプライベートサブネットのリソースにアクセスする)。
しかし、プライベートサブネットのリソースがパブリックipを持つと、インターネット経由でプライベートサブネットのリソースにアクセスできるので、サブネットをパブリックとプライベートに分けた意味がない。

NATゲートウェイは、NATを実現するためのもの。
NATは、ipアドレスを変換する仕組みで、NATを使うことで、プライベートサブネットにいるリソースがインターネットにアクセスできるが、インターネットからのアクセスは禁止することができる。
NATゲートウェイはパブリックなサブネットに対して作成される。NATの機能を持つサーバーをパブリックサブネットに置くみたいなイメージ。

ハガユウキハガユウキ

NATゲートウェイの設定画面で接続タイプとある。
インターネットに接続する場合はパブリック。
他のVPCに接続する場合はプライベートにする。

ハガユウキハガユウキ

awsやってるとパブリックサブネットやプライベートサブネットという言葉をよく聞くが、
特定の設定値があるわけではなくて、
インターネットゲートウェイへのルーティングがあればパブリックサブネット
なければプライベートサブネット
という意味である。

ハガユウキハガユウキ

nat gatewayでelastic ipが自動割り当てされるから、natgateway消すときに、elastic ipも消すように気をつけないとな

ハガユウキハガユウキ

NATゲートウェイの作成を中断したり削除しても、Elastic IPは残るのか。

ハガユウキハガユウキ

ルートテーブルとは、サブネットごとに決める通信経路の設定のこと。
デフォルトだとVPCで作成する全てのサブネットに共通のルートテーブルがアタッチされている。
サブネットごとに通信経路を分けたい時は、用途ごとにルートテーブルを作成してサブネットにアタッチする。

プライベートサブネットとパブリックサブネットのルートテーブルの内容は違うようにしたいから、そのケースだとルートテーブルを分けた方が良い。

ハガユウキハガユウキ

ルートテーブルがないと、サブネット同士、またはサブネットと各ゲートウェイの間に通信経路(ネットワーク上の道のようなもの)がなくて、通信できない。

ハガユウキハガユウキ

一般的なネットワーク設計では、ルートテーブルに行うような設定は、ルーターという機器に対して行う。
しかし、AWSではルートテーブルを作成するとルーターに相当するものが自動的に出来上がる。

ハガユウキハガユウキ

localにすると、同一VPC内のリソースにアクセスできるのか

送信先 10.0.0.0/16
ターゲット local
は、VPC領域のCIDRブロック10.0.0.0/16に含まれるIPアドレス宛のパケットであれば、VPC領域のルータに接続されている相手への通信なので、VPC領域のルーターにパケットを転送するという意味である。
(ネットワークの世界では、自分が所属しているネットワークのことを慣習的にローカルやローカルネットワークと呼ぶ))

ハガユウキハガユウキ

awsには外部から攻撃を防ぐファイアフォールとして、セキュリティグループとネットワークACLがある。
セキュリティグループは、AWSリソースにアタッチして利用する仮想ファイアウォールである。
インバウンド(AWSリソースへの通信)とアウトバウンド(AWSリソースからの通信)を制御することができ、許可した通信のみ通過できる。
特定の通信を拒否する設定はできない。
許可の設定をセキュリティグループのルールと呼ぶ。

ハガユウキハガユウキ

デフォルトだとアウトバウンドは全ての通信を許可するルールが入っている。
ただし、アウトバウンドのルールを削除して、何も許可してない状態にしても、ステートフル(サーバーへのリクエストの通信がSGのルールで許可されていれば、レスポンスの通信は明示的に許可しなくても通信できる仕組みのこと)の処理をするため、インバウンドが許可されていれば通信できる。

ハガユウキハガユウキ

セキュリティグループのインバウンドルールのソースには、外部からの接続を許可するIPアドレスを指定する。
0.0.0.0/0は任意の場所からの接続を許可している

ハガユウキハガユウキ

ネットワークACLはサブネットに設定する仮想ファイアウォールである。
通信制御で拒否を設定できることがセキュリティグループとの大きな違いである。

ハガユウキハガユウキ

リソースを作成するということは、それだけ侵入の危険性が高まるということを意味する。
なので、ネットワークの安全性を保ちながらリソース設定できるように踏み台サーバー(中継サーバー)を用意する

ハガユウキハガユウキ

大前提、SSHはネットワーク経由でサーバーに安全に接続するためのプロトコル。
(インターネットの向こう側のサーバーにもアクセスできるし、同じネットワーク内のサーバーにもアクセスできる)
DBサーバーはインターネットに接続されてないからssh接続できないのだが、踏み台サーバーにsshでアクセスすれば、あとはDBサーバーへssh接続が許可されていれば、ssh接続でプライベートIP指定したらアクセスできる。

[あなたのPC]
      ↓(SSH・インターネット経由)
[踏み台サーバー](パブリックサブネット)
      ↓(SSH・プライベートIPで接続)
[DBサーバー](プライベートサブネット)
ハガユウキハガユウキ

各リソースへの接続は、限られた管理者のみが行えるようにすべきだが、
そのような設定を各リソースに対して行うことは大変だし、設定守れば発生する可能性も高くなる

なので、全てのリソースの接続入口となる踏み台サーバーを用意して、このサーバー経由できないとリソースに接続できないようにする方式がよく使われている。

ハガユウキハガユウキ

踏み台サーバー自身は、目的のリソースへの通り道となる以外の用途がないので、スペック低くても大丈夫だし、OSも特に問わない

ハガユウキハガユウキ

SSHで接続するには、秘密鍵と公開鍵というキーペアを用意する必要がある。

ハガユウキハガユウキ

踏み台サーバーって、ec2の画面からキーペア作って、ec2インスタンス作成時にキーペア指定して、sshのセキュリティグループでパブリックサブネットにec2インスタンス配置すれば作れるのか

ハガユウキハガユウキ

ssh configのHostnameには数珠繋ぎによって接続されルサーバーの1つ前のサーバーからみた情報を指定する

ハガユウキハガユウキ

EC2は仮想サーバーであり、CPU、メモリ、ディスクなどが備えられていて、LinuxやWinなどのOSをインストールできる。

ハガユウキハガユウキ

ec2のコンソールから、キーペアを作成できるのか。
作成した瞬間しか秘密鍵は入手できない。

ハガユウキハガユウキ

ec2インスタンスを作成するときに、インスタンスタイプを選べる。
インスタンスタイプは、CPU、メモリ、ストレージ、ネットワークキャパシティーの組み合わせで構成されており、t2.microやc5.xlargeのように表記される。

最初のtやcはインスタンスファミリーと呼ばれて、インスタンスの種別を表す
(cなら、高性能なcpuが利用できるコンピューティング最適化。rなら、メモリ内の大きなデータが処理できるメモリ最適化なら等)
次の数字はインスタンス世代を表し、数字が大きいほど、新しい世代。
世代が新しいほど高性能でコストパフォーマンスが高い。
microやxlargeはインスタンスサイズを表していて、大きい方がスペックは高い。
Ec2インスタンス作成後でもこのインスタンスタイプは簡単に変更できる。

ハガユウキハガユウキ

数字の前に0をつけると8進数になるのか
https://atmarkit.itmedia.co.jp/ait/articles/0608/02/news119.html

rwxでr→4, w->2, x->1を表すから、

ssh -i .ssh/aws-hoge/yuki-aws-2.pem ec2-user@52.199.138.65
The authenticity of host '52.199.138.65 (52.199.138.65)' can't be established.
ED25519 key fingerprint is SHA256:NLFnEByo3jaI6xEG9dgpsM/ybinSmYfcyvQNRl7CoZg.
This key is not known by any other names.
Are you sure you want to continue connecting (yes/no/[fingerprint])? yes
Warning: Permanently added '52.199.138.65' (ED25519) to the list of known hosts.
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@ WARNING: UNPROTECTED PRIVATE KEY FILE! @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
Permissions 0644 for '.ssh/aws-hoge/yuki-aws-2.pem' are too open.
It is required that your private key files are NOT accessible by others.
This private key will be ignored.
Load key ".ssh/aws-hoge/yuki-aws-2.pem": bad permissions
ec2-user@52.199.138.65: Permission denied (publickey,gssapi-keyex,gssapi-with-mic).

このエラーの原因は、ファイルのパーミッショが緩すぎて、オーナー以外のグループとその他がこの秘密鍵ファイルを参照(4)できてしまうことが問題。
なので以下のコマンドを実行する必要があった。

chmod 400 .ssh/aws-hoge/yuki-aws-2.pem

https://qiita.com/shisama/items/5f4c4fa768642aad9e06

ハガユウキハガユウキ

ライブラリは「自分のアプリの一部」としてコードに組み込まれる
ミドルウェアは「自分のアプリとは別に動くサービス」で、アプリはそれを外部として扱う

ハガユウキハガユウキ

ミドルウェア(英: Middleware)は、コンピュータの分野で、コンピュータの基本的な制御を行うオペレーティングシステム(OS)と、各業務処理を行うアプリケーションソフトウェアとの中間に入るソフトウェアのこと。

通常はオペレーティングシステムの機能の拡張、あるいはアプリケーションソフトウェアの汎用的(共通的)な機能を集めたものである

なるほど。

https://ja.wikipedia.org/wiki/ミドルウェア

ハガユウキハガユウキ

ロードバランサーなどを設置する場合、webサーバーは間接的に接続されるので、webサーバーはプライベートサブネットに置く。
また、webサーバーとするec2インスタンスのインスタンスタイプは、利用者の数に応じて適切なスペックを選ぶ。

ハガユウキハガユウキ

sshの多段接続機能を使わないと、秘密鍵のファイルを踏み台サーバーに置く必要があって、それがセキュリティ的にまずいのか。踏み台サーバーはパブリックipを持っているから、全世界に公開されているし。

ハガユウキハガユウキ

多段sshのメリットは、踏み台サーバーからプライベートサーバーにアクセスするときに、ローカルの秘密鍵を使うことができること。
ローカルの秘密鍵ファイルを踏み台サーバーに置く必要がないから、セキュリティ的に安全。

ハガユウキハガユウキ

ec2インスタンス立てただけで、webサーバーソフトウェアインストールしてないから、webサーバーではないんだよな。将来的にwebサーバーの役割を持たせるec2インスタンスを立てた感じか

このスクラップは3ヶ月前にクローズされました