2

Terraformを使用してAWSインフラストラクチャを設定しています。コンポーネントの1つは、ロードバランサと自動スケーリンググループを持つElasticBeanstalkアプリケーション/環境です。エンドポイントをインターネット全体に限定するのではなく、限られたIPアドレスのリストだけに公開したいと思っています。そのために、適切なインバウンドルールを持つセキュリティグループを作成し、それをロードバランサに割り当てます。しかし、スクリプトが適用された後、ロードバランサには2つのセキュリティグループ(1つの鉱山と2つ目のデフォルト)があり、そこからのHTTPトラフィックを許可します。 一時的な回避策として、私は手動でデフォルトSGの受信ルールを削除します。インフラストラクチャーのセットアップを完全に自動化したいので、このようなアプローチは長期的な解決策としては受け入れられません。Terraformを使用して非公開のロードバランサを使用してElasticBeanstalk環境を作成する方法

ここ

は私の設定です:

resource "aws_elastic_beanstalk_environment" "abc_env" { 
    name = "abc-${var.environment_name}" 
    application = "${aws_elastic_beanstalk_application.abc-service.name}" 
    solution_stack_name = "64bit Amazon Linux 2016.09 v2.3.0 running Python 3.4" 
    cname_prefix = "abc-${var.environment_name}" 
    tier = "WebServer" 
    wait_for_ready_timeout = "30m" 

    setting { 
    name = "InstanceType" 
    namespace = "aws:autoscaling:launchconfiguration" 
    value = "m3.medium" 
    } 
    setting { 
    name = "SecurityGroups" 
    namespace = "aws:elb:loadbalancer" 
    value = "${var.limited_http_acccess_id}" 
    } 
    setting { 
    name = "VPCId" 
    namespace = "aws:ec2:vpc" 
    value = "${var.vpc_id}" 
    } 
    setting { 
    name = "Subnets" 
    namespace = "aws:ec2:vpc" 
    value = "${var.public_net_id}" 
    } 
    setting { 
    name = "AssociatePublicIpAddress" 
    namespace = "aws:ec2:vpc" 
    value = "true" 
    } 
    setting { 
    name = "ELBSubnets" 
    namespace = "aws:ec2:vpc" 
    value = "${var.public_net_id}" 
    } 
    setting { 
    name = "ELBScheme" 
    namespace = "aws:ec2:vpc" 
    value = "external" 
    } 

    setting { 
    name = "MinSize" 
    namespace = "aws:autoscaling:asg" 
    value = "2" 
    } 
    setting { 
    name = "MaxSize" 
    namespace = "aws:autoscaling:asg" 
    value = "4" 
    } 
    setting { 
    name = "Availability Zones" 
    namespace = "aws:autoscaling:asg" 
    value = "Any 2" 
    } 
    setting { 
    name = "CrossZone" 
    namespace = "aws:elb:loadbalancer" 
    value = "true" 
    } 
    setting { 
    name = "Unit" 
    namespace = "aws:autoscaling:trigger" 
    value = "Percent" 
    } 
    setting { 
    name = "MeasureName" 
    namespace = "aws:autoscaling:trigger" 
    value = "CPUUtilization" 
    } 
    setting { 
    name = "LowerThreshold" 
    namespace = "aws:autoscaling:trigger" 
    value = "20" 
    } 
    setting { 
    name = "UpperThreshold" 
    namespace = "aws:autoscaling:trigger" 
    value = "80" 
    } 
    setting { 
    name = "Period" 
    namespace = "aws:autoscaling:trigger" 
    value = "5" 
    } 
    setting { 
    name = "UpperBreachScaleIncrement" 
    namespace = "aws:autoscaling:trigger" 
    value = "1" 
    } 
    setting { 
    name = "LowerBreachScaleIncrement" 
    namespace = "aws:autoscaling:trigger" 
    value = "-1" 
    } 
    setting { 
    name = "Notification Endpoint" 
    namespace = "aws:elasticbeanstalk:sns:topics" 
    value = "${var.notification_email}" 
    } 
    tags = "${merge(var.default_tags, map("Name", "abc environment"))}" 
} 

