カテゴリ:13.実際にやってみる > 13.8 AWS

(1)AWSについて
EC2(Elastic Compute Cloud)は、仮想サーバを構築することができます。VPSと思ってもいいでしょう。Elasticは「弾力性がある」という意味で、規模を拡大したり数を増減させたりが柔軟なクラウドと考えればいいでしょう。
その他、ストレージサービスのS3(Simple Storage Service)、データベースサービスのRDS(Relational Database Service)があります。※参考ですが、SQLを使わないDBのDynamoDBというものもあります。

(2)アカウントの作成
AWSを利用するには、アカウントを作るところから開始します。
無料枠を使って進めます。ただ、残念なのが、必ずクレジットカード情報を入れる必要があることです。IBMクラウドなどはその必要がありません。なので、偽名などで登録することは実質不可能です。
上記URLの画面右の「まずは無料で始める」をクリックして開始します。
aws1
aws2クレジットカード情報や住所を正しくいれます。たしか、電話番号のSMSによる認証もあったかと思います。
また、アカウント名を作成しますが、ログインには使いません。

(3)ログイン
アカウントができたら、早速ログインしましょう。
①ログイン画面にアクセス
aws3
②メールアドレスとPWでログインをする

③AWS マネジメントコンソール の画面が表示されます。
 ・左上のAWSのアイコンは、ホームボタンのような役割をしています。
 ・サーバを起動するには、真ん中あたりの「ソリューションの構築」の「仮想マシンを起動する」から行います。
 または、上のメニューの「サービス」>「コンピューティング」>「EC2」から起動します。
 ・メニューの「アカウント名(皆さんが設定したもの)」をクリックすると、アカウント管理のメニューになります。
 
(4)最初の設定 ※主にセキュリティ
①接続するサーバの場所を変更
 リージョンとエンドポイントを変更します。
 メニューバーの右の方に、「米国東部 (バージニア北部)」などとなっている部分です。日本に変更しましょう。具体的には、アジアパシフィック (東京)にします。
 ※詳細は以下

②アカウントの設定
メニューバーで、自分のアカウントをクリックして「マイアカウント」

→たくさんあるので、次の節で。

③認証の強化
二段階認証 MFA(Multi-Factor Authentication)を入れる
以下から実施する。
または、「サービス」メニューの「セキュリティ、ID、およびコンプライアンス」>「IAM」を開く
ここで、「ルートアカウントの MFA を有効化」から2段階認証を実行する。
詳しくは、以下

※ルートアカウントの場合は、IAMからはできなかった気がする。私の場合は以下で実施。
画面右上の自分のユーザを選択して「マイセキュリティ資格情報」
セキュリティ認証情報 の画面になるので、「▼多要素認証(MFA)」から行える。

MFAに関して、IAMで実施する画面は以下のような感じ
mfa3

mfa5

話が変わって、ログインしたらメールで通知してほしいが、簡単にはできなさそうである。残念

(5)アカウントの設定
メニューバーで、自分のアカウントをクリックして「マイアカウント」
①お支払い通貨の設定
→JPNに変更。手数料が安くなるような噂
aws4
②Billingの設定
それぞれチェック
・電子メールでPDF版請求書を受け取る
・無料利用枠の使用のアラートの受信
・請求アラートを受け取る

(6)請求に関して
①毎月の請求額の確認
 無料で使えるといっても、アカウントが乗っ取られるなどして、大量に使われるリスクもあります。
 請求額の確認は、「マイアカウント」>「Billing」>「請求書」
②リアルタイムの料金を表示
「マイアカウント」>「Cost Management」>「Cost Explorer」
でコストエクスプローラを有効にします。
 少し時間がかかります。 

③請求の上限設定
・「マイアカウント」>「Budgets」で「Create a budget」ボタンを押します。
aws5
・「コスト予算」を選択します。
aws6
間隔:月別、定期予算、で上限を$20に設定しました。
→次のページで80%(Alert threshold)で通知する設定をしました。80という数字は、あらかじめ入っているように見えましたが、自分で設定が必要です。
aws7
④料金計算
EC2の料金は複雑と言われます。コア数やメモリにもよります。不要なインスタンス(サーバ)は停止しておきましょう。(※削除しなくても、停止だけで課金はされないはず)。それ以外に、ストレージ(EBS)や、通信量によっても課金されます。インバウンドの通信は無料のようすだが、Dos攻撃をくらうと同時にアウトバウンドも増えるので、費用が怖い。いわゆるEDoS攻撃である。

(1)EC2でのサーバの構築に関して
今回は、Linux(基本はCentos7)サーバをAWS上に構築します。ローカルにサーバを持つ必要はなく、インストールも不要。とても便利です。

(2)ネットワーク構成とVPC
・作成するサーバは、Amazon上の閉じられたネットワークに配置されます。
・ネットワーク構成に関して、VPCの理解が必須です。
以下のサイトの内容をよく読みましょう。これで概念がわかってもらえると思います。
-------------
Virtual Private Cloud (VPC) は、AWS アカウント専用の仮想ネットワークです。VPC は、AWS クラウドの他の仮想ネットワークから論理的に切り離されており、AWS のリソース(例えば Amazon EC2 インスタンス)を VPC 内に起動できます。VPC の IP アドレス範囲を指定して、サブネットを追加し、セキュリティグループを関連付けて、ルートテーブルを設定できます。
-------------
https://docs.aws.amazon.com/ja_jp/vpc/latest/userguide/what-is-amazon-vpc.html

・もう少し詳しく説明します。
以下の画像を見てください。
まず、AWSの中に、ユーザのアカウントに紐づけられたVPCが
作成されます。Regionの中に入っています。
つまり、RegionごとにVPCが作成されます。ですから、北米
で作るサーバと日本で作るサーバは、別のVPC上に作成されます。
https://docs.aws.amazon.com/ja_jp/vpc/latest/userguide/images/default-vpc-diagram.png
・VPCの中で、サーバを構築します。内部からアクセスするプライベートIPアドレスとグローバルIPアドレスが割り当てられます。
IPアドレスは表示されますので、公開サーバとしてアクセスしたい場合は、そのグローバルIPアドレス(またはFQDN)にアクセスします。
※ifconfigで見ると、eth0しかありません。なので、両者は同一のIFであり、グローバルIPアドレスにNATされています。
・確認のため、VPCを見てみましょう。
https://console.aws.amazon.com/vpc/
・ネットワーク(サブネット)も、適宜作成されます。

(3)サーバの構築
前置きが長くなりましたが、サーバを構築してみましょう。
①EC2のダッシュボードを開く
これが、サーバの構築です。
どこのリージョンかを選択した上で、「サービス」
>「コンピューティング」>「EC2」を選択します。

②インスタンスの作成

aws8
「インスタンスの作成」ボタンをクリック。
検索画面で「Windows」と入れれば、WindowsOSが出てきます。
Amazon Linux 2 AMIで作成しましょう。
ちなみに、Amazon Linux 2はCentOS7をベース、Amazon LinuxはCentOS6をベースにしています。

※AMIは、「Amazon マシンイメージ」のことです。

・無料枠の「Amazon Linux 2 AMI (HVM)」を選択します。
aws9


③インスタンスタイプの選択
T2が検証用には向いているでしょう。CPUやメモリによって
nano、microなどが変わりますが、microのt2.microを選びます。

④その他、詳細な設定を進めます。
まあ、デフォルトのままでもいいでしょう。

(⑤セキュリティグループ)
FWの機能が実現できる。
デフォルトでは、外からの通信はSSH以外は全て拒否、内からの通信は全て許可になっています。SSHを止めてしまうと、このサーバに接続できなくなってしまいます。

⑥キーペアの作成
適当に名を付けて作成します。
また、自分がSSHで接続するには必要なので、このキーをファイルとして保存します。
aws10


⑦「インスタンスの作成」
ボタンを押して、作成します。
エラーが出て止まる。
Your request for accessing resources in this region is being validated, and you will not be able to launch additional resources in this region until the validation is complete. We will notify you by email once your request has been validated. While normally resolved within minutes, please allow up to 4 hours for this process to complete. If the issue still persists, please let us know by writing to aws-verification@amazon.com for further assistance.

→しばらくすると接続できます。

(5)SSHでの接続
AWSのコンソール画面から接続する方法があります。
※おそらく、この場合はコンソールにログインしているので、さきほどのキーは不要です。

TeraTermなどの通常のSSHで接続する方法を紹介します。
①TeraTermの起動
②接続先として、作成したインスタンス(サーバ)のグローバルIPアドレスに接続します。
③ユーザ名はec2-user (※デフォルトで作成されているユーザです)、パスワードを入れる必要はありません。RSA/DSA/ECDSA/ED25519鍵を使うのところで、先ほどの秘密鍵を入れて接続します。
aws11
★デフォルトのec2-userは変更すべきという考えもあるので、そこは必要に応じて変更する
④Linuxのコマンドプロンプトが表示されれば、接続成功です。

(6)AWS上での操作
基本的にCentOS7なので、CentOS7のコマンドが実行できます。
管理者権限になるには
sudo su - (sudo -iの方が簡単 )
※ec2-userはsudo権限が有効になっている。普通に su - でrootになろうとすると、rootのパスワードが求められる。

(7)使わないインスタンスは停止しておこう
インスタンスを選択し、「アクション」>「インスタンスの状態」>「停止」で停止します。無駄な料金が
発生しませんし、このサーバには誰もアクセスできません。

(8)作成したインスタンスの削除(サーバの削除)
インスタンスを選択し、「アクション」>「インスタンスの状態」>「終了」で削除します。すぐには消えないかも。
https://docs.aws.amazon.com/ja_jp/AWSEC2/latest/UserGuide/terminating-instances.html#termination-overview

(9)その他:トラブルシュートなど
・トラブル系
EC2のWebコンソールで、文字入力ができない場合、IMEが日本語「かな」になっていないか確認

■Webサーバの構築
①インスタンスにもよるが、デフォルトではWebサーバ(httpd)は入っていないと思う。
②yumでインストールしましょう。
http://sm.seeeko.com/archives/15877187.html
③サービスを起動します。
④セキュリティグループでHTTPを許可します。
 インスタンスのセキュリティグループを開き、インバウンドとしてHTTPを許可します。
⑤該当サーバのグローバルIPアドレスにアクセスすれば、Apacheのトップページが見えるはずです。
⑥必要に応じてコンテンツを変更しましょう。
たとえば、/var/www/html 配下にindex.htmlファイルを作り、「Hello!」とでも入力すると、それが表示されます。
※参考
サーバのiptableは使う必要が無い。(効いていないので、全通しだと思われる)。
2重管理の必要はないので、わかりやすいセキュリティグループだけで管理すればいいだろう。

■AWSをインストール直後に、Webサーバを立ち上げ、index.htmlを作るまで
以下、コピペで行けると思います。
#ユーザをrootに切替
sudo -i
#ソフトウェアのUpdate
yum update -y
#apacheのインストール
yum -y install httpd
#apacheのサービスを開始
systemctl start httpd
#apacheのサービス状態を確認
systemctl status httpd
#apacheのサービスを自動起動にする
systemctl enable httpd
cd /var/www/html
#初期ファイルの作成(中身はhelloのみ)
echo hello>index.html
#timedatectlでタイムゾーンをTokyoに
timedatectl set-timezone Asia/Tokyo

■Webサーバに接続する
パブリックIPが割り当てられていると思うが、同時に、ドメイン(FQDN)も割り当てられる。
こんな感じ↓ これでアクセスすることもできる。
http://ec2-xxxx.compute-1.amazonaws.com/

