

# IAM 的商用案例
<a name="business-use-cases"></a>

IAM 的简单商用案例可帮助您了解使用该服务来控制您的用户所拥有的 AWS 访问权限的基本方法。此使用案例只是粗略介绍，并未涵盖您使用 IAM API 来实现所需结果的技术性细节。

此使用案例将探讨一家名为 Example Corp 的虚构公司可能使用 IAM 的两种典型方式。第一种场景考虑 Amazon Elastic Compute Cloud (Amazon EC2)。第二种场景考虑 Amazon Simple Storage Service (Amazon S3)。

有关通过 AWS 的其他服务使用 IAM 的更多信息，请参阅 [使用 IAM 的 AWS 服务](reference_aws-services-that-work-with-iam.md)。

**Topics**
+ [Example Corp 的初始设置](#InitSetupExampleCorp_IAM)
+ [将 IAM 与 Amazon EC2 结合使用的使用案例](#UseCase_EC2)
+ [将 IAM 与 Amazon S3 结合使用的使用案例](#UseCase_S3)

## Example Corp 的初始设置
<a name="InitSetupExampleCorp_IAM"></a>

Nikki Wolf 和 Mateo Jackson 是 Example Corp 的创始人。公司成立时，他们创建了一个 AWS 账户 并建立了 AWS IAM Identity Center（IAM Identity Center）来创建管理账户以使用他们的 AWS 资源。当您为管理用户设置帐户访问权限时，IAM Identity Center 会创建相应的 IAM 角色。该角色由 IAM Identity Center 控制，在相关 AWS 账户 中创建，并将在 **AdministratorAccess** 权限集中指定的策略附加到该角色。

由于他们现在拥有管理员账户，Nikki 和 Mateo 不再需要使用其根用户身份来访问他们的 AWS 账户。他们计划仅将根用户用于完成仅限根用户开展的任务。在查看安全最佳实践之后，他们为根用户凭证配置多重身份验证（MFA），并决定如何保其护根用户凭证。

随着公司的发展，他们雇佣了员工，担任开发人员、管理员、测试人员、管理人员及系统管理员。Nikki 负责运营，而 Mateo 管理工程团队。他们建立了一个 Active Directory 域服务器来管理员工账户以及对公司内部资源的访问。

为了让员工访问 AWS 资源，他们使用 IAM Identity Center 将公司的 Active Directory 连接到他们的 AWS 账户。

由于他们将 Active Directory 连接到 IAM Identity Center，因此用户、组和组成员关系都是已同步和已定义的。他们必须为不同的组分配权限集和角色，以给予用户正确的 AWS 资源访问级别。他们在 AWS 管理控制台 中使用 [工作职能的 AWS 托管策略](access_policies_job-functions.md) 来创建以下权限集：
+ *管理员*
+ *Billing*
+ *开发人员*
+ *网络管理员*
+ *数据库管理员*
+ *系统管理员*
+ *支持用户*

然后，他们会将这些权限集分配给相应的角色，这些角色是分配至其 Active Directory 组的角色。

有关描述 IAM Identity Center 初始配置的分步指南，请参阅《AWS IAM Identity Center 用户指南》**中的[入门](https://docs.aws.amazon.com/singlesignon/latest/userguide/get-started-assign-account-access-admin-user.html)。有关配置 IAM Identity Center 用户访问权限的更多信息，请参阅《AWS IAM Identity Center 用户指南》**中的 [AWS 账户单点登录访问权限](https://docs.aws.amazon.com/singlesignon/latest/userguide/useracces.html)。

## 将 IAM 与 Amazon EC2 结合使用的使用案例
<a name="UseCase_EC2"></a>

类似 Example Corp 的公司通常使用 IAM 与类似 Amazon EC2 的服务互动。如要理解使用案例的这一部分，您需要对 Amazon EC2 有基本的了解。有关 Amazon EC2 的更多信息，请转至《[Amazon EC2 用户指南](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/)》。

### 用户组的 Amazon EC2 权限
<a name="EC2_PermissionsGroups"></a>

为提供“周边”控制，Nikki 对 AllUsers 用户组附加了一个策略。如果来源 IP 地址位于 Example Corp 企业网络外部，则该策略拒绝用户的任何 AWS 请求。

在 Example Corp，不同的 IAM 组需要不同的权限：
+ **System administrators** - 需要创建和管理 AMI、实例、快照、卷、安全组等的权限。Nikki 向 SysAdmins 用户组附加了一个 `AmazonEC2FullAccess` AWS 托管策略，以为该用户组成员授予使用所有 Amazon EC2 操作的权限。
+ **Developers**（开发人员）- 只需能够使用实例即可。因此，Mateo 创建并向 Developers 用户组附加了策略，以允许开发人员调用 `DescribeInstances`、`RunInstances`、`StopInstances`、`StartInstances` 及 `TerminateInstances`。
**注意**  
Amazon EC2 使用 SSH 密钥、Windows 密码及安全组来控制哪些人能够访问特定 Amazon EC2 实例的操作系统。在 IAM 系统中，无法允许或拒绝访问特定实例的操作系统。
+ **Support 用户** – 无法执行任何 Amazon EC2 操作，但可列出当前可用的 Amazon EC2 资源。因此，Nikki 创建并向 Support 用户组附加了一个策略，以便仅允许该组成员调用 Amazon EC2“Describe”API 操作。

如需有关上述策略具体形式的示例，请参阅《*Amazon EC2 用户指南*》中的 [IAM 基于身份的策略示例](access_policies_examples.md) 和[使用 AWS Identity and Access Management](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/index.html?UsingIAM.html)。

### 用户的工作职能更改
<a name="EC2_UserRoleChange"></a>

此时，其中一位开发人员 Paulo Santos 的工作职能发生转变，成为一名管理人员。作为一名管理人员，Paulo 成为 Support 用户组的一员，这样他就可以为开发人员开立支持案例。Mateo 将 Paulo 从 Developers 用户组移至 Support 用户组。因此，他与 Amazon EC2 实例交互的能力受到了限制。他无法启动或启用实例。即使他是启动或启用实例的用户，也无法停止或终止现有实例。他只能列出 Example Corp 用户已启动的实例。

## 将 IAM 与 Amazon S3 结合使用的使用案例
<a name="UseCase_S3"></a>

类似 Example Corp 的公司通常还通过 Amazon S3 使用 IAM。John 已为公司创建一个名为 *amzn-s3-demo-bucket* 的 Amazon S3 存储桶。

### 创建其他用户和用户组
<a name="S3_CreationOtherUsersGroups"></a>

作为员工，Zhang Wei 和 Mary Major 都需要能够在公司的存储桶中创建自己的数据。他们还需要读取和写入所有开发人员都要处理的共享数据。为做到这一点，Mateo 采用 Amazon S3 键前缀方案，在 amzn-s3-demo-bucket 中按照逻辑方式排列数据，如下图所示。

```
/amzn-s3-demo-bucket
    /home
        /zhang
        /major
    /share
        /developers
        /managers
```

Mateo 针对每位员工将 `/amzn-s3-demo-bucket` 分隔成一系列主目录，并为开发人员和管理人员组留出一个共享区域。

现在，Mateo 创建一组策略，以便向用户和用户组分配权限：
+ **Zhang 的主目录访问** – Mateo 向 Wei 附加的策略允许后者读取、写入和列出任何带 Amazon S3 键前缀 `/amzn-s3-demo-bucket/home/zhang/` 的对象 
+ **Major 的主目录访问** – Mateo 向 Mary 附加的策略允许后者读取、写入和列出任何带 Amazon S3 键前缀 `/amzn-s3-demo-bucket/home/major/` 的对象
+ **Developers 用户组的共享目录访问** – Mateo 向该用户组附加的策略允许开发人员读取、写入和列出 `/amzn-s3-demo-bucket/share/developers/` 中的任何对象
+ **Managers 用户组的共享目录访问** – Mateo 向该用户组附加的策略允许管理人员读取、写入和列出 `/amzn-s3-demo-bucket/share/managers/` 中的对象

**注意**  
对于创建存储桶或对象的用户，Amazon S3 不会自动授予其对存储桶或对象执行其他操作的权限。因此，在您的 IAM policy 中，您必须显式授予用户使用他们所创建的 Amazon S3 资源的权限。

有关这些策略具体形式的示例，请参阅 *Amazon Simple Storage Service 用户指南*中的[访问控制](https://docs.aws.amazon.com/AmazonS3/latest/userguide/UsingAuthAccess.html)。有关如何在运行时对策略进行评估的信息，请参阅[策略评估逻辑](reference_policies_evaluation-logic.md)。

### 用户的工作职能更改
<a name="S3_UserRoleChange"></a>

此时，其中一位开发人员 Zhang Wei 的工作职能发生转变，成为一名管理人员。我们假设他不再需要访问 `share/developers` 目录中的文档。作为管理员，Mateo 将 Wei 从 `Developers` 用户组移至 `Managers` 用户组。通过简单的重新分配，Wei 将自动获得所有授予给 `Managers` 用户组的权限，但将无法再访问 `share/developers` 目录中的数据。

### 与第三方企业集成
<a name="S3_3rdPartyBusiness"></a>

组织经常与合作公司、顾问及承包商合作。Example Corp 是 Widget Company 的合作伙伴，而 Widget Company 的员工 Shirley Rodriguez 需要将数据放入存储桶中，以供 Example Corp 使用。Nikki 创建了一个名为 *WidgetCo* 的用户组和名为 `Shirley` 的用户，并将 Shirley 添加至 WidgetCo 用户组。Nikki 还创建了一个名为 *amzn-s3-demo-bucket1* 的专用存储桶以供 Shirley 使用。

Nikki 更新现有策略或添加新的策略来满足合作伙伴 Widget Company 的需求。例如，Nikki 可新建用于拒绝 WidgetCo 用户组成员使用任何操作（写入操作除外）的策略。除非有一个广泛的策略，授予所有用户访问大量 Amazon S3 操作的许可，否则此策略将非常必要。