そこで質問です:どのように私は(唯一のテラフォームスクリプトを使用して)AWSとの手動操作なしで私のロードバランサへのアクセスを制限することができますか?

ここ[UPDATE] は私のネットワークの設定は、デフォルトのセキュリティグループの使用を防ぐためにElasticBeansstalkの設定に追加する必要がManagedSecurityGroup AWS docsによると

resource "aws_vpc" "main_vpc" { 
    cidr_block = "${var.vpc_cidr_block}" 
    enable_dns_hostnames = true 
} 

resource "aws_subnet" "public_network" { 
    vpc_id = "${aws_vpc.main_vpc.id}" 
    cidr_block = "${var.public_network_cidr_block}" 
} 

resource "aws_internet_gateway" "gateway" { 
    vpc_id = "${aws_vpc.main_vpc.id}" 
} 

resource "aws_route_table" "public" { 
    vpc_id = "${aws_vpc.main_vpc.id}" 
    route { 
    cidr_block = "0.0.0.0/0" 
    gateway_id = "${aws_internet_gateway.gateway.id}" 
    } 
} 

resource "aws_route_table_association" "public" { 
    route_table_id = "${aws_route_table.public.id}" 
    subnet_id = "${aws_subnet.public_network.id}" 
} 

resource "aws_security_group" "limited_http_acccess" { 
    name = "limited_http_acccess" 
    description = "This security group allows to access resources within VPC from specified IP addresses" 
    vpc_id = "${aws_vpc.main_vpc.id}" 
    ingress { 
    from_port = 80 
    to_port = 80 
    protocol = "TCP" 
    cidr_blocks = ["${split(",", var.allowed_cidr_list)}"] 
    } 
    egress { 
    from_port = 0 
    to_port = 0 
    protocol = "-1" 
    cidr_blocks = ["0.0.0.0/0"] 
    } 
} 
+0

あなたはテラフォームでのセキュリティグループを管理している、そうであれば、あなたは(当然の機密情報なし、)あなたのSGの設定を投稿することができます問題を修正しました? vpc_id、入力と出力のブロックが正しく定義されていることを確認する必要があります。正しくない場合はTerraformに奇妙なことをさせてください。 – mcheshier

+0

ネットワーク設定が追加されました。私にとっては、大丈夫、すべて期待どおりに動作しますが、唯一のことは、デフォルトのBeanstalk SGの入力ルールを手動で編集する必要があることです。 – igor

答えて

1

です。

は、だから私のaws_elastic_beanstalk_environmentに以下の行を追加すると

setting { 
    name = "ManagedSecurityGroup" 
    namespace = "aws:elb:loadbalancer" 
    value = "${var.limited_http_acccess_id}" 
    } 
+0

ec2インスタンスの自動デフォルトセキュリティグループと同じ問題があります(私自身のaws:autoscaling:launchconfiguration> SecurityGroupsを追加します)が、常にデフォルトを追加します。誰でもそれをやめる方法を知っていますか? –

+0

@RolfWessels、あなたは{ 値= "$ {var.load_balancer_security_group_id}" 名= "SecurityGroups" 名前空間= ":自動スケーリングlaunchconfiguration AWSの"}設定ロードバランサと起動設定 'に同じSGを使用して試すことができます 設定{名前= "SecurityGroups" 名前空間= "AWS:ELB:ロードバランサ" 値= "$ {var.load_balancer_security_group_id}" }設定{ 名= "ManagedSecurityGroup" 名前空間=「AWS:ELB:ロードバランサ" value =" $ {var.load_balancer_security_group_id} " } – igor

+0

@ RollfWesselsしかし、それはあまり良い考えではありません。自動的に生成されたSGは、ロードバランサからEC2へのアクセスを許可し、 'set { name =" SSHSourceRestriction " namespace =" aws:autoscaling:launchconfiguration " value =" tcp、22、22、$を使用するとSSHアクセスルールを追加します。 {var.bastion_host_cidr} " }"私はそれを取り除く理由を見ない。 – igor

関連する問題