サーバーを引き継いだときに確認すること (AWS編)


サーバーを他社から引き継いだときの現状の確認や今後の対策などを考えるための備忘録ですい。

ちょいと仕事柄、エンタープライズ向け　CMS で情報セキュリティマネジメントシステム認証 (ISO27001 認証) も受けた[concrete5](https://concrete5-japan.org) の引き継ぎのメモも兼ねています。

# チェック作業前チェックリスト

- 構成図はあるか
- VPC の資料などはあるか
- EC2 などのサーバー設定の資料はあるか
- SSH 鍵はあるか
- RDS のマスターパスワードはもらっているか
- 個人情報を取り扱い、保存している箇所はあるか？あればどこに保存しているか？
- CloudFormation, Ansible, CDK などのプロビジョニングスクリプトはあるか？特に決まった Deployment の方式はあるか。

# AWS アカウント編

## IAM ユーザー & 認証系

- 以前のお客さんに権限が付与されたアカウントがあるか
- 自社が保守をするために十分な権限が付与されているか
- key pair が各リージョンでいくつ登録されているか。必要・不要な鍵はあるか
- 自社メンバーで AWS Management Console に入るユーザーは MFA を必ず実装する

## リージョンの確認

- 使用されているリージョンはどこか

## 使用サービスの確認

- 請求書ダッシュボードに訪問 or 権限がなければお客様に依頼し、請求が立っているサービスを確認する。
    - 引き継ぎ直後、1ヶ月後、半年後に確認 (超長期なジョブが実行されていないか)
    - お客様からもできる限り使用しているサービス一覧をいただく

## AD (EC2 or Simple AD)

- 以前の保守会社の AD サーバーが繋がったままなどになっていないか。

## VPC

- 使用中・未使用中の VPC の棚卸し
    - 未使用で使用ゼロの VPC をどうするか、お客様に確認 (削除 or 保持)
    - 特に料金が発生する ElasticIP や Gateway などの棚卸しを行う
- Security Group 棚卸し
    - 継続使用・破棄のセキュリティーグループ
    - 削除して良い IP などの確認
    - セキュリティグループでゆるゆるで早急に修正が必要な権限が無いか確認。ゆるゆるすぎれば即修正する。
    - お客様と相談して待てそうなものであれば、相談してから方針を決める

## Route53

- プライベートゾーンとパブリックゾーンを確認
    - プライベートとパブリックを間違えないように！ (パブリックで使っていないからと行って間違ってプライベートゾーンを削除してえらいことになるかもよ！）
- 使用しているゾーン、未使用ゾーンの棚卸し
    - 未使用ゾーンは削除してよいか、保持かお客様に確認


## S3

- 使用している Bucket & 未使用の Bucket の棚卸し
- 未使用 Bucket の処理をお客さんに確認 (削除・保持・Gracier)
- 継続して使用する Bucket の Policy 権限がゆるすぎるものになっていないか
    - Bucket Policies
    - IAM Policies

## ElastiCache

- 使用中のタイプは
- 使用中のバージョンは

## ACM

- ACM 証明書の内容と有効期限かを確認
- 更新にメール認証が必要になっている状態かを確認
    - DNS 認証であれば大丈夫
    - メール認証で、CloudFront や ELB などのサービスで利用されていないか確認

## サーバー (EC2) 内の確認

- 管理者パスワードははあるか
- sudo 権限があるか
- 指定された IP からののみしかアクセスできないか
- 継続・不要 SSH ユーザーはどれか
    - 不要 SSH ユーザーの対処は？ (削除・ファイルをバックアップ・鍵交換で保持・そのままで保持)
    - 継続 SSH ユーザーの対処は？ (鍵 & PW 変更で保持・そのままで保持)
- ディスクの空き容量はいくつあるか
- HDD の定期バックアップを行っているか。
    - していない時スナップショットを定時作成するか。する場合、実施する間隔と保持する世代数はいくつにするか。
- AMI は作成されているか
- ELB を介してあくせすされているのか、直接アクセス7日。
- Cron の設定を確認
    - /etc/crontab
    - 各 SSH ユーザーの `crontab -e`
    - root ユーザーの `crontab -e`
- サーバー設定の確認
    - Hostname は設定されているか
    - タイムゾーン・ロケールの設定は？
    - etckeeper は入っているか
- ミドルウエアのバージョンは？アップデートはきちんとされているか。
    - yum などのパッケージ管理ソフトで管理されているか？
    - ソースからの直インストールのサービスはないか
    - Apache / Nginx
        - バージョンは？
        - 設定ファイルはどこにあるか？ 
        - 使用 module は？
    - PHP
        - バージョンは？
        - 使用 module は?
        - module か、cgi か fastcgi (php-fpm) か
    - MySQL / MariaDB
        - バージョンは？ 
        - 設定は？
        - DB の文字列は？
- 初期起動サービスは？
    - サーバーを再起動した時、きちんと全部のサービスが立ち上がるか。
    - 何か追加で起動しないといけないサービスの立ち上げはあるか
        - 例: Apache/Nginx 起動の際、SSL 証明書の鍵パスワードの入力が必要
- テストやステージングと本番サーバーの違いを認識する
    - Relational Database はローカルにあるか、RDS を使っているか
    - キャッシュなどはローカルを使っているか、ElastiCache などを使っているか。

## RDS

- 管理者パスワードははあるか
- 使用中のタイプはいくつか
- 使用中バージョンはいくつか
- スナップショットの設定はどうか
- オプションパラメータなどの設定はどうか

# concrete5

## 基本

- 本番・ステージングで、RDS や S3 などの使用・不使用はあるか
- 個人情報を扱っているか
- 以前の管理者ユーザーデータなどはきちんと削除されているか
- ステージングに本番環境をコピーした際のユーザー情報の匿名化などの手順はあるか
    - 自社作成のユーザー情報匿名化ジョブを導入するか

## パッケージ

- マーケットプレイスのライセンス管理はきちんと移譲されているか
- マーケットプレイスのライセンスは正常に取得されているものか
- 独自パッケージはあるか

## 開発

- どのファイルがオーバーライドされているか
- Environment で環境の出し分けをしているか
- いままでバージョン管理などをしているか。
    - git で管理されているか
- Deployer や composer が使われているか


# 最後のレビュー

- concrete5
    - Git を導入するか
    - Deployer, Composer, Docker を導入するか
    - 本番・ステージング・開発の環境 Environment を分けて開発するか
- AWS
    -  インスタンスサイズは適当か。
    - セキュリティなどで気をつけることはあるか
    - 価格を抑えることはできるか？