TeraTermで接続するといいでしょう。
以下の記事の(5)SSHでの接続 です。
http://sm.seeeko.com/archives/18733856.html

接続した後は、TeraTermの画面の「ファイル」>「SSH SCP」を開き
From にWindows上のファイルを指定し、ToにAWSのLinux上パスを指定します。
そして、「Send」を押すだけです。

※デフォルトのままだと、/home/ec2-user/ のフォルダにUploadされることでしょう。

※残念ながら、フォルダごとのUploadはできません。なので、やる場合は圧縮が必要です(※未実施)

■1.方針
AWSのLightsailを使う。
以下を参考にした。
https://briarpatch.co.jp/wordpress-aws

以下のAWSのサイトにも、Lightsailが便利だと記載されている。
https://aws.amazon.com/jp/getting-started/tutorials/launch-a-wordpress-website/

(2)費用
AWSのLightsailは、サーバスペックにもよるが、最小で月額3.5ドル。初回1ヶ月は無料。AWSの料金とは別に3.5ドルではなく、込みの値段だと思っている(が、真実は不明)

■2.作り方
①AWSにログイン

②検索画面でLightsailと入力
または、コンピューティングのEC2のすぐ下にあるはず。

③設定画面
・日本語を選択
・インスタンスの作成
 →日本(東京)、Linux、アプリ+OS、Wordpress (※Multisiteではない方)
・料金プラン(インスタンスプラン)は3.5ドル/月を選択
・インスタンス名をつける「-SS」と付けた
・「インスタンスを作成」ボタンでインスタンスが作成
できた →超簡単だ!!

④起動
・作成したインスタンスをクリックする。
・パブリック IP が表示されていて、そこにアクセス
すれば、デフォルトのページが表示される。
 →IPアドレスは変わらないはずだ。インスタンスを落としても変わらないのか、試してみよう。→停止するとIPアドレスが変わる。なので、基本的には停止しないようにする必要がある。
・SSHで接続すれば、接続できる。
→なぜかコマンドが入力できない。
※一つ前のインスタンスの画面で「…」から「接続」
を押したらうまくいった。
・以下でPWを表示 (rootにはならないこと)
$ cat bitnami_application_password

⑤WPへログイン
http://パブリック_IP/wp-admin

ここで、ユーザ名は「user」、先ほどのPWを入力すればログインできる。
めちゃくちゃ簡単だ。すごい!!

■WordpressでHP作成
①WPへログイン
先と同様の方法でログインする

②とりあえず、UpdatesですべてUpdateしておいた。
精査はしていない。

③「Settings」でSiteLanguageを「日本語」に。タイムゾーンなども変更

④タイトルの変更
HPのタイトルや説明などを記載する

⑤テーマを選ぼう
「外観」「テーマ」から「テーマを追加」
検索窓で「lightning」を入れて実行
「インストール」→「有効化」をする

これで、なんとなくHPらしくなる。

■独自ドメインの設定
①ドメインの取得
②DNSの設定で、AWSのIPアドレスと、FQDNを対応させる。
ちなみに、私は以下を使っている。
https://www.value-domain.com/

■Wordpress
habakiriをつかってみた。
habikriに関しては、以下が詳しい
https://mominoco.com/habakiri3/

・右下のロゴを消す
https://qiita.com/MosamosaPoodle/items/24ae64627820e557790b

・CSS
外観>テーマエディター 追加CSS から変えられる。

・上の管理バーを消す
ユーザー>あなたのプロフィール
から設定できる。
サイトを見るときにツールバーを表示するのチェックを
外す

・地図を埋め込むこともGoogleマップから簡単に行える
Googleの地図を埋め込むのはとても簡単。まず、住所を入れてGoogleで地図を表示します。
そして、左側にある「共有」を押して、「地図を埋め込む」というタブのHTMLをサイトに貼るだけです。

・問い合わせフォーム
メールが送信できるように事前にWP Mail SMTPのプラグインを入れておく
作り方などは、以下あたりを参考にした
https://newstd.net/user_manual/mwwpform
https://xn--t8jc2c0hs41uof6d.com/responsive-inquiry-form/

・下のバーにある「Habakiri theme by モンキーレンチ Powered by WordPress」を消させていただく。
AWSのlightsailを使っているので、AWSのコンソールから接続。
なぜか、コマンドがうまく入らない。右下のドキュメントっぽいアイコンを押して、何か入力してからカーソルに戻ると、入力できた。対処療法でしかないが…。もしかすると、全角になっていただけかも。
sudo -i でsuの権限にする。
/opt/bitnami/apps/wordpress/htdocs/wp-content/themes/habakiri/modules/copyright.php から編集します。
以下にあるように、ソースをゴッソリ入れ替え
https://mominoco.com/habakiri3/
?>が無かったので、足してみた。

・テンプレート
私は、メニューページが無いものにしたかった。そこで、固定ページのテンプレートを「サイドバー無し」というのにした。
https://habakiri.2inc.org/demo/habakiri-coco/?page_id=2179
設定は、固定ページのクイック編集からできる。

・Wordpressコメントの拒否
設定>デフォルトの投稿設定>新しい投稿のコメントを許可
また、〇日以上前の投稿コメントフォームを自動的に閉じるのチェックを入れ、値を0にする。これで、過去すべての投稿のコメントが拒否される。

■バックアップ
Lightsailの場合、スナップショットがいいだろう。
価格も安い。月額 0.05 USD/GB が適用されるので、
20Gの場合、月1ドル。
https://aws.amazon.com/jp/lightsail/faq/
また、Wordpress上でバックアップを取ってもいいかもね。
BackWPupのプラグインを使おう
https://saruwakakun.com/html-css/wordpress/backup
プラグインをインストールし、
ジョブを新規で作成。
デフォルトのままで、宛先は「ファイル」にして保存し、「今すぐ実行」
「ジョブ・ログをチェック」ではなく、「作成した
ジョブを実行」から、右の方で「ダウンロード」
そして、該当するファイル(恐らくZIP)をダウンロードする。

■その他
Wordpressで、目次は自動で作成してくれるプラグインがあるようだ。これが便利かも
https://ferret-plus.com/13648

テーマのお薦めが紹介されていた。
https://ruimaeda.com/wordpress-theme/

AWSのサーバをSSL化する
Let'enryptを入れ、証明書を発行、証明書を入れて、PCからHTTPSで通信できるまでの手順。3か月後に自動更新
※AWSのCentOS7であるが、ちょっとだけややこしい。

ドメインはmomiji.pw
サーバは、https://www.momiji.pw とする。

例えば、手順は以下
https://qiita.com/takahiko/items/a08895550727b95b6c36

sudo curl https://dl.eff.org/certbot-auto -o /usr/bin/certbot-auto
sudo chmod 700 /usr/bin/certbot-auto

だが、証明書を発行しようとすると、AWSのEC2特有の事情によるエラーがでる。※だが、lightsailの方はエラーにならなかった。

certbot-auto certonly --webroot -w /var/www/html -d momiji.pw --email hoge@momiji.pw

Sorry, I don't know how to bootstrap Certbot on your operating system!
・・・

そこで、以下URLの「2. certbot-autoを書き換える」
の部分を以下で進める。インストールされた場所は/home/bin かな?

https://qiita.com/MysteriousMonkey/items/f26316447c1ff390ce21

 elif grep -i "Amazon Linux" /etc/issue > /dev/null 2>&1 || \
   grep 'cpe:.*:amazon_linux:2' /etc/os-release > /dev/null 2>&1; then
  Bootstrap() {
    ExperimentalBootstrap "Amazon Linux" BootstrapRpmCommon
  }
  BOOTSTRAP_VERSION="BootstrapRpmCommon $BOOTSTRAP_RPM_COMMON_VERSION"

※syntaxエラーがでて面倒だった。古いのをコメントアウトではなく消したら
うまくいった。コメントアウトを#ではなく/にしたのが間違っていたのかもしれない。

再度実行

certbot-auto certonly --webroot -w /var/www/html -d momiji.pw --email hoge@momiji.pw --debug
※説明は以下
https://qiita.com/sayama0402/items/011644191dfdbde9c646
※最後の--debug がないと怒られる。

★★-d momiji.pw にすると、https://momiji.pwはOKだが、https://www.momiji.pwはダメ。 -d www.momiji.pw と指定する必要がある。
※ワイルドカードに本当はしたいよね。

