Logo
Section 1 / 4

AWS IAM 简介

了解 AWS IAM 及其一些重要组件。

导入

AWS IAM 简介

了解 AWS IAM 及其一些重要组件。

身份和访问管理(IAM) 是 AWS 提供的一项安全服务,允许我们控制对 AWS 账户及服务的访问。AWS IAM 是一项全局服务,对 IAM 的任何更改都会在账户的所有区域中立即生效。

我们可以通过红色框标记的位置看到 IAM 是一个全局服务。当我们查看 EC2 或 Lambda 等其他服务时,会发现显示的是我们的区域名称,而不是“Global”。

IAM 实体

如本课程所示,IAM 通过使用用户、组、角色和策略等实体来实现 AWS 账户的安全控制。

用户

IAM 用户 是组织中用于访问 AWS 账户的身份。每个用户都拥有与账户关联的凭证。

我们还需要为 IAM 用户附加策略(权限),以授予其对 AWS 账户的特定访问权限。这使我们能够控制用户的访问范围。例如,我们可以为高级开发人员提供高权限访问,而为初级开发人员提供有限的访问权限。

我们已经使用过 IAM:创建 AWS 账户时,AWS 自动为我们创建了一个根用户。

注意: 你应仅使用根用户来设置 AWS 账户。之后,无论是你自己还是需要访问账户的其他人,都应通过各自的 IAM 用户进行操作。
如本课程后续内容所示,AWS 中某些功能只能由根用户控制。

组

IAM 组 是一组 IAM 用户的集合。我们可以将策略(权限)统一分配给一组用户,从而简化权限管理。

让我们通过一个例子来说明这一点。

我们看到两个 IAM 组,每组包含九个用户。管理员组中的所有九个用户都将继承该组附加的策略(权限)。同样,所有开发人员也将继承开发组附加的策略。一个用户可以属于多个组。

注意: 在 IAM 中,当用户属于多个组时,他们会继承所有所属组的权限。但 AWS 遵循“拒绝优先”原则。如果用户所属的任意一个组明确拒绝某项权限,则该拒绝将覆盖其他允许的权限。因此,如果某些用户同时属于管理员组和高级开发人员组,而高级开发人员组的策略明确禁止访问某个 AWS 服务,那么即使管理员组允许该访问,该用户也无法执行此操作。

角色

IAM 角色 是由受信任的身份提供商或 AWS 服务所承担的实体。与 IAM 用户和组类似,IAM 角色也附有策略。这些角色随后被绑定到 AWS 服务上,以允许该服务执行特定操作。

例如,如果需要让一个 EC2 实例读取 SQS 中的消息,就必须将 SQS 读取策略附加到该 EC2 实例的角色上。

每个 AWS 角色都有一个称为“信任策略”的配置。信任策略 定义了哪些服务或实体可以承担该角色。例如,如果一个角色具有以下信任策略,则它只能由 AWS EC2 服务使用(即只能附加到 EC2 实例上):

1{ 2 "Version": "2012-10-17", 3 "Statement": [ 4 { 5 "Effect": "Allow", 6 "Principal": { 7 "Service": "ec2.amazonaws.com" 8 }, 9 "Action": "sts:AssumeRole" 10 } 11 ] 12}

注意: IAM 用户用于人。
IAM 角色用于 AWS 服务和身份提供商。我们不能将 IAM 角色直接关联到用户或组。

策略

IAM 策略 是一组用于控制对 AWS 服务访问权限的规则。策略以 JSON 格式存储在 AWS 中。我们之前讨论过可应用于用户、组和角色的策略。下面我们来看一个 IAM 策略示例:

1{ 2 "Version": "2012-10-17", 3 "Statement": [ 4 { 5 "Effect": "Allow", 6 "Action": [ 7 "s3:Get*", 8 "s3:List*" 9 ], 10 "Resource": "*" 11 }, 12 { 13 "Effect": "Deny", 14 "Action": [ 15 "ec2:*" 16 ], 17 "Resource": "*" 18 } 19 ] 20}

第 2 行指定的版本号("Version": "2012-10-17")只是当前策略语言的版本,无需记忆。但我们需要注意的是,该策略包含两条语句,一条来自第 4–11 行,另一条来自第 12–18 行。

  • 第一条语句("Effect": "Allow")允许执行所有 S3 资源上的 s3:Get* 和 s3:List* 操作("Resource": "*")。
  • 第二条语句("Effect": "Deny")禁止执行任何 EC2 操作(ec2:*)在任何资源上("Resource": "*")。

因此,如果将此策略附加到某个用户,该用户将能够对所有 S3 存储桶执行列出和获取操作,但无法在 EC2 控制台中执行任何操作。

在 AWS 中,应遵循最小权限原则(即不要授予用户不必要的权限)。

注意: 如果某项权限被显式拒绝,无论其他语句是否允许,该权限最终结果始终为拒绝。
在我们的示例中,所有 EC2 操作都被拒绝。假设有一个用户拥有此策略,并为其附加了以下策略:

1{ 2 "Version": "2012-10-17", 3 "Statement": [ 4 { 5 "Effect": "Allow", 6 "Action": [ 7 "ec2:*" 8 ], 9 "Resource": "*" 10 } 11 ] 12}

由于其中一条策略已显式拒绝 ec2:* 操作,因此第二条策略不会生效。最终结果是所有 EC2 操作均被拒绝。

开始使用 AWS

IAM 实践