[Elastic Beanstalk] eb環境のSecurityGroup(ELB,EC2)を設定してみた

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

はじめに

AWSチームの鈴木です。

パブリックな「webserver」として起動したElasticBeanstalk環境、 そのELBで利用されるSecurityGroupは、HTTP(HTTPS)がAny(0.0.0.0/0)で公開されます。

eb-securitygroup-config-07

また、eb環境作成時にSSH接続用のキーペアを指定した場合、SSH用のTCP22ポートはAny公開されます。

eb-securitygroup-config-08

特定のグローバルIP範囲のみに限定公開するWebサーバの設置や、 セキュリティ対策としてSSHの接続元IPを制限する必要がある場合、 ElasticBeanstalkの環境リソースとして、SecurityGroupを設定する方法について紹介します。

検証環境

ebクライアント(ebcli)

$ eb --version
EB CLI 3.5.4 (Python 2.7.9)

eb プラットフォーム

$ eb status | grep Platform
  Platform: 64bit Amazon Linux 2015.03 v2.0.1 running PHP 5.4

検証用eb構築手順

サンプルPHP環境設置

mkdir HelloWorld
cd HelloWorld
eb init -p PHP
echo "Hello World" > index.html

ebextensions設置

ELB設定
  • 特定IP(192.168.0.1/32 ※仮)のHTTP(TCP:80)を許可
EC2設定
  • デフォルトVPC(172.31.0.0/16)からのHTTP(TCP:80)接続を許可(ELB接続用)
  • デフォルトVPCからのSSH(TCP:22)を許可(踏台EC2想定)

設置例

mkdir -p .ebextensions/
cat << EoF > .ebextensions/00.sg.config
Resources:
  AWSEBLoadBalancerSecurityGroup:
    Type: AWS::EC2::SecurityGroup
    Properties:
      GroupDescription: My ELB SecurityGroup settings for eb environment.
      SecurityGroupIngress:
        - {CidrIp: "192.168.0.1/32", IpProtocol: "tcp", FromPort: "80", ToPort: "80"}
  AWSEBSecurityGroup:
    Type: AWS::EC2::SecurityGroup
    Properties:
      GroupDescription: My EC2 SecurityGroup settings for eb environment.
      SecurityGroupIngress:
        - {CidrIp: "172.31.0.0/16", IpProtocol: "tcp", FromPort: "80", ToPort: "80"}
option_settings:
  - namespace:  aws:autoscaling:launchconfiguration
    option_name: SSHSourceRestriction
    value: tcp, 22, 22, 172.31.0.0/16 
EoF

検証用eb環境作成

eb create dev-env --scale 1 
eb open

設定確認

ELB用 SecurityGroup

eb-securitygroup-config-06

EC2用 SecurityGroup

eb-securitygroup-config-05

まとめ

接続元が固定のグローバルIPアドレスを有す場合、接続元IPを制限する事はセキュリティ対策として一定の効果が期待できます。

今回紹介したようにeb環境ではSecurityGroupの設定も簡単に実施する事が可能ですので、ぜひお試しください。