途中でメッセージが出る
(agree、noでいったん進む。→完了

成功したようなメッセージ(Congratulation)がでる。
サーバ証明書と秘密鍵は以下に入っているようだ。

 /etc/letsencrypt/live/momiji.pw/cert.pem
 /etc/letsencrypt/live/momiji.pw/privkey.pem

また、同じフォルダにchain.pemも入っている。→これは不要な気がする

・mod_sslをインストール

# yum install mod24_ssl

・設定ファイル(ssl.conf)の設定
上記のパスを記載する。
https://qiita.com/sayama0402/items/011644191dfdbde9c646

#systemctl restart httpd

エラーが出る場合は、以下のコマンドで設定ファイルのテスト

#service httpd configtest

■AWSのLightsailの場合
以下でできるみたい。それと、wwwとwwwなしドメインの両方でいけるようだ。

基本的に以下のサイトの通りで成功する。すごい。
https://qiita.com/yshishido/items/67c57b9faafbda07da81

cd /tmp
curl -s https://api.github.com/repositories/37038121/releases/latest | grep browser_download_url | grep linux_amd64 | cut -d '"' -f 4 | wget -i -
tar xf lego_v3.3.0_linux_amd64.tar.gz ←バージョンはタブで押せばダウンロードしたものが自動で表示される。
sudo mv lego /usr/local/bin/lego
sudo /opt/bitnami/ctlscript.sh stop

sudo lego --email="{メールアドレス}" --domains="{ドメイン}" --path="/etc/lego" --tls run

--domains="example.com" --domains="www.example.com" の2つを実行

Do you accept the TOS? Y/n
でyと答える。

sudo mv /opt/bitnami/apache2/conf/server.crt /opt/bitnami/apache2/conf/server.crt.old
sudo mv /opt/bitnami/apache2/conf/server.key /opt/bitnami/apache2/conf/server.key.old
sudo mv /opt/bitnami/apache2/conf/server.csr /opt/bitnami/apache2/conf/server.csr.old
sudo ln -s /etc/lego/certificates/{ドメイン名}.key /opt/bitnami/apache2/conf/server.key
sudo ln -s /etc/lego/certificates/{ドメイン名}.crt /opt/bitnami/apache2/conf/server.crt
sudo chown root:root /opt/bitnami/apache2/conf/server*
sudo chmod 600 /opt/bitnami/apache2/conf/server*

sudo /opt/bitnami/ctlscript.sh start

■SSLへのリダイレクト
Googleの検索エンジンでもHTTPSが優先されるし、ChromeではHTTPのサイトは警告がでる。
なので、HTTPで通信してきた場合はHTTPSに強制的にリダイレクトされるようにしよう。
以下のサイトの通りにやればできた。
https://www.karelie.net/aws-lightsail-build-wordpress-ssl/#https

/opt/bitnami/apache2/conf/bitnami/bitnami.confに関して、以下の3行を追加する。
 
9行目あたりの以下の下に
DocumentRoot “/opt/bitnami/apache2/htdocs”
以下を追加
RewriteEngine On
RewriteCond %{HTTPS} !=on
RewriteRule ^/(.*) https://example.com/$1 [R,L]

Apacheの再起動 →restart httpdは動かなかった。
/opt/bitnami/ctlscript.sh restart apache

■■AWSのSSL
証明書の有効期限は、実際にページにアクセスしてみて、証明書をみたらいいだろう。
証明書の有効期限を見ると、ちょうど3か月後になっている。

以下のサイトの通り
https://qiita.com/yshishido/items/67c57b9faafbda07da81

実行するのは以下の3行
sudo /opt/bitnami/ctlscript.sh stop
sudo lego --email="xxx" --domains="seeeko.com" --domains="www.seeeko.com" --path="/etc/lego" --tls renew
sudo /opt/bitnami/ctlscript.sh start

少し補足
・ sudo /opt/bitnami/ctlscript.sh stop
→3行くらいでて、サービスが止まることが分かる
・sudo lego --email="xxx" --domains="seeeko.com" --domains="www.seeeko.com" --path="/etc/lego" --tls renew
→メールアドレスは、全体と同じにする必要がある。忘れたら、grepででも探せばいいだろう。それと、--tlsが無いと、怒られた。

無事に起動したら、サイトで証明書を確認するのが確実だ。

また、うまくいかなかったら legoコマンドで最後をrenewではなくrevokeにすると、廃棄できるはず。

先のサイトのとおり、Cronにしてみた。自動実行が楽である。
/etc/lego/renew-certificate.sh
#!/bin/bash

sudo /opt/bitnami/ctlscript.sh stop
sudo lego --email="xxxx" --domains="seeeko.com" --domains="www.seeeko.com" --path="/etc/lego" --tls renew
sudo /opt/bitnami/ctlscript.sh start

★注意点は、AWSの場合は、crondではなく、cron

systemctl status cronをみると、動いていることがわかる。

また、書き方にはいろいろあるが、以下が参考になった。/etc/cron.d/にファイルをおきましょう。
http://thoames.hatenadiary.jp/entry/2018/12/30/101021

/etc/cron.d/にファイルを作る。そうすると、実行される
/etc/cron.d/cert_month

0 0 1 * *       root    /etc/lego/abc.sh

※うまく動くか、さてどうだろうか。

(1)概念
サーバを公開する場合は特に難しくないだろう。自動でインターネットに接続できるからだ。
一方、企業ネットワークとしてAWSを活用し、たとえばWorkspacesを使ってPCや社内SVを配置する場合を考える。この場合、社内からインターネットは許可するが、社外からインターネットは拒否する。この設定が、考え方を含めて少し複雑。
 ・サーバの場合は、インスタンスにパブリックIPアドレスを割り当てていた。なので、直接インターネットに出ることができる。→でも、企業LANの場合は違うよね。PC単位でグローバルIPアドレスは割り当てない。
 ・PCの場合は、ネットワーク(VPC)の出口にFWがあり、その1つのグローバルIPアドレスからインターネットに出る。
 ・そのために、NATゲートウェイが必要。NATゲートウェイは、NAPTをする装置。※プラス、インターネットGWも必要。これは、インターネットの出口でIPを1対1でNATする。(個人的にはNATしなくてもいいと思うのだが、そういう仕様のようだ)
 ・構成としては、以下がわかりやすい。
https://milestone-of-se.nesuke.com/sv-advanced/aws/internet-nat-gateway/
 ・セグメントとしては、プライベートサブネットに加えて、パブリックサブネットが必要。通常のLANでは不要なので、この辺がわかりにくい。1つにしようとやってみたが、ダメだった。(仕様としてできないらしい)
 ダメだった構成はこんな感じ。パブリックサブネットとプライベートサブネットを1つにし、その中にNAT-GWとiGWを混在させる。
vpc

・正しい姿は、パブリックサブネットにNATゲートウェイを配置する。プライベートサブネットはNATゲートウェイにルーティングを向ける。このとき、NATゲートウェイにはElasticIPなどにより、パブリックIPアドレスが必要。パブリックサブネットは、インターネットGWにルーティングを向ける。

こんな感じ
aws

(2)設定方法
以下がわかりやすいだろう。
https://qiita.com/TK1989/items/5d9bd5d49708c02dff3f

(3)質問形式で。
まず、解説として以下がある。
https://blog.putise.com/aws-nat%E3%82%B2%E3%83%BC%E3%83%88%E3%82%A6%E3%82%A7%E3%82%A4%E3%81%AE%E4%BD%BF%E3%81%84%E6%96%B9%E3%80%82%E3%83%97%E3%83%A9%E3%82%A4%E3%83%99%E3%83%BC%E3%83%88%E3%82%B5%E3%83%96%E3%83%8D%E3%83%83/

Q.上記のPublicSubnetのサーバは、パブリックIPじゃなくていいんですよね?
A.AWSのインスタンスなので、プライベートIPアドレスを持つ。しかし、インターネットに接続したいのであれば、パブリックIPアドレスを割り当てる必要がある。※Publicサブネットの中にNAT-GWを入れて、そこにパブリックIPアドレスを割当ててもダメ。

Q.PublicSubnetとPrivateSubnetの違いは?どこで設定する?
A.グローバルIPアドレス(=パブリックIP)を持つか、インターネットゲートウェイ(IGW)やNAT-GWを持つたせればPublicSubnetになる

Q.1つ目の図にある、PublicSubnetのInstanceはインターネットに出られますか?
A.パブリックIPを割り当てれば可能。

Q.NATインスタンスとNATゲートウェイがある?
A.そのようだ。詳しくは以下。

Q.インターネットGWとNATゲートウェイの違いは?
以下がとてもわかりやすい。
https://milestone-of-se.nesuke.com/sv-advanced/aws/internet-nat-gateway/

■AWSのイメージのバックアップ
(1)AMIかスナップショットのどちらか
まあ、AMI(Amazon Machine Image)でいいと思います。
https://mussyu1204.myhome.cx/wordpress/it/?p=739
EC2の画面から該当するインスタンスを選び
アクション>イメージ>イメージの作成

スナップショットを取って、そこからマシンイメージを作成してもOK。

(2)イメージのAMIと、EBSのボリュームとスナップショット
バックアップ取るときは、私はAMIを使っている。 サーバを起動しなくても、ディスクを使用しているので、毎月の費用がかかる。 無駄なコストは抑えたいので、スナップショットを削除することにした。インスタンスの起動には関係無いと思う。 また、ボリュームも消してもいいかもしれないが、そうすると、インスタンスが起動しないかもしれない。 バックアップを取るだけなら、スナップショットでもいいとあったが、これが最も安い方法なのか、わからない。 おそらく、スナップショットが一番安いのだが、起動するには、スナップショット⇒AMIにしてからインスタンスにするので、ひと手間多いようだ。 個人的には、インスタンスを停止しておく方法、AMI,スナップショットのどれが一番安いのかを知りたい

####2.EC2のインスタンスを別のところにコピー
(1)違うリージョンにコピーする
AMIを作成し、それを違うリージョンにコピーする
https://beyondjapan.com/blog/2017/12/ami-copy-other-region/
作成したAMIを選んで、アクションからAMIのコピー、送信先リージョンを選ぶ。
コピーしたAMIから、EC2のインスタンスを起動する
※画面は、AMIの画面から行える。
コピーが終わると、インスタンスのところに表示される。※注意点としては、移行するときは、同じリージョン間でコピーされる。別リージョンで見ると、存在しないので、あれ?無いな、と思うかもしれない
→VPCとかはどうなる? VPCやサブネット、ルートテーブルなどは引き継がれないので、全て作成する必要がある。

(2)別のアカウントの人に共有する
手順は以下

①移行元でAMIを作成する
②AMIで右クリック「イメージパーミッションの変更」でAWSアカウント番号を入れ、「アクセス許可の追加」を押す。
このとき、その下にチェックボックスがるが、入れても反映されたかよくわからない。なくても成功したと思う。
※ちなみに、AWSアカウント番号は、AWS画面右上の「マイアカウント」で確認できる。アカウントIDというのがそうだ。
※それと、保存は成功するけど、もう一度表示すると反映がされていない場合がある。ただ、しばらくすると反映されていたりして、動作がイマイチ不明。

③移行先のAWSにログインし、AMIから「自己所有」ではなく、プライベートイメージを見ると、アクセス権を取得したAMIが
表示される。ここで、「起動」するなりして起動する。AMIそのものはおそらくコピーされていないので、移行元でAMIを削除すると、消えてしまうと思う。
※同じリージョンにコピーされるので、リージョンをチェックすることが大事だ。

■AWSでLANを作る
同じVPCの中であれば、プライベートIPアドレス同士でpingが通る。(※もちろん、セキュリティグループでICMPの許可は必要)

以下のコマンドでarpを見ると、末尾1のIPが見える。これがデフォルトゲートウェイのはずである。それ以外の端末も、ARPで見えるのだろうか。(AWSは特殊なつくりをしている気がする)
#arp

■Service Quotas
過剰な請求にならないようにすることと、AWS側でもサービス提供のバランスをとるために、サービスの上限がデフォルトが設定されている。
たとえば、GPUを使うPインスタンスの場合、以下でみてみよう
Service Quotas > AWS のサービス > Amazon Elastic Compute Cloud (Amazon EC2) > Running On-Demand P instances
「Maximum number of vCPUs assigned to the Running On-Demand P instances.」として、vCPUの数の上限が、32になっている。「調整可能」と表示されているので、申請すれば増加をリクエストすることができる。

■海外のリージョンを使う場合の、日本準拠法の適用について
海外のリージョンを使うと、デフォルトでは管轄裁判所が米国ワシントン州法となっている。そこで、以下の手続きをした方がいいだろう。

「AWS Organizationsによる、日本準拠法に関する AWS カスタマーアグリーメントの一括変更について」

AWS Artifactから、右上に「AWS Artifact の使用を開始する」とあり、「契約の表示」をクリック
レポートを参照してダウンロードし、AWS Artifact との契約を受諾します。
「日本準拠法に関するAWSカスタマーアグリーメント変更契約」がアクティブになっていない場合、
アクティブにする。このとき、契約のダウンロードなど、数回クリックなどが必要だ。

■AWSで複数IPの割当
https://recipe.kc-cloud.jp/archives/6513

■AWSのrootとec2-userのパスワード
①root
以下をみてもらうとわかるように、PWがありません。
# cat /etc/shadow | grep root
root:*LOCK*:14600::::::

②ec2-user
以下のように!があるので、アカウントロックされた状態です。
# ec2-user:!!:1836・・・
※また、以下を見ると、PasswordAuthentication no なっていて、パスワード認証はできなくなっています。
/etc/ssh/sshd_config

■インスタンスのタイプを変更する。
たとえば、メモリ容量が小さいので、もっと大きいのに変更する。 ※ユーザがあふれて重くなったら、容量を増やせるというのはとても便利だ
https://qiita.com/copei/items/bb09d61a53514e028260

■マネージドプレフィックスリスト
セキュリティグループなどに入れるIPアドレスをまとめる。
複数のEC2のサーバに、送信元IPアドレス制限をする場合などにおいて、それぞれのセキュリティグループに個別をするのは面倒。
そこで、マネージドプレフィックスリストに設定しておくと、これをそのまま適用できる。
もし、追加したいIPアドレスがあったりしても、ここに追加すればいい

■AWSの脆弱性検査
AWSにはAmazon Inspectorなるものがあり、脆弱性を検査してくれる。ただ、内容はそれほど本格的では無いように感じた。基本はCVEかな。あとは、PWの文字数制限をかけているとか、・・・
https://www.wafcharm.com/blog/amazon-inspector-for-beginners/

■AWS Connect
コンタクトセンタ機能。コールセンタを電話のみとすると、コンタクトセンタは電話だけでなく、チャットも含めたコミュニケーション。
以下の解説がわかりやすい。
https://www.youtube.com/watch?v=Xo02vDxG9p0&feature=youtu.be

(1)仕組み
・電話番号はAWSから発行される。0800のフリーコール(顧客が無料)や050(顧客が負担)の番号。
・処理フローはGUIベースで作成できる。
・ソフトフォンを使うことが可能。→電話代はソフトフォンなので固定なのかもしれない。
・文字(テキスト)を入力すると、その内容を読み上げて応対してくれる。処理の振分け、○なら1、○○なら2という誘導もできる。
・もちろんユーザ管理ができる。AWSの他の機能との連携も可能。AIとも。
・音声の録音機能もある。文字起こしもある。
・コールセンタの機能は非常に多機能であるが、それらの本格的なシステムとの比較は別途必要かと思う。



■AWSでセキュリティグループの変更
①セキュリティグループの変更
ネットワーク&セキュリティ>ネットワークインターフェース から該当するIF(基本はインスタンスのeth0)を選び、アクションからセキュリティグループの変更
②セキュリティグループの名前を変更
後からはできない。新規に作成して、割り当てを変えるしかない。
③Firewalldがenableになってしまっているので、それを直して、イメージにする
systemctl disable firewalld

■AWSと自社の接続
AWSでクラウドを利用するとしても、自社のサーバやPCが完全になくなるには時間がかかる。しらばらくはハイブリッドクラウドという形を取るだろう。
自社をAWSを接続するには、IPSecによるVPNと、 Direct connectがある。前者はインターネットVPN、後者は専用線である。

■AWSの多種多用なサービス
(1)よく利用されるもの
以下の3つだと思う。
①EC2
②RDS(データベース。EC2でDBを入れるよりもDBエンジンそのものの管理が不要で、管理が楽)
③ストレージS3(EC2に腹持ちするよりも価格面や可用性(冗長性)で優れる)

その他、AMIやVPCなど無料というか当たり前のものも使われる。それ以外には、用途によるが、ELB、Lambdaも多いだろう。

(2)AI機能というかツール
AIがするべき学習などを終えて、そのナレッジを提供してくれるサービスができあがっている
たとえば、AWSであれば、画像認識(Amazon Rekognition)
https://aws.amazon.com/jp/rekognition/
レコメンド(Amazon Personalize)
https://aws.amazon.com/jp/personalize/
チャットボット(Amazon Lex)
https://aws.amazon.com/jp/lex/
翻訳(Amazon Translate)
https://aws.amazon.com/jp/translate/
などのサービスを受けることができる。

(3)AWSとIoT
IoTを使って何かやろうとすると、IoT機器にモジュールやアプリを入れ、IoT機器とクラウドをWifiや5Gなどで接続し、クラウド上のAWSのサービスにデータを保存し、集めたデータを分析、活用する必要がある。
デバイスにIoT Device SDKsを入れて、サーバ側ではAWS IoT Coreで受け付けることができる。あとはAWS Lambdaなどと連携できる。

活用例として、ルンバのiRobotでも活用されている。
https://aws.amazon.com/jp/solutions/case-studies/irobot/

■AWSのClient VPN
リモート環境からAWSに接続する。もちろん認証を強化する必要があり、証明書認証は必須だと思う。
http://blog.serverworks.co.jp/tech/2019/06/10/awsclientvpn/
SSL-VPNシステムの代わりとしても使える。企業にリモートアクセス用のSSL-VPN装置を置かず、AWSにClient VPNで接続してもらう。AWSと企業はVPN接続する。
以下は、シオノギデジタルサイエンスの事例が紹介されている。
https://businessnetwork.jp/tabid/65/artid/7362/page/2/Default.aspx

■インスタンスのスクリーンショット(画面を見る)
インスタンスを再起動しているとき、接続が切れているので、どういう状態になっているのか不安なときがある。
そんなときは、インスタンスを選択して「アクション」>インスタンスの設定>インスタンスのスクリーンショットの取得で、現在のスクリーンショットが見える。 
※この項目が表示される場合とされない場合があり、それが不思議。表示されなければ、もう一度インスタンスをチェックし、あらためてやりなおしてみよう

■エンドポイント
EC2インスタンスやRDSは、プライベートIP空間で利用する。(もちろんパブリックIPやElasticIPでグローバルからも接続は可能)
S3はパブリックから利用できるようになっていて、EC2インスタンスとS3をプライベートネットワーク経由で接続するには、エンドポイントを作る必要がある。あと、セキュリティグループの設定も適切にしなければいけないと思う。

■EC2からyumのupdateができない
yum のupdateはAmazon Linux2のリポジトリにアクセスする必要がある。
これは、S3の中に入っている。
よって、エンドポイント経由でS3にアクセスできなければいけない。
エンドポイントがなければ、エンドポイントを作成するところから

①エンドポイントの作成
 サービスカテゴリ AWSサービス
 サービス名で.s3で検索

エンドポイントを作成したいVPCを選択。
同時にルートテーブルも選択する必要がある。

あとは、以下の手順だと思う。
https://qiita.com/polarbear08/items/4031e5f8e494e8cf3fee

→ただ、普通にインターネット経由でyumができると思う。
たとえば、ElasticIPを割り当てて、igwをきちんと設定すれば、yumができた。
このあたりはもう少し調査が必要

■AWSで動画配信
S3を使うとか、AWS CloudFrontを使う方法もあるが、単にEC2でもできる。
送信元IPアドレス制限はセキュリティグループでやればいいだろう。
①動画のアップロードは以下
http://sm.seeeko.com/archives/21206156.html
②HTML5の設定は以下
http://sm.seeeko.com/archives/23327887.html

■IAMによるユーザやロール、ポリシーの管理
・IAM(アイアム)ユーザ
・IPアドレスでの接続制限も可能
・これを使うと、複数人でAWSのインスタンスをセキュリティを保って管理ができる。
IAMユーザを作成し、IAMグループに所属させる。
IAMグループにはIAMポリシーを設定する。

■AWSでDB構築
Multi-AZにしておくと冗長性としては便利だろう。
インスタンス名とユーザ名/PWポートなどの設定
バックアップに関する設定
時刻設定

・DBをEC2から接続
EC2からDBに接続するために、mysqlを入れておく必要がある。
セキュリティグループで、設定の許可
mysql -h  Endpoint -u -p
show databese

■LB
名前が変遷してきたと思う。ELBがメジャーかな。ALBやNLBは後から追加かも。
メニューの「ロードバランサ―」から作成できる。
多くは、Application Load Balancerか、Network Load Balancerを選択すると思う。
・ロードバランスだけでなく、WAFなどのセキュリティ機能、SSLの終端も可能。


・監視はCloudWatch

・自動でスペックを上げるには、AutoScaling

・システムログ
「インスタンスの設定」>「システムログの取得」から確認できる。

・誤作動による削除を防ぐ
インスタンスの一覧から「インスタンスの設定」で「終了保護を変更」によって、誤作動による終了(インスタンスの削除)を防げる。

・EBSボリュームの暗号化
AMIを作成するときに、暗号化のチェックボックスがある。

・サーバの脆弱性診断
 自分で診断する場合(たとえばNessusなど)、AWSへの事前申請は不要になった
 Amazon Inspectorによって、テンプレートによる診断をしてくれる。

・プライベートLink
月5000円くらいだろう。

■インスタンスでボリュームを拡張
たとえば、8GBのディスクを16GBに拡張する
まず、インスタンスにアタッチされているEBSボリュームを探す。何かいい方法はないか。
今は一つ一つ見ていくしかない。
そこで、アクション>ボリュームの変更 でサイズを変更する。

しかし、これだけではダメで、Linux上でコマンドを操作する。

https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/recognize-expanded-volume-linux.html?icmpid=docs_ec2_console

公式マニュアルが↑なので、その通りにやるのであるが、よくわかっていない。

[root@ip-19x]# df -hT
Filesystem     Type      Size  Used Avail Use% Mounted on
devtmpfs       devtmpfs  3.9G     0  3.9G   0% /dev
tmpfs          tmpfs     3.9G     0  3.9G   0% /dev/shm
tmpfs          tmpfs     3.9G  484K  3.9G   1% /run
tmpfs          tmpfs     3.9G     0  3.9G   0% /sys/fs/cgroup
/dev/xvda1     xfs       8.0G  4.7G  3.4G  58% /
tmpfs          tmpfs     798M     0  798M   0% /run/user/1000
tmpfs          tmpfs     798M     0  798M   0% /run/user/0
[root@ip-19x]# lsblk
NAME    MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
xvda    202:0    0  16G  0 disk
mqxvda1 202:1    0   8G  0 part /

[root@ip-19x]# growpart /dev/xvda 1
CHANGED: partition=1 start=4096 old: size=16773087 end=16777183 new: size=33550303 end=33554399
[root@ip-19x]# lsblk
NAME    MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
xvda    202:0    0  16G  0 disk
mqxvda1 202:1    0  16G  0 part /

[root@ip-19x]# xfs_growfs -d /
meta-data=/dev/xvda1             isize=512    agcount=4, agsize=524159 blks
         =                       sectsz=512   attr=2, projid32bit=1
         =                       crc=1        finobt=1 spinodes=0
data     =                       bsize=4096   blocks=2096635, imaxpct=25
         =                       sunit=0      swidth=0 blks
naming   =version 2              bsize=4096   ascii-ci=0 ftype=1
log      =internal               bsize=4096   blocks=2560, version=2
         =                       sectsz=512   sunit=0 blks, lazy-count=1
realtime =none                   extsz=4096   blocks=0, rtextents=0
data blocks changed from 2096635 to 4193787
[root@ip-19x]# yum install xfsprogs
Loaded plugins: extras_suggestions, langpacks, priorities, update-motd
amzn2-core                                               | 3.7 kB     00:00
215 packages excluded due to repository priority protections
Package xfsprogs-4.5.0-18.amzn2.0.1.x86_64 already installed and latest version
Nothing to do
[root@ip-19x]# resize2fs /dev/xvda1
resize2fs 1.42.9 (28-Dec-2013)
resize2fs: Bad magic number in super-block while trying to open /dev/xvda1
Couldn't find valid filesystem superblock.
[root@ip-19x]# resize2fs /dev/xvda
resize2fs 1.42.9 (28-Dec-2013)
resize2fs: Device or resource busy while trying to open /dev/xvda
Couldn't find valid filesystem superblock.

※こんな感じでエラーになったが、ディスクが拡張されている気がしている。

[root@ip-19x]# df -h
Filesystem      Size  Used Avail Use% Mounted on
devtmpfs        3.9G     0  3.9G   0% /dev
tmpfs           3.9G     0  3.9G   0% /dev/shm
tmpfs           3.9G  492K  3.9G   1% /run
tmpfs           3.9G     0  3.9G   0% /sys/fs/cgroup
/dev/xvda1       16G  4.7G   12G  29% /
tmpfs           798M     0  798M   0% /run/user/1000
tmpfs           798M     0  798M   0% /run/user/0
[root@ip-19x]#

1.S3とは
(1)基本
S3(Amazon Simple Storage Service)は、AWSのストレージサービス。
もちろん、EC2インスタンスのディスク上にデータを貯めこんでもいいが、料金が圧倒的に安い。かつ、冗長性・信頼性なども確保されている。

(2)Static Web Hosting
本来はストレージだが、これを使うと激安で静的ページを作成、運用できる
https://blog.web.nifty.com/engineer/2401

2.EBSとの違い
EBS(Amazon Elastic Block Store)は、EC2のインスタンスが持つハードディスクと考えるといいだろう。ただし、EC2インスタンスとは切り離されているので、外付けハードディスクみたいな位置づけだろうか。
EBSは、1つのインスタンスにしか接続できない。

3.S3を使ってみる
(1)S3に動画をUPload
①S3にてバケットを作る
・バケット名(S3でユニーク)だけを入れて、次へ。
※独自ドメインで見えるようにするには、その独自ドメインにする必要があったかと思う。
・詳細な設定ができるが、2つ先のページの「パブリックアクセスをすべてブロック」を外した。こうしないと、公開できないようだ。 「バケットを作成」を押した。
②作成したバケット名をクリック
・ファイルをUPloadする
・ファイルをクリックし、「概要」タブで「公開する」を押す。
・下の方にURLがある。恐らく、バケット名+AWSのドメインになっている。これをクリックして開けるかを確認しよう。
③フォルダを作る
見てわかると思うが、フォルダなども自由に作れる。

(2)S3のファイルとの連携
AWSのSDKを使うと便利だろう。いろいろできるみたいだ。

(3)Webサーバとして動かす
仮にindex.htmlを置いても、URLをクリックすると、そのソースが表示されるだけなはず。
→実際にはソースじゃなくて、きちんと動いた。
Webサーバとして動かすには、Static website hostingという機能を有効にする。こうすると、Webサーバのように、デフォルトページやエラーページなども設定できる。便利だ。

(3)CloudFrontの設定
・AWSの管理画面でCloudFrontのページを開く
・Create Dsitributionを押す
・Webにある「Get Started」を押す
・Origin Domain Nameに作成したS3バケットを指定(自動で出てくる)して、右下の青いボタン「Create Dsitribution」をおす
・少し時間がかかるのでDeploydになるまで待つ。
以下のように、クラウドフロントのドメインからアクセスできるようになる。
d2hw1td8poatv0.cloudfront.net/get1.mp4
ただし、動画がダウンロードできてしまう。

https://qiita.com/NaokiIshimura/items/46994e67b712831c3016
http://www.dcom-web.co.jp/lab/cloud/aws/serverless_video_streaming_delivery_using_cloudfront_and_s3

★S3 の Static Website Hostingでも動画配信は可能。ただ、やりたいことは、ダウンロード禁止だが、どうやら難しそうだ。

■AWSのLinux(Ubuntu)にGUIでアクセスする

AWSのLinux(Ubuntu)にデスクトップ環境を作り、WindowsのxrdpでGUIでアクセスする

CentOSだといろいろ大変だった。(後述)

Ubuntuの場合は、ハードルが低い。たとえば、以下でできる。
https://qiita.com/osugizmo/items/21578272ae2db05ab001

#ユーザ(user1)を作る
adduser user1
#デスクトップ環境のインストール ※すごく時間がかかる。
sudo apt -y install ubuntu-desktop

動かすだけなら、上記URLにあるxsessionファイルの作成などは不要だと思う。EOFのところが、終わり方がわからなかった。
ただ、GUIがとても重い。インスタンスタイプを大きくしないとしんどいと思う。


■以下はメモ。途中で挫折というか、あきらめた
AWSのLinux(CENTOS系)にGUIでアクセスする

①デスクトップ環境 MATEを入れる 
https://aws.amazon.com/jp/premiumsupport/knowledge-center/ec2-linux-2-install-gui/

※本当はGNOME Desktopを入れたかったが、入らなかった
sudo amazon-linux-extras install mate-desktop1.x
sudo bash -c 'echo PREFERRED=/usr/bin/mate-session > /etc/sysconfig/desktop'

②ユーザを作る
以下にあるxrdpの設定を行う。
https://qiita.com/yamada-hakase/items/a8efe626f598c5eb6f8c

③接続する
上記で作ったユーザのIDとPWを入れればログインできる

④日本語化
以下でできる?
https://dev.classmethod.jp/articles/amazon-linux-2-desktop-mate/
→ログアウトしてログインしたら日本語化された。すごい。

⑤ブラウザを入れるのは難しい
以下の後半に書いてあるけど、手順が少し複雑そうだ。

https://aws.amazon.com/jp/premiumsupport/knowledge-center/ec2-linux-2-install-gui/

以下に結構まとまっています。
https://sysdig.jp/blog/26-aws-security-best-practices/

(1)Nortification service
 何かあったら、メールで通知するサービス。まずはメールアドレスを登録する

(2)AWS Config Rules
 設定内容を自動でチェックして修正する。準拠ルールに従うなどもできる。たとえば、ボリュームが暗号化されているか、パブリックから読み取りできるか、例は以下
https://docs.aws.amazon.com/ja_jp/config/latest/developerguide/managed-rules-by-aws-config.html
 費用はルールの数によって変わる
https://dev.classmethod.jp/articles/recommend-config-rules-for-all-user/

(3)CloudTrail 
アカウントのログを取る。しかし、インスタンスの中で起こっているログインなどイベントは残らない。OS側のログで確認。EC2インスタンスを、AWSのコンソールやCLIなどで操作した場合のログ。デフォルト無効。10万イベントあたり2ドルなどの費用がかかる。
外部の攻撃も内部による設定ミスも検知する。

(4)GuardDuty
VPC Flow Log、DNSログ、ClowdTrailEvent、S3Data Eventsを受け取り、怪しいと思うのを通知?(不正通信) これらは明示的にONにしなくてもいい。GuardDutyをONにすると、裏で自動で取得する。
たとえば、portScan 悪意のあるIPや、不正なポートへの、ブルートフォース攻撃
 ただ、検知だけでブロックはできないので、ClowdWatchなどを連携する必要がある。
※WAFとの違いは?
 WAFはインスタンスより外側で検知する。また、レイヤがレイヤ7のアプリケーションレベルが主。GuardDutyはインスタンスに届いたパケットなど。

(5)Macie
S3の中身をチェックする。S3のログを見て、チェックする(機密情報保護)。なので、S3を契約していないなら不要。

(6)AWS Security HUB
 複数のログの集約して、アラート(一元管理)ができるので、可視性が高まっている(マルチリージョンも対応)。別に、GuardDutyと比べて、画面が見やすいわけではないみたい。

(7)AWS Lambda

(8)CloudWatch
AWS Lambdaと連携して、攻撃を検知したらフィルタルールを書いて、通信をブロックすることもできる。

(9)VPC Flow Logs
 VPC内のトラフィックのログ(FlowLog)を取る。ENI単位で取得する。無料だが、取り込み先のS3の料金がかかる。おそらくサンプリングでログを取っているはず。

(10)別途
・AWS NetworkFirewall(IDSやWebフィルタ)
・AWS WAF
もあり、これらのログはSIEMを使って分析するのがいいだろう。


■まずは用語の確認
(1)ロケーションなど
・リージョン:日本だと東京と大阪(2021までは部分的)。
 + VPC:
  + AZ(アベイラビリティゾーン):リージョンの中のDC群の集まり
   + サブネット
    + EC2インスタンス:仮想サーバ

以下のサイトがわかりやすい
https://avinton.com/academy/aws/

また、リージョンとAZ、データセンターの関係は、以下の図がわかりやすい。
大阪リージョンには3つのAZがあり、各AZは複数のデータセンターで構築されている。
https://aws.amazon.com/jp/local/osaka-region/

どのリージョンを選ぶかであるが、法律面で問題がなければ、ロケーション的に近いところが、遅延が少なくておすすめである。遅延の値に関しては、以下でテストできる。
http://awsspeedtest.xvf.dk/
これは聞いた話だが、北米の2番目か何かが最も進んでいて、機能やOSなどのバージョンも新しいらしい。まあ、通常の利用であれば、それほど変わらないとは思うが。

(2)ネットワーク
・IPアドレスには、ElasticIP、パブリックIP、プライベートIPがある。パブリックIPは再起動するたびにIPアドレスが変わる。
・ネットワークインターフェースはENI(Elastic Network Interface)。

■AWSでは、基本的な構成は決まっている。
・出口はIGW(インターネットゲートウェイ)
・VPCの中にAZを2つ作る。(冗長化)
・PublicセグメントとPrivateセグメントに分ける(サブネットで)
・インターネットに接続するには、NAT-GWをそれぞれのAZに配置
・Workspaceなどは、両方のAZに足を出す。(これは必須)。
・企業に接続する場合は、VPN-GWで接続する
・必要に応じてELBでロードバランスする

いくつかのサイトがあるが、どこでも似たような構成図を描いている。
https://avinton.com/academy/aws/
https://www.ntt-tx.co.jp/column/dojo_aws_blog/20171017/


▼サブネット間の通信
AWSでは、サブネット間の通信がデフォルトでは通信可能。サブネットでACLを使うにはNACL

■パブリックIPの割り当て
インスタンス作成時にVPCやサブネットを選択するが、そのときに「自動割り当てパブリック IP」を有効にする。
こうしないと、インターネットからこのインスタンスに接続できない。
ただ、あとからElasticIPを割り当てることは可能。あとからパブリックIPを付与できるかは要調査。

公開サーバに、ドメイン名でアクセスできるようにする。

■Route 53について
Route 53というサービスがあり、ドメインの取得とDNSサーバが運用できる。
他で取得したドメインでも使えるはず。
https://qiita.com/Yuki_BB3/items/effdf1bb38263bfef82a
ただ、別のこの機能を使わなくてもElastic IPアドレスと他のDNSサービスで
取得したドメインおよびドメインの設定で問題ないと思う

では、AWSでドメインを取得、管理するメリットはないのか?

やはり、メリットはある。コストは比較していないが、連携機能である。
AWSが割り振るFQDNは変えられないので、独自ドメインを取ったレジストラにおいて、CNAMEでAWSのFQDNを指定することで、独自ドメインを使うことができる。ただ、問合せの回数が多くなり、若干の無駄がある。だから、取得したドメインのNSレコードやAレコードなどを管理できるが、このとき、Aレコードで「エイリアス」を選び、AWSのインスタンスを直接選ぶことがいい方法だったりする。
※ドメイン取得からすべて、AWSでやれってことだね。

■ドメインの取得
まずは、ドメインを取得しよう
momiji.pw

■Elastic IP
(1)概要
Elastic IPアドレスを取得して、固定的にIPアドレスを使う。
使わなくなったり、EC2が実行中でない場合には課金される。
→使わなくなったら、廃止しましょう。
※Elasticとは、弾力がある、という意味

どんな利点があるかというと、サーバを再起動したりしてもIPアドレスが変わらない。
また、IPアドレスを取得しておくと、その割り当てを柔軟に変更できる。途中でインスタンスを変更することも可能。便利だ。

(2)設定
・EC2のメニューの左メニュー、「ネットワーク&セキュリティ」>Elastic IP
「Elastic IPアドレスの割り当て」
・2つの選択肢から、「Amazon の IPv4 アドレスプール」を選択して「割り当て」
すると、パブリックIPアドレス(=グローバルIPアドレス)が割り当てられる
→このIPをメモしておこう18.177.177.50
・次に、割り当てたパブリックIPアドレスをEC2のインスタンスに割り当てる。「Elastic IPアドレスの関連付け」ボタンを押す。「インスタンス」を選択、該当するインスタンスを適用する→関連付けるをクリック
・EC2のインスタンスで、先ほど割り当てたインスタンスに、Elastic IPが割り当てられているかを確認する
※Elastic IPアドレスもリージョン単位で管理されている。

(2)-2 解放するには
該当する「Elastic IP」をクリックで選択して、「Elastic IP アドレスの関連付け解除」
これにより、インスタンスに割り当てられていたIPアドレスが元に戻る
・また、該当する「Elastic IP」をチェックボックスを入れて選択、「アクション」
から「Elastic IPの解放」。これで、Elastic IPが完全に開放された。

(3)DNSの設定
ドメインを取得したDNSレジストラで、Aレコードを設定
a www 203.0.113.124 ←Elastic IPアドレス

(4)試してみる
きちんと、取得したドメインでWebサーバにアクセスできた

(5)メモ Route 53を使わずに実施できたのだが、Route 53のメモ。
ホストゾーンの作成というのがあるが、これが何をしているのか、よくわからない。
ホストゾーンの作成を行わずにうまくいけた気がする。気のせいか。
参考であるが、ホストゾーンの作成は以下。
AWSにて、サービス>ネットワーキングとコンテンツ配信>Route 53
選択するメニューらしきが出たら「ドメインの登録」でいいと思う
左のメニューから、「ホストゾーン」「ホストゾーンの作成」をクリックする
「ドメイン名」を入れる。「作成」ボタンを押す

###(1)概要
CloudFormationでは、yaml形式やjson形式でテンプレートを作り、それを読み込ませることができる。
見比べるとわかるが、yamlの方が簡単である。
注意点 _などの記号を使えない。

###(2)作成
❶設定ファイルの作成
・事前に、読み込むファイルを作成する。今回は、createVPC.yamlというファイルにした。
中身は以下で、タグに名前を付けている。

Resources:
########## create VPC
  VPC:
    Type: AWS::EC2::VPC
    Properties:
      CidrBlock: 192.168.0.0/16
      Tags:
      - Key: Name
        Value: 192.168.nw
      

❷AWSの設定
AWSにて、CloudFormationのコンソールを開く
・「スタックの作成」→「テンプレートの準備完了」→「テンプレートの指定」→「テンプレートファイルのアップロード」にて、先ほど作成したyamlファイルをUploadする。
・スタックの名前をつけておこう。createVPCにした。
・次へで進み、完了までいく。
・すると、テキストで書いたVPCが作成されているのが確認できる。

❸詳細
もう少し細かく作成する
Resources:
########## create VPC
  VPC:
    Type: AWS::EC2::VPC
    Properties:
      CidrBlock: 192.168.0.0/16
      Tags:
      - Key: Name
        Value: 192.168.nw
########## Create IGW
  IGW: 
    Type: "AWS::EC2::InternetGateway"
    Properties: 
      Tags: 
        - Key: Name
          Value: 192.168.igw
########## Attach IGW
  AtIGW: 
    Type: "AWS::EC2::VPCGatewayAttachment"
    Properties: 
      InternetGatewayId: !Ref IGW
      VpcId: !Ref VPC 
########## Create Subnet1
  Subnet1: 
    Type: "AWS::EC2::Subnet"
    Properties: 
      AvailabilityZone: "ap-northeast-1a"
      CidrBlock: 192.168.0.0/24
      VpcId: !Ref VPC 
      Tags: 
        - Key: Name
          Value: 192.168.0
続きを読む

**1 環境設定
***(1)AWS CLIのダウンロードとインストール
・手順は以下を見よう
https://docs.aws.amazon.com/ja_jp/cli/latest/userguide/install-cliv2-windows.html

・まず、インストーラをダウンロード
 https://awscli.amazonaws.com/AWSCLIV2.msi

***(2)WindowsのPCで起動
・コマンドプロンプトで、アプリが入っているパスに移動(パスを設定してもいいと思う)
cd C:\Program Files\Amazon\AWSCLIV2 

・以下のコマンドで、正常にインストールされているかの確認
aws --version

***(3)AWSでIAM画面からキーを取得
・AWSのIAM画面から、IAMユーザーを選択してクリック。
別の画面が開くので、認証情報タブ>アクセスキーの作成。すると、IDとシークレットアクセスキーが表示される。

***(4)WindowsのPCからAWSに接続
・aws configureでAWSに接続
C:\Program Files\Amazon\AWSCLIV2>aws configure

***(5)LinuxからAWSに接続
AWS上のインスタンスからでもできるから便利だ。
Linuxが楽かも。Windowsのコマンドプロンプトでは面倒だ。
❶初期設定
・AWS CLIができる状態かを確認しよう
#aws --version
aws-cli/1.18.107 Python/2.7.18 Linux/4.14.193-149.317.amzn2.x86_64 botocore/1.17.31
上記のようなMessageが出ればOK

・AWS上のインスタンスで、以下を実行
aws configure

AWS Access Key ID [None]: 取得したAccess Key
AWS Secret Access Key [None]: 取得したSecret Access Key
Default region name [None]: ap-southeast-2 ←シドニーの場合
Default output format [None]: json ←見やすいのでお薦め

❷.awsファイル
すると、.awsファイルが作成される。設定を変更する場合は、aws configureをやり直せばいいと思う。
# pwd
/root/.aws
# ls
config  credentials
# cat  config
[default]
output = json
region = us-east-1

❸設定確認
・現在のVPCを確認する
aws ec2 describe-vpcs

・ サブネットの確認
aws ec2 describe-subnets
※helpを付けると、実行できるコマンドの一覧が表示される。
aws ec2 help 

・リージョンの指定
Linuxの場合、.awsのファイルを変更すればいい気がする。Windowsの場合、以下をやってみたが、あまりうまくいかなかった。
一時的に変えるには以下だと思う。
setx AWS_DEFAULT_REGION us-west-2
ただ、aws configureをやり直せばいいと思う。デフォルト値は入っているので、変更するところ以外はEnterで入れてくれる。
または、以下のように、--region を指定することで、該当リージョンで設定ができる。
aws ec2 describe-instances --region us-west-1

***(6)CLIからVPCやサブネットを作る#1
https://docs.aws.amazon.com/ja_jp/vpc/latest/userguide/vpc-subnets-commands-example.html

色々便利なのだが、作成したVPCのIDやルートテーブル情報のIDを使って次のコマンドを入力する。なので、一気に流し込みができないのが残念だ。

0)リージョンの指定
aws configure でリージョンを指定
たとえば、シンガポールなら ap-southeast-1

