AWSのElasticBeanstalkで以下のような構成にしたかったのでebextensionsでやってみた。
ELBで80番と10051番ポートを転送するとデフォルトではELBのセキュリティグループ設定が全オープンになるので制限したかった。
参照サイト
- Elastic Beanstalk 環境リソースの追加とカスタマイズ - AWS Elastic Beanstalk
- ロードバランシングされた Elastic Beanstalk 環境でエンドツーエンドの暗号化を設定する - AWS Elastic Beanstalk
- HTTPS を終了するように Elastic Beanstalk 環境のロードバランサーを設定する - AWS Elastic Beanstalk
- すべての環境に対する汎用オプション - AWS Elastic Beanstalk
やってみたこと
.ebextensionsの設定
以下のように.ebextensionsを書いてできた。
- .ebextensions/00_options.config
- sg-XXX部分は任意のセキュリティグループのIDを指定
option_settings:
aws:elb:listener:10051:
ListenerProtocol: TCP
InstanceProtocol: TCP
InstancePort: 10051
aws:elb:loadbalancer:
SecurityGroups:
- sg-XXX
- '`{ "Ref" : "loadbalancersg" }`'
ManagedSecurityGroup: '`{ "Ref" : "loadbalancersg" }`'
- .ebextensions/01_resources.config
- vpc-XXX部分は任意のVPCのIDを指定
Resources:
port10051SecurityGroupIngress:
Type: AWS::EC2::SecurityGroupIngress
Properties:
GroupId: {"Fn::GetAtt" : ["AWSEBSecurityGroup", "GroupId"]}
IpProtocol: tcp
ToPort: 10051
FromPort: 10051
SourceSecurityGroupName: { "Fn::GetAtt": ["AWSEBLoadBalancer", "SourceSecurityGroup.GroupName"] }
loadbalancersg:
Type: AWS::EC2::SecurityGroup
Properties:
GroupDescription: custom ELB security group
VpcId: vpc-XXX
SecurityGroupIngress: []
SecurityGroupEgress: []
port10051ELBSecurityGroupIngress:
Type: AWS::EC2::SecurityGroupIngress
Properties:
GroupId: {"Fn::GetAtt" : ["loadbalancersg", "GroupId"]}
IpProtocol: tcp
ToPort: 10051
FromPort: 10051
SourceSecurityGroupName: default
ポイント
デフォルトでELBに紐づけられるAWSEBLoadBalancerSecurityGroupにSecurityGroupIngress : []などとして設定してもlistenしたポートが自動的に全オープンされてしまうので別のセキュリティグループを作って紐付ける。