AWSではじめるインフラ構築入門 安全で堅牢な本番環境のつくり方
- 第3章
※AWSアカウント作成後にやること
ルートユーザーのアクセスキーの削除
ルートユーザーのMFAを有効化
個々のIAMユーザーの作成
グループを使用したアクセス許可の割り当て
IAMパスワードポリシーの適用
参考URL:
https://docs.aws.amazon.com/ja_jp/IAM/latest/UserGuide/best-practices.html
アクセス許可ポリシー:
IAMFullAccess
-> AWSマネジメントコンソールを介してIAMへのフルアクセスを提供します。
PowerUserAccess
-> AWSサービスとリソースへのフルアクセスを提供しますが、ユーザーとグループの管理は許可しません。
- 第4章
・VPC作成
名前タグ:sample-vpc
IPv4 CIDRブロック:10.0.0.0/16
・サブネット作成
=Availability Zone1
sample-subnet-public01:10.0.0.0/20
sample-subnet-private01:10.0.64.0/20
=Availability Zone2
sample-subnet-public02:10.0.16.0/20
sample-subnet-private02:10.0.80.0/20
・インターネットゲートウェイ作成
名前タグ:sample-igw
VPCアタッチ:sample-vpcをアタッチ
・NATゲートウェイ作成
=NATゲートウェイ1
名前:sample-ngw-01
サブネット:sample-subnet-public01
Elastic IP:自動割り当て
=NATゲートウェイ2
名前:sample-ngw-02
サブネット:sample-subnet-public02
Elastic IP:自動割り当て
・ルーティング作成
パブリックサブネット用:
送信先、ターゲット
10.0.0.0/16、local
0.0.0.0/0、sample-igw
=サブネット
sample-subnet-public01、sample-subnet-public02
プライベートサブネット1用:
送信先、ターゲット
10.0.0.0/16、local
0.0.0.0/0、sample-ngw-01
=サブネット
sample-subnet-private01
プライベートサブネット2用:
送信先、ターゲット
10.0.0.0/16、local
0.0.0.0/0、sample-ngw-02
=サブネット
sample-subnet-private02
・セキュリティグループ作成
踏み台サーバ
グループ名:sample-sg-bastion
説明:for bastion server
VPC:sample-vpc
インバウンドルール:SSH 0.0.0.0/0
ロードバランサー
グループ名:sample-sg-elb
説明:for load balancer
VPC:sample-vpc
インバウンドルール:HTTP 0.0.0.0/0、HTTPS 0.0.0.0/0
- 第5章
キーペア作成
踏み台サーバ作成
ネットワーク:sample-vpc
サブネット:sample-subnet-public01
自動割り当てパブリックIP:有効
タグ:Name / sample-ec2-bastion
セキュリティグループ:default / sample-sg-bastion
- 第6章
webサーバ2台作成
sample-ec2-web01
ネットワーク:sample-vpc
サブネット:sample-subnet-private01
自動割り当てパブリックIP:無効
セキュリティグループ:default
sample-ec2-web02
ネットワーク:sample-vpc
サブネット:sample-subnet-private02
自動割り当てパブリックIP:無効
セキュリティグループ:default
多段SSH(~/.ssh/config)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | Host bastion Hostname パブリックIP User ec2-user IdentityFile ~/.ssh/nakagaki.pem Host web01 Hostname ローカルIP User ec2-user IdentityFile ~/.ssh/nakagaki.pem ProxyCommand ssh bastion -W %h:%p Host web02 Hostname ローカルIP User ec2-user IdentityFile ~/.ssh/nakagaki.pem ProxyCommand ssh bastion -W %h:%p |
- 第7章
ロードバランサー作成
名前:sample-elb
VPC:sample-vpc
アベイラビリティーゾーン:sample-subnet-public01、sample-subnet-public02
セキュリティグループ:default、sample-sg-elb
ターゲットグループ:sample-tg、HTTP、3000、sample-ec2-web01、sample-ec2-web02
ELB動作確認
index.html作成
<html><body>hello world</body></html>
python -m SimpleHTTPServer 3000
ターゲットグループのHealth Statusがhealthyであること
ロードバランサーのDNS名にブラウザからアクセス
- 第8章
RDS作成
パラメータグループ作成
パラメータグループファミリー:mysql8.0
グループ名:sample-db-pg
説明:sample parameter group
オプショングループ作成
グループ名:sample-db-og
説明:sample option group
エンジン:mysql
メジャーエンジンバージョン:8.0
サブネットグループ作成
グループ名:sample-db-subnet
説明:sample db subnet
VPC:sample-vpc
アベイラビリティゾーン:対象サブネットのゾーン選択
サブネット:sample-subnet-private01、sample-subnet-private02
DB作成
エンジンタイプ:MySQL
DBインスタンス識別子:sample-db
Virtual Private Cloud:sample-vpc
サブネットグループ:sample-db-subnet
パブリックアクセス可能:なし
既存のセキュリティグループ:default
データベース認証オプション:パスワード認証
DBパラメータグループ:sample-db-pg
DBオプショングループ:sample-db-og
動作確認 ※WEBサーバにて
sudo yum install -y mysql
mysqladmin ping -u admin -p -h エンドポイント名
※上記にて「mysqld is alive」が返ってくることを確認
- 第9章
S3バケット作成
バケット名:aws-intro-sample-upload
リージョン:ap-northeast-1
パブリックアクセス:すべてブロック
ロール作成
信頼されたエンティティ:EC2
アクセス権限ポリシー:AmazonS3FullAccess
ロール名:sample-role-web
ロールの説明:upload images
WEBサーバにロール適用
sample-ec2-web01、sample-ec2-web02
動作確認
下記にてs3にファイルアップロードされていることを確認
1 2 3 4 5 | echo "a" > test.txt aws s3 --region ap-northeast-1 cp test.txt s3://バケット名 ex) aws s3 --region ap-northeast-1 cp test.txt s3://aws-intro-sample-upload |
- 第10章
ドメイン購入
公開ホストゾーン設定
=踏み台サーバ
レコード名:bastion
レコードタイプ:A
値:踏み台サーバの公開IP
=ロードバランサー
レコード名:www
レコードタイプ:A
値:Application Load Balancer / ap-northeast-1 / 対象ロードバランサー
非公開ホストゾーン設定
=プライベートホストゾーン作成
ドメイン名:home
タイプ:プライベートホストゾーン
リージョン:ap-northeast-1 の sample-vpc
=サーバレコード定義
レコード名:bastion or web01 or web02
レコードタイプ:A
値:IPアドレスまたは別の値(各サーバのローカルIP)
=DBレコード定義
レコード名:db
レコードタイプ:CNAME
値:IPアドレスまたは別の値(エンドポイント)
SSLサーバ証明書発行
ロードバランサーに443リスナー追加
ポート:443
デフォルトのSSL証明書:ACM / 発行した証明書
デフォルトアクション:転送先 / sample-tg
S3の個別アクセスポリシー
1 2 3 4 5 6 7 8 9 10 11 12 13 | { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "s3:*", "Resource": [ "arn:aws:s3:::バケット名", // 対象のS3バケット自身 "arn:aws:s3:::バケット名/*", // 対象のS3バケット中身 ] } ] } |
- 第11章
SES設定
・リージョン変更
東京
・ドメイン設定
Domain:対象ドメイン
Generate DKIM Settings:オン
・検証メールアドレス追加
・SMTP Settings
IAM User Name:no-reply
・テスト送信ファイル作成
sendmailtest.py
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 | # -*- coding: utf-8 -*- import smtplib import ssl from email.mime.text import MIMEText from email.header import Header from email import charset # 各種情報 account = 'xxx' password = 'xxx' server = 'email-smtp.ap-northeast-1.amazonaws.com' from_addr = 'xxx@gmail.com' to_addr = 'xxx@gmail.com' # SMTPサーバに接続する con = smtplib.SMTP(server, 587) con.set_debuglevel(1) con.ehlo() con.starttls() con.login(account, password) # 送信するメールのメッセージを作成する cset = 'utf-8' message = MIMEText(u'SMTPのテスト', 'plain', cset) message['Subject'] = Header(u'SMTP経由での電子メール送信のテストです', cset) message['From'] = from_addr message['To'] = to_addr # メールを送信する con.sendmail(from_addr, [to_addr], message.as_string()) # SMTPから切断する con.close() |
・メール受信時にS3保存
※バージニアリージョンに変更(東京利用不可のため)
S3バケット作成
バケット名:aws-intro-sample-mailbox
リージョン:バージニア北部
パブリックアクセス設定:すべてブロック
※作成後にポリシー修正
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | { "Version": "2012-10-17", "Statement": [ { "Sid": "AllowSESPuts", "Effect": "Allow", "Principal": { "Service": "ses.amazonaws.com" }, "Action": "s3:PutObject", "Resource": "arn:aws:s3:::作成したバケット名/*", "Condition": { "StringEquals": { "aws:Referer": "アカウントID" } } } ] } |
受信アクション作成(Rule Sets)
Recipient:xxx@xxx.net
Add action:S3
S3 bucket:対象バケット
Object key prefix:保存フォルダ
Rule name:sample-rule-inquiry-xxx
動作確認
対象メールアドレスにメール送信してS3に保存されることを確認
- 第12章
Redis作成
クラスターエンジン:Redis
クラスターモード:有効
名前:sample-elasticache
説明:Sample Elasticache
ノードタイプ:t3.micro
シャドー数:2
シャードあたりのレプリカ:2
サブネットグループ:新規作成
名前:sample-elasticache-subnet
VPC:sample-vpc
サブネット:上記VPCのプライベートサブネット
動作確認
nc Redisエンドポイント ポート番号
ex) nc sample-elasticache.xxx.cache.amazonaws.com 6379