1)VPCの作成
aws ec2 create-vpc --cidr-block 192.168.0.0/16
VPCの確認
aws ec2 describe-vpcs

2)サブネットの作成 ※恐らくすべて同じAZに配置されるはず
aws ec2 create-subnet --vpc-id vpc-0exx --cidr-block 192.168.0.0/24
aws ec2 create-subnet --vpc-id vpc-0exx --cidr-block 192.168.1.0/24
aws ec2 create-subnet --vpc-id vpc-0exx --cidr-block 192.168.2.0/24

3)インターネットゲートウェイの作成
aws ec2 create-internet-gateway

4)ルートテーブルの作成
aws ec2 describe-route-tables

5)セキュリティグループの作成や修正
セキュリティGを作ることもできるが、作るだけは手動の方が楽な気がする。
セキュリティGは、VPCごとに作るので、作る場所を間違えないように

❶状態確認
以下で確認できる。
aws ec2 describe-security-groups 
ただ、情報が多すぎるので、セキュリティグループのIDを指定すると、いいだろう。
aws ec2 describe-security-groups --group-id xxx

❷設定の追加
以下はIPアドレスだけを指定して、全てのトラフィックを許可する場合。protocol はTCPでもUDPでもないので、-1を指定。
aws ec2 authorize-security-group-ingress --group-id xx --protocol -1 --cidr 1.1.1.2/32

