AWS移行 - ネットワーク関連でやったこと


ネットワーク関連の設定メモ。
AWSになったことによる影響等を書いていきます。

セキュリティグループ設計

セキュリティグループはサーバー、ELB、RDS..ごとに設定し、そのセキュリティグループを許可するような設計になっています。
直接IPアドレスを記述するのは最小限になります。

※下記はイメージ
列が各リソース
行がセキュリティグループ名です
○が付いているところには、そのセキュリティグループの許可(インバウンド許可設定)されていることになります。
そのセキュリティグループに所属しているものも許可します。
たとえば下記の「prd-web01」というEC2は、「prd-app-web-sg」というセキュリティグループを許可していますが、
「prd-app-web-sg」の中身は「prd-front-main-sg」の80番を許可しています。
これは「prd-front-main-sg」が設定されている「prd-main-alb」からの80番アクセスを許可するという意味になります。

ELB prd-main-alb prd-admin-alb prd-jenkins-alb
prd-myoffice-maintenance-sg
prd-monitoring-sg
prd-front-main-sg
prd-front-admin-sg
prd-front-jenkins-sg
EC2 prd-web01 prd-admin01 prd-rent01 jenkins
prd-myoffice-maintenance-sg
prd-app-web-sg
prd-app-admin-sg
prd-app-rent-sg
prd-app-batch-sg
prd-app-jenkins-sg
RDS prd-rent-db prd-web-db
prd-data-rent-sg
prd-data-web-sg

次に各セキュリティグループで許可している内容です。
IPの記述は最小限になっています。

ELB
prd-myoffice-maintenance-sg 自社のIP
prd-monitoring-sg 監視サービスのIP
prd-front-main-sg 0.0.0.0/0 80/443番
::/0 80/443番
prd-front-admin-sg 0.0.0.0/0 80/443番
::/0 80/443番
prd-front-jenkins-sg 自社のIP 80/443番
EC2
prd-myoffice-maintenance-sg 同上
prd-app-web-sg prd-front-main-sg 80番
prd-app-admin-sg prd-front-admin-sg 80番
prd-app-rent-sg prd-front-main-sg 80番
prd-app-batch-sg prd-app-admin-sg 22番
prd-app-jenkins-sg prd-front-jenkins-sg 80番
RDS
prd-data-rent-sg (postgresql)
prd-app-rent-sg 5432番
prd-app-admin-sg 5432番
prd-data-web-sg (mysql)
prd-app-web-sg 3306番
prd-app-rent-sg 3306番
prd-app-admin-sg 3306番
prd-app-jenkins-sg 3306番

ELBが挟まったことによる影響

今までのロードバランサーではアクセス元IPが取得できていたが、ELBでは直接判別はできず、
headerのX-Forwarded-Forに格納される。
これによりアプリの改修や、Apache, Nginxに影響が出る。

Apache, Nginxでip制限をしている場合

Apacheでは以下のように設定

ApacheでIPを許可する場合,,X-Forwarded-Forを取得
    Order deny,Allow
    Deny from All
    Allow from env=allow_ip

    SetEnvIf X-Forwarded-For "xxx\.xxx\.xxx\.xxx" allow_ip
    SetEnvIf X-Forwarded-For "xxx\.xxx\.xxx\.xxx" allow_ip

Nginxの設定では以下の設定を追記する。

/nginx/nginx.conf,X-Forwarded-Forを取得
    set_real_ip_from xxx.xxx.xxx.xxx/xx; #許可したいip
    real_ip_header X-Forwarded-For;
    real_ip_recursive on;

IAMの設計。スイッチロール

開発、ステージ、本番の3つのアカウントがあるが、
3つのアカウントそれぞれでIAMユーザを作成するのではなく、
一つのアカウントでIAMユーザを作成し、それぞれのアカウントではSwitchロールして使用。