AWS 云上迁移安全最佳实践 陈晓东,AWS 专业服务安全顾问 Chen Xiaodong, Security Consultant, AWS ProServe 2018 年 4 月 24 日 April 24, 2018
内容安排 AWS 云安全蓝图 AWS 责任分担 迁移安全最佳实践
云上安全蓝图
什么是云采用框架? CAF 可标识对云的采用至关重要的利益相关者 它从 6 个视角组织相关的利益相关者 通过这些 视角, 我们可以从这些利益相关者的角度了解云的采用情况
安全视角 以更低的成本在更大的范围内更快地执行操作同时仍然遵循公认的信息安全原则 1. 建立安全指导控制机制 2. 标识预防性安全措施 3. 检查和检测可能违反规则和政策 的情况 指导性控制机制 4. 创建安全响应行动手册 响应性控制机制 预防性控制机制 检测性控制机制
安全持续集成与交付 合规性验证 自适应能力 配置及脆弱性分析 大数据安全 安全蓝图 我们定义了十个主题以构建云中安全维度, 每个主题均有对应的最佳实践及适用的用户场景 企业通过反复迭代, 最终在保证业务需求及灵活性的同时, 提升整体安全成熟度 安全视角 五大核心 账号及访问管理 五大延展 方针 系统架构安全 防御 监测 数据分级及保护 响应 安全运维, 监控及日志管理 事件响应及自动化
AWS 责任分担
什么是 AWS 责任分担? 在评估云解决方案的安全性时, 理解和区分以下几点对于客户而言非常重要 : 云服务提供商 (AWS) 实施和运行的安全措施 云的安全性 客户实施和运行的安全措施, 与使用 AWS 服务的客户内容和应用程序的安全相关 云中的安全性
客户 什么是 AWS 责任分担? 客户内容 平台 应用程序 身份和权限管理 操作系统 网络和防火墙配置 客户对在云中的安全性负责 客户端数据加密服务器端数据加密网络流量保护 AWS Foundation Services 计算存储数据库网络 AWS 全球基础设施 可用区 区域 边缘站点 AWS 对云的安全性负责
迁移安全最佳实践
多个 VPC 还是多个账户?
什么是 Virtual Private Cloud? 逻辑上隔离软件定义的网络虚拟网络完全控制安全分配多个接口 VPN 或 Internet 连接连接您的内部 IT
什么是 AWS 账户? 简单来说, 用户通过账户来使用 AWS 的产品 ; 被用来作为管理的边界 ; 通过 AWS 账户, 你可以 : 查看你的 AWS 账户活动情况以及使用报告 管理你 AWS 上的安全凭证 提供 AWS 服务, 例如 Amazon VPC
如何划分你的应用阶段 大多数组织建立 3 或 4 个环境来划分应用阶段 常见应用环境名称 Sandbox/POC/Lab 开发 测试 QA 预生产, UAT 生产
定义你的应用环境 大多数用户选择以下两种模式来组合或者隔离他们的应用环境 多 VPC 模式 多账户模式
什么是多 VPC 模式 用来将各应用环境创建在分散的 VPC 中 适用于单一团队负责所有测试开发 生产环境基础架构的初创企业, 或者中小企业 (SMB) 开发 VPC 测试 VPC 预生产 VPC 生产 VPC
什么是多账户模式 将应用环境隔离在多个 AWS 账户中 适用于拥有多个团队分别负责测试 生产环境的大型企业 Amazon VPC Amazon VPC Amazon VPC Amazon VPC 开发账号测试账号预生产账号生产账号
多账号和多 VPC 混合模式 生产 VPC 开发 VPC 生产账号 测试 VPC 非生产账号
决策点 : 多 VPC 还是多账号模式 您准备使用哪种组织或者隔离模式来管理您的应用环境? 单个团队的多 VPC 模式 使用多 VPC 模式来管理和创建您的应用环境 多个团队的多账户模式 使用多账户模式来管理和隔离您的应用环境
决策点 : Consolidated Billing 当使用多账户模式时, 哪个账号作为您的主 master 账号? AWS 推荐 使用一个专门的主 (root) 账号, 其上不启用任何 AWS 资源 对这个主账号, 启用 MFA
子网
子网类型 公有子网 公有子网的路由表中, 有路由指向 Internet Gateway (IGW), 流量能够直接进出因特网 私有子网 私有子网的路由表中, 没有直接指向 Internet Gateway (IGW) 的路由, 而是使用 proxy/nat 网关实现因特网的出流量 敏感子网 ( 自定义 ) 敏感子网的路由表中, 不含有进出因特网的路由
使用子网时的建议 从每个可用区至少 2 个子网开始 使用子网来限制因特网的访问 考虑使用更大的子网 (/24 或者更大 )
可用区 A 决策点 : 每个可用区的子网划分 您会选择使用多少子网? 什么类型的子网? VPC A - 10.0.0.0/16 ELB AWS 推荐 10.0.32.0/20 ( 公有 ) 从每个可用区至少 1 个公有子网,1 个私有子网开始 如果您采用 3 层架构, 建议使用 3 层子网结构 即公有子网 私有子网 敏感子网 Web EC2 EC2 EC2 10.0.0.0/19 ( 私有 ) 数据库 10.0.48.0/21 ( 敏感 ) EC2 应用程序 大数据湖
安全组 & Network ACLs
可用区 A 什么是安全组 VPC A - 10.0.0.0/16 Web EC2 EC2 10.0.32.0/20 ( 公有 ) 10.0.0.0/19 ( 私有 ) ELB 应用 EC2 程序 安全组 在实例级别运行 仅支持允许规则 ( 白名单 ) 有状态 每个安全组最多 50 条规则, 最多 支持 5 个组 默认禁止所有入站, 允许所有出站 安全组的源可以是安全组 EC2 数据库 日志 10.0.48.0/21 ( 敏感 )
CIDR 和安全组源示例
如何配置安全组 安全组默认允许所有出流量的规则 在安全组上修改这条缺省的出流量的规则会增加复杂性, 因此不推荐, 除非有合规的要求 大多数企业为每类应用在安全组中配置入站规则 优先考虑使用安全组作为源 如果要安全组内实例通讯, 请将源设为自己
安全组链图 每个应用层的安全组规则 Web 层 ELB 安全组 入站规则 Allow TCP Port 443 Source: 0.0.0.0/0 (Any) web Web 层安全组 web 入站规则 Allow TCP Port 80 Source: Web 层 ELB App 层 ELB 安全组 入站规则 Allow TCP Port 8080 Source: Web 层 app App 层安全组 app 入站规则 Allow TCP Port 8080 Source: App 层 ELB data 数据层安全组 data 入站规则 Allow TCP Port 3306 Source: App 层 可用区 A 可用区 B
可用区 A 什么是 Network ACLs VPC A - 10.0.0.0/16 Web EC2 EC2 10.0.32.0/20 ( 公有 ) 应用 EC2 程序 NACL 在子网级别应用, 无状态, 默认情 况下允许所有流量 允许和拒绝 适用于子网中的所有实例 用作第二道防线 10.0.0.0/19 ( 私有 ) EC2 数据 日志 10.0.48.0/21 ( 敏感 ) 路由器
决策点 : 安全组策略 您会使用安全组来作为您最主要的 EC2 实例访问控制方式吗? AWS 推荐 使用安全组作为您最主要的访问控制手段
决策点 : NACL 策略 什么时候在子网上启用 NACL 呢? AWS 推荐 当需要禁止来自某特定源或端口的流量时 当子网无需访问因特网时
VPC 的互连
连接到您的 VPC 的方法 使用 AWS 管理控制台或者 CLI 通过互联网连接 在您数据中心或公司与 VPC 间, 建立 Virtual Private Network (VPN) over IPsec AWS Direct Connect 通过 VPC peering 连接其他 VPC
可用区 A VPC Peering VPC A - 10.0.0.0/16 VPC B - 10.1.0.0/16 VPC NAT 网关 NAT Elastic Load Balancer 10.0.32.0/20 ( 公有 ) VPC 对等 Web EC2 EC2 Web EC2 EC2 应用 EC2 程序 VPC 路由器 VPC C - 10.2.0.0/16 10.0.0.0/19 ( 私有 ) EC2 跳转 日志 VPC 对等 10.0.48.0/21 ( 敏感 )
VPN 您可以在您的数据中心部署硬件 VPN, 并同 VPC 中的 Virtual Private Gateway 建立 IPSec 隧道, 来实现 VPN 连接 中国区的 VPG 暂时不支持 VPN 功能 您可以在您 VPC 中的 ec2 上安装开源的 VPN 软件, 实现 VPN 连接 并通过多可用区部署以及健康检查脚本实现高可用 您也可以使用商业化的 VPN 解决方案
Direct Connect 专用的私有链路 持续的稳定性 带宽 :50-500Mbps, 1Gbps, and 10Gbps 大多数 VPN 解决方案最多支持 4Gbps 支持主 / 主, 主 / 备模式
选择 VPC 连接的标准 从 VPN 开始 大多数被迁移上云的应用并不需要专用链路, 或者数据传输带宽要求小于 4Gbps 考虑使用 Direct Connect 如果您被迁移上云的应用需要更加稳定的链路, 更加大的带宽, 更加低的访问延时, 考虑使用 Direct Connect
决策点 : VPC 连接 您一开始会选择哪种 VPC 连接方式呢? AWS 推荐 从 VPN 开始 可以将多个 VPC 中的应用, 通过 VPC peering, 来共享某些服务, 例如日志管理, 监控等
身份和访问管理
AWS IAM 能做什么 创建和管理 AWS 用户 ( 组 ), 以权限授予的方式允许或阻止其对 AWS 资源的访问 使用 SAML, 并通过 AWS 目录服务和 AD 集成, 实现联合身份认证 创建角色, 并授予其相应权限, 实现对单个实体或 AWS 服务 ( 如 EC2 实例 ) 有限的操作控制
决策点 : IAM 如何选择最佳的方式授予用户或应用权限? AWS 建议 将 IAM 策略应用到组, 避免应用到单个用户 使用 IAM 角色可避免在代码中硬编码用户访问密钥 重要用户启用 MFA 务必配置密码策略, 定期轮换密钥和密码
访问策略语法 :ARN 的格式 arn:partition:service:region:account-id:resource arn:partition:service:region:account-id:resourcetype/resource arn:partition:service:region:account-id:resourcetype:resource Partition: 通常包括 aws aws-cn 等 Service: AWS 服务名称 ( 例如 :iam) Region: 资源所在的区域名称 ( 例如 :us-west-2) 注意 : 别忘了加上 Region 这个参数 Account-id: AWS 账号 ID( 例如 :123456789012)
访问策略语法 :IAM 策略作用逻辑 1 策略判断起于 Deny 2 评估所有匹配的 IAM 策略 3 是否存在显式的 Deny No 4 存在 Allow? No 5 最终 Deny ( 默认隐式 Deny ) AWS 取得该用户或资源关联的所有 IAM 策略 真 真 默认返回隐式 Deny 只评估匹配访问行为和条件的 IAM 策略 最终 Deny ( 显式 Deny 的结果 ) 最终 Allow 如果一条策略描述中带有 Deny, 则影响其他匹配的策略作用结果 显式的 Allow 且无显式的 Deny, 则允许访问该资源
数据保护
存储中的数据加密 :KMS 密钥层次结构 使用信封加密的多层密钥层次结构 通过独一无二的数据密钥对单个客户数据进行加密 通过 KMS 主密钥对数据密钥进行加密 通过区域主密钥对客户 KMS 密钥进行加密 数据密钥 1 KMS 客户主密钥 数据密钥 2 数据密钥 3 数据密钥 4 S3 对象 EBS 卷 Amazon Redshift 集群 自定义应用程序
决策点 : 密钥管理 目前中国区暂时不支持 KMS,CloudHSM 密钥管理, 我该如何选择? AWS 建议 选择 AWS Server-side encryption(sse) 加密 选择合作伙伴的 KMS 或 HSM 解决方案 选择在 OS 层以上进行加密的解决方案
决策点 : 存储中的数据加密 我应该加密云上哪些数据? AWS 建议 根据企业需求或合规需求, 对数据进行分级 根据不同的数据级别制定不同的加密策略
传输中的数据加密 :VPN
传输中的数据加密 :TLS 证书卸载方式 HTTP S 加密 Elastic Load Balancing ( 终止 TLS) HTTP 未加密 EC2 安全组 HTTP S 加密 Elastic Load Balancing ( 终止 TLS 并重新协商 ) HTTP S 加密 EC2 安全组 TCP 直通 EC2 加密 Elastic Load Balancing ( 不会终止 ) 加密 安全组
决策点 : TLS 证书卸载方式 我应该选择哪种证书卸载方式? AWS 建议 绝大多数企业选择在 ELB 上卸载证书,ELB 至后端 EC2 明文传输 如果希望端到端的加密, 建议选择由 ELB 先卸载 TLS 证书, 再同后端的 EC2 建立加密通道
审计 & 日志
AWS API 日志记录 :Amazon CloudTrail 您正在进行 API 调用... 在全球不断增长的服务集上 CloudTrail 连续记录 API 调用 并向您提供日志文件
为什么应该使用 CloudTrail 探测性控制 ( 并启用响应性控制 ) 安全操作可见性操作故障排除法规和标准合规性 PCI 数据安全标准 (PCI DSS) FedRAMP: 美国政府联邦机构计划 国际标准化组织 (ISO) 27001 标准 服务组织控制 2 (SOC2)
决策点 : AWS CloudTrail 您是否准备在所有的区域启用 CloudTrail? 如何存储日志? AWS 建议 永远在所有的区域启用 CloudTrail 将 CloudTrail 日志存储到独立的审计账号 S3 存储桶中, 并利用 S3 生命周期管理, 长期保存
什么是 Amazon VPC Flow Logs 您可以启用 VPC Flow Logs 来捕获有关在您的 VPC 中传入和传出网络接口的 IP 流量的信息 流日志数据使用 Amazon CloudWatch Logs 存储, 大约每 10 分钟一批 除了故障排除之外, 您可以使用 VPC Flow Logs 作为安全工具来监视到达您的实例的流量
VPC Flow Logs 记录 允许的入站 SSH 连接 2 123456789010 eni-abc123de 172.168.1.12 172.168.1.11 20641 22 6 20 4249 1438530010 1438530070 ACCEPT OK
Decision Point: VPC Flow Logs 您是否在 VPC 中启用 Flow Logs? AWS 建议 在 Trouble Shooting 时启用 Flow Logs 在应用测试 调试 试运行以及上线初期启用 Flow Logs 配合 Splunk 等商业软件使用
什么是 AWS Config AWS Config 为您提供 AWS 资源清单, 在您的资源配置发生更改时通知您, 并且可让您审核这些资源的配置历史记录
决策点 : AWS Config 您是否准备启用 AWS Config? AWS 建议 建议启用 AWS Config
什么是 Config Rule 检查所记录配置有效性的规则 AWS 托管的规则 由 AWS 定义 所需配置极少 ( 或无需配置 ) 由 AWS 维护的规则 客户托管的规则 由您使用 AWS Lambda 编写 规则在您账户中执行 您负责维护规则
决策点 : AWS Config Rule 您是否准备启用 AWS Config Rule? AWS 建议 从启用 AWS 托管规则开始 根据企业自身安全基线要求, 或者合规要求, 自己编写规则, 实现 Compliance as Code
Any Questions?
Thank You!