【问题标题】:Access ElasticBeanstalk only via CloudFront仅通过 CloudFront 访问 ElasticBeanstalk
【发布时间】:2016-06-11 11:35:33
【问题描述】:
我当前的设置包括 CloudFront 和 Elastic Beanstalk。如何配置对应LoadBalancer的安全组,只有来自CloudFront的请求才能通过LoadBalancer?
【问题讨论】:
标签:
amazon-web-services
amazon-elastic-beanstalk
amazon-cloudfront
【解决方案1】:
这可以通过使用云端 IP 地址设置安全组并将 EC2 实例限制到该安全组来完成。由于Cloudfront IP一直在变化,this will be updated with a Lambda Function。
Full Directions Are Here,但这里是悬崖笔记:
AWS 控制台 -> EC2 -> 安全组
-
在与您的 EB 实例相同的 VPC 中创建一个安全组,确保创建以下标签:
- 自动更新:真
- 名称:云端
- 协议:http(或者也可以是 https,或者如果您修改脚本,则可以自定义)。
创建包含以下内容的 IAM 策略:
{
“版本”:“2012-10-17”,
“陈述”: [
{
“效果”:“允许”,
“行动”: [
“日志:创建日志组”,
"日志:CreateLogStream",
“日志:PutLogEvents”
],
“资源”:“arn:aws:logs:::”
},
{
“效果”:“允许”,
“行动”: [
"ec2:DescribeSecurityGroups",
"ec2:AuthorizeSecurityGroupIngress",
“ec2:撤销安全组入口”
],
“资源”:“”
}
]
}
在 IAM 中使用上述策略创建角色
创建一个 Lambda 函数 based on this source code,并为其分配在步骤 #5 中创建的角色。
Use the sample at the bottom of the source code to test the function.
当由于您提取的 JSON 与测试请求中的哈希值不匹配而失败时,请从错误消息中获取其期望的哈希值,并将测试样本中的 md5 值替换为该值。
重新运行测试。这次一定会成功的。
注意:查看您创建的组,它们现在填充了一大堆 CloudFront IP 条目。
- AWS 控制台 -> Elastic Beanstalk -> 应用程序 -> 环境 -> 配置 -> 实例 - 更新组以包含您创建的组的组 ID。
Lambda 函数将使您的 IP 列表保持同步。
【解决方案2】:
您可以在 Elastic BeanStalk 上放置 IAM 角色,以仅允许来自 CloudFront 的传入消息。或者您只能允许从某个端口访问 ELB 实例,然后将 CloudFront 过滤到该端口。例如,Port 443 是 HTTPS,通过 Port 443 授予 CloudFront 对 ELB 的访问权限,然后在您的 Security-Group 上,仅允许从 CloudFront 将访问的 IP 对实例进行入站访问。
签出this