AWS组织和整合账单

AWS组织(Organization)是一项账户管理服务,它可以将你的多个AWS账号整合到集中管理的组织中。

AWS组织包含了整合账单(Consolidated Billing)和账号管理功能,通过这些功能,你能够更好地满足企业的预算、安全性和合规性的要求。

如下图所示,我们可以在AWS Organization内创建一个主账户,并且创建不同的组织单元(OU)。每一个OU可以代表一个部门或者一个系统环境,如下图的开发、测试和生产环境。

每一个OU下面可以分配若干个不同的AWS账号,每一个账号拥有不同的访问AWS的权限。

我们可以使用访问策略来控制每一个OU的权限,OU下面可以再创建其他的OU,最多支持5层嵌套。

AWS Organization内的一个最大功能是整合账单(Consolidated Billing),它的作用是将多个AWS账户的账单都合并为同一个账单进行付款。

可以简单理解为,整合账单的主账号就是财务部门的账号,财务部门负责帮所有其他OU(开发部门,运维部门,IT基础架构部门等)产生的AWS费用进行付款。

AWS整合账单有如下优势:

  • 单一的账单:你不需要为每个账号单独处理账单,所有账号的账单都被统一成一个
  • 方便追踪:你可以很容易追踪每个账号的具体花费
  • 使用量折扣:AWS的很多服务是用得越多单价越便宜,因此如果账单进行合并更容易达到便宜折扣的门槛
  • 无额外费用:整合账单不单独收费

使用量折扣(Volume Discount):

具体讲解一下上面提到的使用量折扣。(下图数据不是真实的AWS费用数据)

如下图所示,Bob在本月使用了8TB的数据流量,而Susan使用了4TB的流量,如果他们单独收费,则因为他们分别都没有达到Tier 2的门槛(10TB)而会按Tier 1的收费标准收费。

如果他们使用了整合账单,那么流量之和12TB超过了Tier 2的门槛,因此超过的2TB部分可以按照更便宜的单价进行支付。

另一个例子,如果某个账号购买了若干个预留实例(Reserve Instance)而没有完全用完。假设买了10个预留实例,实际上只开启了7个,有3个没用。

那么在同一个整合账单下的其他账号所开启的按需实例(On-demand Instance)可以按照预留实例的价格来收费。比如其他账号一共开启了10个按需实例,那么其中3个实例会按预留实例的价格来算,剩下的7个会按按需实例的价格来算。

知识点

  • 整合账单主账号最好使用多因素认证(Multi-Factor Authentication)
  • 整合账单主账号最好只用来管理账单,不拥有任何访问AWS资源的权限
  • 一个Organization默认只能管理20个账号,超过这个数字需要找AWS Support

创建AWS Organizations

如何使用AWS组织(Organizations)来创建不同的OU (Organization Unit),还有如果创建服务控制策略并且关联到不同的OU内。

我们在创建AWS Organizations的时候可以选择具有所有功能的AWS组织,或者创建仅带整合账单(Consolidated Billing)功能的组织。

跨账号访问权限(Cross Account Access)

很多AWS客户都会管理多个不同的AWS账号,比如之前提到的不同的开发环境、测试环境、生产环境等都各分配不同的账号。这样子他们可以对不同类型的账号赋予不同等级和类型的权限,可以在账号和权限的安全性上有更好的控制。

那么一般情况下,一个开发者使用开发环境做了一些变更后希望登录到测试环境去做一些系统的测试,那么他必须注销他的账号,然后使用另外的用户名密码登录到测试账号。这样的复杂操作有时候对开发来说简直是个噩梦。

有了跨账号访问权限(Cross Account Access),你可以在AWS管理控制台上轻松地进行账号(角色)的切换,让你在不同的开发账号(角色)、测试账号(角色)、生产账号(角色)中进行快捷的切换。

开发账号和生产账号的切换

假设一个公司里面有两种账号,生产账号开发账号。开发账号中的用户有时候需要访问生产账号中的资源,比如将开发环境的代码推送到生产环境中等。

如下图所示,我们可以让开发账号拥有一定的访问权限,让其访问生产账号中的S3资源。

  1. 生产账号中的管理员需要在IAM中创建一个新的角色UpdateAPP,在角色中定义了策略(Policy),策略具体定义了允许特定的AWS账号ID访问名为productionapp的S3存储桶。需要使用以下策略:

