让我们开始与亚马逊网络服务合作,这是地球上最大的云平台。要开始使用AWS,你应该从学习IAM或身份和访问管理开始。IAM是一个全球性的服务,你可以在这里创建用户并将他们分配到组。当你第一次注册AWS账户时,你会被分配一个根账户。当然,根用户是全能的,你可以用这么大的权限做一些你可能不打算做的事情。这就是为什么你在使用AWS时首先要做的事情之一是利用IAM来创建一个用户,供你使用,而不是根账户。
IAM用户和组
一个IAM用户组是一个IAM用户的集合。用户组让你为多个用户指定权限,这可以使你更容易管理这些用户的权限。例如,你可以有一个名为Admins的用户组,并赋予该用户组典型的管理员权限。
- IAM = 身份和访问管理,全球服务
- 默认创建的根账户,不应该被使用或共享
- 用户是你组织内的人,可以被分组
- 组只包含用户,不包含其他组
- 用户不一定要属于一个组,用户可以属于多个组
IAM权限
权限让你指定对AWS资源的访问。权限被授予IAM实体(用户、组和角色),默认情况下,这些实体开始没有权限。换句话说,IAM实体在AWS中什么都不能做,直到你授予他们你想要的权限。
- 用户或组可以被分配称为策略的JSON文件
- 这些策略定义了用户的权限
- 在AWS中,你应用最小特权原则:不要给用户更多需要的权限
IAM策略结构
IAM策略定义了行动的权限,无论你用什么方法来执行操作。例如,如果一个策略允许GetUser操作,那么拥有该策略的用户可以从AWS管理控制台、AWS CLI或AWS API中获得用户信息。
由以下内容组成。
- 版本:政策语言版本,总是包括 "2012-10-17″。
- Id:政策的标识符(可选)。
- 声明:一个或多个单独的声明(必需)。
一个政策的例子。
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": "service-prefix:action-name",
"Resource": "*",
"Condition": {
"DateGreaterThan": {"aws:CurrentTime": "2020-04-01T00:00:00Z"},
"DateLessThan": {"aws:CurrentTime": "2020-06-30T23:59:59Z"}
}
}
]
}
声明包括
- Sid:声明的标识符(可选)
- 效果:声明是否允许记录访问(允许, 拒绝)
- 主体:该政策适用的账户/用户/罗列者
- 行动:该政策允许记录的清单
- 资源:行动所适用的资源清单
- 条件:该政策无效时的条件(可选)
IAM密码策略
默认的密码策略强制执行以下条件。最小密码长度为8个字符,最大长度为128个字符。以下混合的字符类型中至少有三个:大写、小写、数字和!@ # $ % ^ & * ( ) _ + - = [ ] { }| ' 符号。
-
强大的密码=为你的账户提供更高的安全性
-
在AWS中,你可以设置一个密码策略。
-
设置一个最小的密码长度
-
要求特定的字符类型。
-
包括大写字母
-
小写字母
-
数字
-
非字母数字字符
-
允许所有IAM用户更改自己的密码
-
要求用户在一段时间后改变他们的密码(密码到期)。
-
防止密码重复使用
多因素认证
AWS中的多因素认证(MFA)是一个简单的最佳实践,它在你的用户名和密码之上增加了一个额外的保护层。
- 用户可以访问你的账户,并可能改变配置或删除你的AWS账户中的资源
- 你想保护你的根账户和IAM用户
- MFA=你知道的密码+你拥有的安全设备
- MFA的主要好处:如果密码被盗或被黑,账户就不会受到影响


用户如何访问AWS?
-
要访问AWS,你有三个选择。
-
AWS管理控制台(由密码+MFA保护)
-
AWS命令行界面(CLI):由访问密钥保护
-
AWS软件开发者工具包(SDK)--用于代码:受访问密钥保护
-
访问密钥是通过AWS控制台生成的
-
用户管理他们自己的访问密钥
-
访问密钥是秘密的,就像一个密码。不要分享它们 Access Key ID ~= 用户名
-
秘密访问密钥 ~= 密码
什么是AWS命令行界面?
- 一种工具,使您能够在您的命令行外壳中使用命令与AWS服务互动
- 直接访问AWS服务的公共API
- 你可以开发脚本来管理你的资源
- 它是开源的github.com/aws/aws-cli
- 替代使用AWS管理控制台的方法
什么是亚马逊SDK?
AWS SDK允许您用您选择的编程语言在AWS上轻松开发应用程序。
- AWS软件开发工具包(AWS SDK)
- 特定语言的API(一组库)。
- 使您能够以编程方式访问和管理AWS服务
- 嵌入您的应用程序中
- 支持
- SDKs(JavaScript,Python,PHP,.NET,Ruby,Java,Go,Node.js,C++)
- 移动SDK(安卓,iOS,...)。
- 物联网设备SDK(嵌入式C,Arduino,...)
- 例子。AWS CLI是建立在AWS SDK for Python上的。
服务的IAM角色
一个AWS身份和访问管理(IAM)角色类似于一个用户,它是一个具有权限策略的AWS身份,决定了该身份在AWS中可以做什么,不可以做什么。
-
一些AWS服务将需要代表你执行行动
-
为此,我们将用IAM角色为AWS服务分配权限
-
常见的角色。
-
EC2实例角色
-
Lambda函数的角色
-
CloudFormation的角色
IAM安全工具
身份和访问管理(IAM)工具旨在管理身份(用户)和访问(认证和授权)。IAM工具的目标是从各个方面简化用户账户和权限的管理。在大多数情况下,IAM解决方案会让你定义一个策略。
-
IAM凭证报告(账户级)
-
一份列出你所有账户的用户和他们的各种凭证状态的报告
-
IAM访问顾问(用户级别)
-
访问顾问显示授予用户的服务权限以及这些服务最后被访问的时间。
-
你可以使用这些信息来修改你的策略。
IAM指南和最佳实践
- 除了AWS账户设置,不要使用根账户 一个物理用户=一个AWS用户
- 将用户分配给组,并将权限分配给组
- 创建一个强大的密码策略
- 使用并强制使用多因素认证(MFA)
- 创建和使用角色,为AWS服务赋予权限
- 使用访问密钥进行程序化访问(CLI / SDK)
- 使用IAM凭证报告审计您的帐户的权限 切勿共享IAM用户和访问密钥
你要对以下方面负责。
- 用户、组、角色、策略管理和监控
- 在所有账户上启用MFA
- 经常轮换你的所有钥匙
- 使用IAM工具来应用适当的权限
- 分析访问模式和审查权限
亚马逊身份访问管理概述
- 用户:映射到一个物理用户,有AWS控制台的密码
- 组:只包含用户
- 策略:JSON文件,概述了用户或组的权限 角色:用于EC2实例或AWS服务
- 安全性:MFA + 密码策略
- AWS CLI:使用命令行管理您的AWS服务
- AWS SDK:使用编程语言管理您的AWS服务 访问密钥:使用CLI或SDK访问AWS
- 审计:IAM凭证报告和IAM访问顾问