以下は、シェルを組んで、AWSのセキュリティGを流しこみ。
許可するトラフィックをグローバルIPアドレス単位で許可する。プロトコルなどは指定しない。
前提として、list.txtに、設定するIPアドレスの一覧を入れる。最後のIPアドレスに改行コードは入れなかった。

#!/bin/bash
cat ./list.txt | while read line
do
  aws ec2 authorize-security-group-ingress --group-id xxxx --protocol -1 --cidr ${line}/32
done

これができると、なかなか便利である。

***(7)CLIからVPCやサブネットを作る#2 シェルで流し込み
AWKでやってる事例も見つけた。
https://www.simpline.co.jp/tech/aws-cli%E3%81%A7vpc%E4%BD%9C%E6%88%90/

#事前にJSON形式の処理をするために、jqをインストール
yum -y install jq

#### 1.VPCの作成
#作成するVPCのCIDRを定義
BLOCK='192.168.0.0/16'

#VPCを作成し、VPC_IDを変数に入れる
VPC_ID=`aws ec2 create-vpc --cidr-block ${BLOCK} | jq -r '.Vpc | .VpcId'`

#VPCのNAMEを作成
aws ec2 create-tags --resources ${VPC_ID} --tags Key=Name,Value=${BLOCK}

#### 2.インターネットGWの作成
#IGWを作成し、IGW_IDの変数に入れる
IGW_ID=`aws ec2 create-internet-gateway | jq -r '.InternetGateway | .InternetGatewayId'`