{"Version": "2012-10-17","Statement": [{"Effect": "Allow","Action": "s3:ListAllMyBuckets","Resource": "*"},{"Effect": "Allow","Action": ["s3:ListBucket","s3:GetBucketLocation"],"Resource": "arn:aws:s3:::productionapp"},{"Effect": "Allow","Action": ["s3:GetObject","s3:PutObject","s3:DeleteObject"],"Resource": "arn:aws:s3:::productionapp/*"}]}

2. 在开发账户中,管理员向开发人员组的成员授权切换角色的权限。向开发人员组授予针对UpdateApp角色调用AWS Security Token Service (AWS STS) AssumeRole API 的权限。需要添加如下策略:

{"Version": "2012-10-17","Statement": {"Effect": "Allow","Action": "sts:AssumeRole","Resource": "arn:aws:iam::PRODUCTION-ACCOUNT-ID:role/UpdateApp"}}

3. 用户请求切换角色

  1. 可以在AWS控制台使用Switch Role的按钮切换到生产账号
  2. 或者使用AWS API/CLI,使用AssumeRole函数获取UpdateAPP角色的凭证

4. AWS STS返回临时凭证

5. 临时凭证允许访问AWS资源,这样切换后的角色就可以访问productionapp的存储桶里的内容了。

资源组和标签

讲解AWS的资源组(Resource Group)标签(Tagging),巧妙地使用这两个工具可以帮助我们更有效率地管理大规模的AWS资源。

Security Token Service

使用AWS Security Token Service (STS)服务,你可以创建和控制对你的AWS资源访问的安全凭证。

这种临时的凭证的工作方式和长期存在于AWS账户中的IAM用户的工作方式类似,但会存在以下的区别:

  • STS服务产生的凭证是临时的,它的有效期可以是几分钟到几小时,一旦过了这个时效时间,你的凭证就会失去作用,无法再访问相应的资源
  • IAM会长期保存在AWS账户中,而临时凭证只有在需要的时候才动态生成

STS的临时凭证可以由以下几种方式产生:

  • 企业联合身份验证(Federation)
    • 使用了基于Security Assertion Markup Language (SAML) 的标准
    • 可以使用微软Active Directory的用户来获取临时权限,不需要创建IAM用户
    • 支持单点登录(Single Sign On, SSO)
  • Web联合身份验证(Federation with Mobile Apps)
    • 使用已知的第三方身份供应商(Amazon, Facebook, Google或其他OpenID提供商)来登录
  • 跨账户访问
    • 让一个账号内的用户访问同一个组织(Organization)内其他账号的AWS资源

如下图所示,是用户使用STS服务访问AWS资源的完整过程。

  1. 用户在应用程序内输入账号密码,应用程序将其发送给Identity Provider (Identity Broker)
  2. Identity Provider (IdP)将用户名和密码发送到企业的LDAP目录进行验证
  3. 验证成功后IdP发送一个SAML认证响应给应用程序
  4. 应用程序使用AssumeRoleWithSAMLRequest API发送SMAL请求给STS
  5. STS返回临时安全凭证给应用程序,其中包括了AccessKeyId, SecretAccessKey, SessionToken和时限(1到36小时)
  6. 应用程序使用临时凭证访问S3存储桶

知识点

以上的步骤看起来感觉非常复杂,但在AWS助理解决方案架构师的考试中,我们不需要完全熟悉以上的所有步骤,只需要记住以下这些要点即可。

  • LDAP和AWS STS之间的通信需要通过Identity Broker (IdP),而IdP一般需要自己开发
  • IdP总是先跟LDAP认证,审核用户名密码,然后再和STS通信
  • 应用程序最后会使用临时访问权限访问AWS的资源

另外,STS和微软AD域集成的时候,可以做到用户使用自己企业LDAP目录的AD账号密码来登录AWS管理控制台。其中的Identity Broker位置变成了ADFS (Active Directory Federation Services)。

Amazon WorkSpaces (VDI)

使用Amazon WorkSpaces,你可以为用户预配置基于云的虚拟Windows桌面或者Linux桌面。WorkSpaces即远程虚拟桌面,或者VDI (Virtual Desktop infrastructure)。

WorkSpaces就是一台可以完成你每天工作任务的电脑,上面包含了你所需要的计算资源、存储空间和一系列软件程序。你可以在任何支持的设备(例如PC,MAC,Chromebook,iPad,Kindle等)上使用Amazon WorkSpaces的客户端软件来连接你的WorkSpaces。

发表评论

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据