关于AWS IAM的简介

297 阅读6分钟

Introduction To AWS IAM

让我们开始与亚马逊网络服务合作,这是地球上最大的云平台。要开始使用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的主要好处:如果密码被盗或被黑,账户就不会受到影响

MFA devices options in AWS
More MFA Device Options AWS


用户如何访问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访问顾问