#IGWのNAMEを作成
aws ec2 create-tags --resources ${IGW_ID} --tags Key=Name,Value=igw-${BLOCK}

#VPCにアタッチ
aws ec2 attach-internet-gateway --internet-gateway-id ${IGW_ID} --vpc-id ${VPC_ID}

#### 3.ルートテーブルの作成
#デフォルトのルートテーブルを確認し、RT_IDの変数に入れる
RT_ID=`aws ec2 describe-route-tables --filter Name=vpc-id,Values=${VPC_ID} | jq -r '.RouteTables[].RouteTableId'`

#RTのNAMEを作成
aws ec2 create-tags --resources ${RT_ID} --tags Key=Name,Value=rtb-${BLOCK}

#デフォルトルートを設定
aws ec2 create-route --route-table-id ${RT_ID} --destination-cidr-block 0.0.0.0/0 --gateway-id ${IGW_ID}

#### 4.サブネットを作成
#VPCに対してサブネットを作成し、変数SUBNET1_IDに入れる。
SUBNET1_ID=`aws ec2 create-subnet --vpc-id ${VPC_ID} --cidr-block 192.168.0.0/24 | jq -r '.Subnet | .SubnetId'`

#サブネットのNAMEタグを作成
aws ec2 create-tags --resources ${SUBNET1_ID} --tags Key=Name,Value='subnet 192.168.0.0'

(1)Amazon Workspacesの概要
AWSが提供するVDI環境。
料金は月単位か時間単位で選べる。月の場合、導入時は日割り。ただ、途中解約でも月末までの費用であるはずだ。
以下の説明がわかりやすい。
https://www.youtube.com/watch?v=5h5mT1dabgg&feature=youtu.be

説明資料
https://d1.awsstatic.com/webinars/jp/pdf/services/20190226_AWS-BlackBelt_Amazon_WorkSpaces.pdf
https://pages.awscloud.com/rs/112-TZM-766/images/TOKAI_20190614.pdf

・Johnson-johnsonやFacebookなどでは大規模にWorkspacesを使っている。安いし、すぐに構築できるし、いつでも止められるし、固定資産を持たなくていいし、拡張も簡単で、最初にサイジング設計も不要。まあ、便利だと思います。
・インターネット直結なので、PCからのインターネットがかなり早いらしい。

(2)認証に関して
・インターネットからAWSの認証Gatewayに。そこからAD Connector(ADをProxyするようなもの)に接続し、社内のADと連携できる。AD Connectorに関しては後述。
・高速セットアップだと、SimpleADで認証基盤が作成される。
・閉域接続も可能。
・認証はMFAによるOTPなどの二要素に対応。ハードウェアトークン、ソフトウェアトークンでもログイン可能。SMS認証は準備中かな。また、クライアント証明書による認証も可能。生体認証はWorkspacesの機能ではできなかったはず。
・VDIのサーバは、WindowsSever2016。アプリをインストールする際には、OSの依存がある。
・PCoIPというプロトコルで画面転送。帯域幅は300kbps~ →今後はクラウド専用のWSP(Workspaces Streaming Protocol)を使うのかな?
・Officeはオプションで利用できる。15ドル/月。BYOL(ライセンスの持込)も可能
・ソフトをインストールしたものをまとめてイメージにすることも可能。
・ログインはAWSのクライアントツールからのログインも可能。
・ChromeBookをシンクラ端末としても使える。基本的には、PCoIPができれば利用できるような気がする。

(3)設定方法
詳細なマニュアルは以下
https://docs.aws.amazon.com/ja_jp/workspaces/latest/adminguide/workspaces-ag.pdf

https://www.ipentec.com/document/amazon-aws-create-amazon-workspaces

・・・作ってみよう
・リージョンは東京を選ぶ。そうしないと、日本語OSが出てこない。しかし、東京リージョンよりバージニア北部などの方が少し安い。
・AWSの検索窓でworkspaceと入力
・とりあえず作ってしまおう。初回は高速セットアップが可能。だが、2回目は出てくれないのが残念。以下に簡易な情報がある。
http://c.itdo.jp/technical-information/aws-cloud/amazon-workspaces/
①ディレクトリの選択 → 新しいディレクトリの作成
 ディレクトリは複数選べるが、まずはAWSのローカルに簡易な認証サーバを建てよう。なので、SimpleADを選ぶ。AD連携もできるはずだが、とりあずはしなかった。
 ・組織名:一意の名をつける必要がある。test12345とか、適切につける。
 ・ディレクトリのDNS名はドメイン名 test.local など
  VPCやサブネットを選択
  ステータスが Requested →どうやら少し時間がかかるようだ。Creatingを経てActive どうだろう。5~10分くらいってとこかな。
・その後、作成したディレクトリを選んで「アクション」>「登録」をする。ここで、VPCのサブネットの選択や、Workdocsを使うかなどを選べる。
#ディレクトリの詳細設定について
 ・ディレクトリで、アクション>詳細の更新 にて、アクセス制御のオプションに、クライアントの証明書認証などが設定できる。
 ・SimpleADにIPアドレスを割り当てることもできる(はず)
 ・「インターネットへのアクセス」において、無効化すると、インターネットには出られないようにもできる。※タイミングの関係で、すぐには反応しないときがあった。が、しばらくすると、出られなくなった。LANとして認識させ、VPC内にあるWorkspaceもサーバ群もすべて同一のインターネットの出口にするには、VPCにNAT-GWの設定をして、パブリックIPを割当て、インターネットに接続させる必要がある。
②Workspaces の起動 を押す
 ディレクトリは作成したものを使う。
 セルフサービスアクセス許可の有効化 →WorkSpaces の再構築と、ボリュームサイズ、コンピューティングタイプ、実行モードの変更をユーザーに許可。普通はNoかな
 Amazon WorkDocs の有効化 →結構便利なので、Yesにした
③ユーザを追加する →SimpleADに追加されるはず
 ユーザを作成するが、そのときにメールアドレスを入れる。Workspacesができるとそこに連絡がいくので、メールアドレスは間違えないように。
あとから招待状を再度送ることも可能。Workspaceを開き、該当ユーザに「アクション」「ユーザの招待」。
 バンドルを選ぶ。 日本語にしておこう
 無料枠のAutoStopを使う
④招待状が届くのでWorkspaceをたちあげる
 まず、ユーザのPWを更新する

⑤Windowsの画面が立ち上がる。
 便利だ。

【ユーザの処理】
・AWSから送られてくる招待状のURLにアクセス。
・PW(複雑さを満たす)を入れて、ログイン。
・WorkspaceConsoleをダウンロートする。対応OSは、MACやiOSもある。ただし、iPhoneはダメだった。
・登録コードを入力し、その後、ユーザ名とPWを入れて接続
・VPCの中にPCが接続されている。インターネットにも接続が可能。
※VPCに関しては、ディレクトリをみれば分かる
・IPアドレスをみると、172.16.のプライベートと、198.のグローバルが割り振られている。グローバルはWorkspaceを接続するためのもの。
※それと、Windows2016サーバで設定されているので、IEのセキュリティ強化が入っている。
それを外したいけど、サーバそのものの設定はどこからいけるんだろう。→Firefoxが使いやすい。
イメージ作成はどうやってやるんだろう。

【サーバを構築してみよう】
・同じVPC内にEC2のサーバを立てればよい。ただ、VPCの中にあるので、外部から接続させようとするには工夫がいるだろう。
・とりあえず、ユーザのPCにTeratermを入れ、秘密鍵も入れ込んで、SSHで接続した。
・ただし、VPCの中のサーバは、そのままではインターネットに接続できなかった。→以下にも記載しているが、「送信元/送信先の変更チェック」を「無効」にすることは必須だと思う。→有効で接続できた。
http://www.viva-fortigate.com/archives/82723794-private.html
・とりあえずLinuxサーバだったので、デフォルトGWとDNSだけ、ローカルのPCと同じものを割り当てた。→たぶん違うね。そう、NWの設計を正しくする必要がある。正解は以下。
http://sm.seeeko.com/archives/23630828.html

(4)ファイル共有としてのWorkDocs
Workspaceを起動してデスクトップ端末にログインすると、Install Amazon WorkDocsというショートカットが表示されている。これをダブルクリックすると、自動でパスを作ってくれる。
D:\Users\user1\WorkDocs
よって、これでファイルサーバのアクセスは可能だ。ファイルを操作する場合には、基本的にはデスクトップにインストールされたアプリを使う。このとき、ファイルをロックして2重更新にならないようにすることも可能(便利だ)
それ以外には、メールと、社内システムにアクセスできれば、大半の業務ができることになるだろう。
workspaceを起動すると、自動でWorkDocsが割り当てられる。https://xxx.awsapps.com/workdocs/などの領域をファイルサーバとして管理するのであるが、xxxは利用企業ごとに異なる。AWSのコンソールにてWorkDocsをみると、自動作成された名前がわかるだろう。

(5)企業ネットワークと接続
VPNで接続する。FortigateとVPN接続する場合は、以下です。
http://www.viva-fortigate.com/archives/83234260.html

(6)雛形を作ってイメージ配信
・イメージの作成
 社員で共通の雛形を作り、その共通雛形を社員で共有することが多いであろう。まずはひな形を作成するために、WorkspacesでOSを起動したあと、作りたいようなソフトやファイルを設置する。
 WorkspacesのWorkspacesから作成した雛形となるWorkspacesを選択して、アクションからのイメージの作成(最大45分かかるとある)
※進捗は「イメージ」で該当イメージを開くと、進捗がたとえば35%などと表示される。
・バンドルの作成
 Workspaces>イメージ で作成したイメージを選択肢、アクションから「バンドルの作成」
 バンドルタイプを「バリュー」などを選び、説明も入れ(必須)、ボリュームサイズを必要なサイズ(たとえば10(G))を入れて、バンドルの作成
・イメージからユーザのWorkspacesの作成
 Workspacesで「Workspacesの起動」
 ディレクトリとして、作成したADを選択
 ユーザの特定にて、「検索」を押すと、ADのユーザを探してくれる。ユーザを選択して「選択項目を追加」→「次のステップ」
バンドルとして、下の方にある「Workspacesバンドルの割り当て」を選ぶ。作成した名前のバンドル名を選択しよう。
※実行モードのAutoStopなどは、すでに組み込まれているので選べなくなっている。

(7)その他もろもろ
・PCからWorkspaceのポータルにログインするときに「設定」から言語を日本語に変更できる。
・Workspacesにもセキュリティグループが存在する。pingなど、標準的な通信は許可されているが、OSのパーソナルファイアウォールではなく、セキュリティグループで設定することが推奨になっているはずだ。
・ログインするとVPCのIPアドレス以外に198.のIPアドレス(イーサネット0かな)がある。これは、VPCなどとは無関係のAWSの裏のネットワークにある管理IFで必須である。PCがWorkspaceに接続するのも、この裏ネットワークで接続する。(この裏口ネットワークにセキュリティの脆弱性があったら大変ですよね)
 以下のサイトのP24にアジア(東京)の場合は、198.19のIPアドレスが使われることが記載されている。https://docs.aws.amazon.com/ja_jp/workspaces/latest/adminguide/workspaces-ag.pdf
・キーボードが102になっているので日本語109に変更すべき
https://engineer.dena.com/posts/2020.01/aws-workspace/
・パッチの管理など(つまりWorkspacesのPCのパッチを一元的にバージョンアップするなど)は、Workspacesの機能ではなく、ADやWSUSなどの別の機能で実現する。
・NWについて補足
 インターネットに出るには、パブリックIPを割り当てなければいけない? →恐らくYes 
 でも、何もしなくても、Workspaceがインターネットに出ることができる。→ディレクトリの設定で、アクション>詳細の更新 「インターネットへのアクセス」において、有効化になっている。これにより、自動でパブリックIPが割り当てられているからインターネットに出ることができる。 無効にすればとりあえずは出られなくなる。 
 私の考えとしては、NAT-GWなどを設定して、ここの設定ではない(=AWSが用意してくれた裏口ではない)ところからインターネットに接続させることがあるべき姿かなあと。詳しくは以下。
http://sm.seeeko.com/archives/23630828.html

(7)AD Connector
AWSの認証を、既存のADサーバに連携することがよくあるだろう。設定はとても簡単である。解説は以下であるが、AD側では、ADサーバ側でユーザを作成し、権限の委譲を行う必要がある。以下のサイトの通りでできる。
AWS側の設定としては以下
・ディレクトリタイプ:AD Connector、スモール
・VPCとサブネット →このとき、AD Connectorは2つのAZ(サブネット)を選ばされる。WorkspacesのPCは2つのAZで均等に分散されて配置される。AD ConnectorのNIC(なのかサーバかは不明)の一方がダウンしても、別のAZにあるAD Connectorで動作する。冗長性が確保されていると言える。
・AD情報:ディレクトリのDNS名 ディレクトリの完全修飾ドメインとあるが、あくまでも「ディレクトリ」のFQDN。たとえば、ADサーバのドメインがexample.localで、サーバのホスト名がsrv1、このホストのFQDNがsrv1.example.localだったとしても、ここで入力するのは、example.local
→数分で完了する(エラーのときは1分もかからずエラーが表示される)
NETBIOS名は記入不要(今は使わないので)

https://dev.classmethod.jp/articles/try-active-directory-connector/  ←わかりやすい
https://dev.classmethod.jp/articles/try-workspaces-using-adconector/
https://docs.aws.amazon.com/ja_jp/directoryservice/latest/admin-guide/create_ad_connector.html
うまくいかない場合は、以下によるテスト方法があるが、ドメインレベルが2012だったりとか、テストする端末をADに参加させなければいけないなど、意外に面倒。手順通りにやれば、それほど失敗はしないだろう。
https://docs.aws.amazon.com/ja_jp/directoryservice/latest/admin-guide/prereq_connector.html

■AWS Windowsサーバへの接続
(1)Windowsのインスタンスを起動
Windowsサーバの日本語版を入れる場合。
EC2>インスタンス作成
検索窓からWindows_Server-2016-Japaneseを入力して検索。→Windows_Server-2019-Japanese-Full-Base- がいいのではないか(要確認)。「Windows 2019 Server - Japanese with Support by Supported Images」かな。「2019 Japanese 」くらいで検索するといいだろう。2019は、curlなどもデフォルトで入っている。ただ、Pingの許可設定などが2016などに比べて複雑になっていた気がする。
コミュニティAMIの中で、コミュニティAMIでは、公式なものにアレンジしたりされたAMIが公開されてる。
ただ、怪しいAMIをつかまされては怖いので、Amazonの提供元かを確認する(provided by AmazonとなっていればOK)
・ADを構築する場合、クライアントと同一セグメントにする必要があり、AZ(またはサブネット選択に注意する)

(2)パスワードの取得
Linuxサーバの場合は、秘密鍵でSSH接続しました。
一方、Windowsサーバの場合は異なります。
以下にありますように、秘密鍵からAdminstratorのPWを入手します。
EC2の画面からインスタンスを指定し「アクション」>「Windowsパスワードの取得」
秘密鍵をUploadすると、AdministratorのPWを取得できる。

(3)接続
デフォルトでRDPが有効になっているので、RDP接続するとよいだろう。
コマンドプロンプトからmstscと入れて実行
・ユーザ名:administrator ※大文字小文字は区別しない。
・PW:上記で取得したPWを入力
https://dev.classmethod.jp/articles/first-login-to-ec2-windows/

(4)パスワード変更
ログイン後にPWは変更した方がいいだろう。
コマンドプロンプトを起動して、以下を実行。ただし、パスワードの複雑さを満たす必要がある。
net user Administrator "new_password"

https://docs.aws.amazon.com/ja_jp/AWSEC2/latest/WindowsGuide/ec2-windows-passwords.html

(5)IEのセキュリティ設定の変更
IEのセキュリティ設定で、インターネットへのアクセスがほぼできない。これを直す。
Server Managerを開く(検索からいくといいと思う)
Local ServerからIE Enhanced Security Configurationで、[On] を変更する。まあ、とりあえずであればOFFで。
https://aws.amazon.com/jp/premiumsupport/knowledge-center/ec2-windows-file-download-ie/

(6)TimeZoneの変更
上記のIEのセキュリティ設定と同じ。すぐ下に、TimeZoneの設定ができるので、+9のTokyoにしておこう。

(7)Defenderのリアルタイム検知
上記のIEのセキュリティ設定と同じところにある。

(8)デスクトップにマイコンピュータなどのアイコンを出す
デスクトップの壁紙あたりを右クリック > 個人用設定
テーマを選ぶと右側に「デスクトップアイコンの設定」が出てくるはず

(9)Pingの許可
Window2016までと2019で若干異なる。
・コンパネ>system and security >Windows Firewallの設定
設定を変更するには、左のメニューのChange Notification Settingsから行う。
・WindowsServer2019でpingを許可するには、以下の設定をする。
サーバマネージャー>セキュリティが強化されたWindows Defenderファイアウォールで
ファイルとプリンターの共有(エコー要求 - ICMPv4受信) を有効にする。

###### 2.ADサーバの構築
①ADサーバの構築 
【前段として】
・ホスト名を変更するなら事前がいいと思う。
方法は、コントロール パネル\システムとセキュリティ\システム
 コンピュータ名、ドメインおよびワークグループの設定 の「設定の変更」
 コンピューター名のタブにおける「変更」でコンピュータ名を変える

・PWの変更はCtrl + Alt + Deleteから。RDPの場合はCtrl + Alt + End
 また、PWの複雑さの設定を解除するには、ツールの「グループポリシーの管理」から
https://www.edifist.co.jp/lecture/network/password_policy/index.aspx

【さて、本編】
https://www.rem-system.com/win2016-adsetup/
・マイコンピュータの右クリック>管理 またはサーバマネージャから、「役割と機能の追加」、一つメッセージを挟んで、 「役割又は機能ベースのインストール」(デフォルト)を選択、基本的にはデフォルトの設定で進む。
・「ActiveDirectoryドメインサービス」のチェックを入れて機能追加、続いてDNSサーバも追加する。
・「機能」の画面になるが、そのまま、次へ、で進み、「インストール」 ※必要に応じて再起動のチェックは入れてもいい。
・完了すると、画面右上に△の警告マークが出ているので、「構成後の展開」として「このサーバをドメインコントローラに昇格する」。「新しいフォレストを追加する」を選び、ドメインを入れる xx.local
・DNSなどが出てくるが、基本的にDNSはADと同じがいい。委任などにチェックを入れずにインストール
・IPアドレスが動的に設定されているなどの警告などが出るが、特に問題がないのでそのまま次に進む。再起動されるであろう。

④ユーザの追加
サーバマネージャ>ツール>「ActiveDirectoryユーザとコンピュータ」からユーザを追加する。
ドメインを選択し、Usersの中で作成する。右クリックで新規作成>ユーザー
※右上の「管理」ボタンの横に「ツール」がある。
※ADをインストールしていない場合は、Windows10などと同様に歯車マークから追加する。

⑤グループポリシーの設定
https://www.edifist.co.jp/lecture/network/password_policy/index.aspx
サーバーマネージャー>ツール>グループポリシーの管理
ここで、パスワードポリシーなどを変更できる。

【参考】パスワードポリシー
複雑さの要件には、ユーザ名と同じ部分が3文字以上あってもダメ。

###### 3.別のPC(今回はWindows Server)を上記のADに参加させる。
AWS前提で書いています。
構成としては、WindowsServerのインスタンスを同様に構築します。(Clientは存在せず、Workspacesを使うしかない)
このWindows ServerをクライアントPCとしてADに参加させます。
・相互に通信をさせるため、セキュリティグループで、インバウンドを許可(たとえば、172.31.0.0/16)。FWが外れていると思うので、pingで疎通確認をしてみるといいだろう。
・ ADサーバ側で、クライアントのユーザを追加。たとえば、user1@xxx.dom このとき、グループにDomainAdminを入れる必要がありそう(これが、ADに参加するときだけなのか、永遠に必要なのかは調査が必要。でも、DomainAdminの権限は付与しすぎな気がする。ドメインへの参加はできるが、そのあとRDPがうまくいかず、DomainAdminの権限を付与したらとりあえずつながる)
・ADに参加する。コントロール パネル\システムとセキュリティ\システム
 コンピュータ名、ドメインおよびワークグループの設定 の「設定の変更」
 コンピューター名のタブにおける「変更」でドメインを指定する。
 このとき、権限のあるアカウントが求められるので、ADサーバ側のadministrator のアカウントとパスワードでログイン。成功すると、再起動。
・再起動後、RDPのユーザ名は、オプションで変更する。user1@xxx.domにする。
・接続の最後で、権限がないと怒られるので、RemoteDesktopUsersを入れたがなぜかダメ。面倒なので、DomainAdminの権限を付与してとりあえず進めた。→PC側の設定で、リモートデスクトップの設定らしきところで、ユーザ(Domain Users)を適切に入れれば、できた(と思う)。


###### 4.その他
■他ユーザからのリモートアクセス(RDP)
Administratorユーザで、一般ユーザを作成し、DomainAdminとAdministratorsグループに入れた。(※どこまで権限を付与するかは要件等。これはやりすぎというかMAX)
今回は、Administrator以外のユーザからもRDPでいろいろ管理権限を操作できるか試したかったので、このようにした。
結果、リモートアクセスができるようになり、グループポリシーのパスワードポリシーも見えた。
※リモートアクセスはAdmin権限を付与するか、リモートの権限が必要だったはず。
ただ、ダイヤルインタブの「リモートアクセス許可」>「アクセスを許可」は関係がなかった。というかNPSで~になっていても接続できた。

■ファイルの解凍
7zipなどを入れないとうまくいかないかもしれない

###### 5.Groupポリシーによるファイルの配布
ファイルを配布する
(1)共有フォルダを作成し、ファイルを入れる
 フォルダを右クリック、プロパティ、共有タブ、共有で、アクセス権の付与。たとえば、Eveyone
・その下の「詳細な共有」の「このフォルダを共有」をチェックして、アクセス権を設定(デフォルトのままでもいいかも

(2)グループポリシーの作成
https://soma-engineering.com/server/activedirectory/copy-file-specific-location/2018/12/02/
①OUの作成
サーバーマネージャー>ツール>Active Directory ユーザーとコンピューターを開き、ドメイン(xxx.local)を右クリック、新規作成、組織単位(OU) 。OUにユーザを入れる
②グループポリシーの作成
サーバーマネージャー>ツール>グループポリシーの管理を開き、階層が深いが、Forest>Domains>該当ドメイン(xxx.local)>Default Domain Policyに、作成したOUがあるかを確認する。
「グループポリシーオブジェクト」を右クリックして「新規」、名前を付ける。いったん、OK。作成したGPOを右クリック「編集」すると、グループポリシー管理エディターが開くので、ユーザー構成>基本設定>Windowsの設定>ファイルを右クリック、新規作成>ファイル
[全般]で
・ソースファイル:配布先のPCがからアクセスできるパスを指定する。先に作った共有フォルダにすべき。たとえば、\10.1.1.1\share\file.txt
・ターゲットファイル:%userprofile%\Desktop\file.txt
[共通]で、
2つ目のログオンしているユーザーのセキュリティコンテキストで実行すると、4つ目の1度だけ適用し、再適用しない、をチェック
③作成したグループポリシーとOUのリンク
グループポリシーの管理に戻り、グループ ポリシーの管理>フォレスト:ルートドメイン名>ドメイン>ルートドメイン名>作成したOU  に作成したGPOをドラッグアンドドロップでコピー

※OUの削除
普通にやると消せない。ADユーザとコンピュータで、「表示」>拡張機能。削除したいOUを右クリックで、プロパティ、オブジェクトで「誤って削除されないように~」のチェックを外す

(3)PC側でGroupポリシーの強制適用
コマンドプロンプトを起動し、 gpupdate /force

ファイルを配布せず、共有フォルダにファイルをおいて、batファイルで実行も可能。ただ、インストールする権限とかが必要なので、注意が必要
---install.bat
rem ソフト実行
\\10.1.1.1\share\file.exe /s

以下のようにやると、IDを入れることができたり、裏で実行できる。
---install.bat
@echo off

if EXIST "C:\Windows\System32\drivers\FileA" GOTO END

C:\folder\file.exe /install /quiet /norestart CID=xxxx

:End
 
###### 4. WindowsPCの構築
①OSのインストール
上記のWindowsサーバと同様。
メッセージがやたらと出てくる。ユーザのところは、左下のADに参加とした。
デバイスのセキュリティのところは全てOFFにしてみた。
VMwaretoolsを入れよう。設定>ゲストOS VMwaretoolsのインストールから。

②PCのセットアップ 
https://risings.red/pc/activedirectoryuser/
 →AD側で、サーバマネージャ>ツール>「ActiveDirectoryユーザとコンピュータ」からユーザを追加する。右上の「管理」ボタンの横に「ツール」がある。
 PC側では、ネットワークの設定でDNSをADサーバにする。
 フォルダなどを開いてマイコンピュータを表示し、右クリックのプロパティから「設定の変更」
 ドメインに参加するために「変更」を押する
 ADのドメイン名を入れ、ADで作成したユーザIDとPWを入れる
  ドメインuserをローカルのAdministrateグループに入れておこう
 AD参加なので、別のユーザでもログインできる。
 その場合は、test.com\user1 というように、ドメイン\ユーザ名でログインする。

↑このページのトップヘ