

# 在您拥有的其他 Amazon Web Services 账户 中 IAM 用户的访问权限
<a name="id_roles_common-scenarios_aws-accounts"></a>

您可以向 IAM 用户授予权限，以便切换至您 Amazon Web Services 账户 中的角色，或切换至您拥有的其他 Amazon Web Services 账户 中定义的角色。

**注意**  
如果要授予对您未拥有或无法控制的账户的访问权限，请参阅本主题后面的[访问第三方拥有的 Amazon Web Services 账户](id_roles_common-scenarios_third-party.md)。

假设您拥有一个企业关键型 Amazon EC2 实例。您可以创建具有这些权限的角色，而不是直接向用户授予终止实例的权限。然后，允许管理员在需要终止实例时切换为该角色。这样，可向实例添加以下几层保护：
+ 您必须向用户显式授予担任该角色的权限。
+ 用户必须使用 Amazon Web Services 管理控制台主动切换为该角色，或使用 Amazon CLI 或 Amazon API 担任角色。
+ 您可以向该角色添加多重身份验证 (MFA) 保护，以便只有登录 MFA 设备的用户才能担任该角色。要了解如何配置角色以使担任角色的用户必须先使用多重身份验证 (MFA) 进行身份验证，请参阅[使用 MFA 保护 API 访问](id_credentials_mfa_configure-api-require.md)。

我们建议使用该方法以实施*最小权限原则*。这意味着，仅限特定任务需要时，才能使用提升的权限。借助角色，您可以帮助防止对敏感环境进行意外更改，如果您将它们与[审核](cloudtrail-integration.md)合并以帮助确保仅在需要时才使用角色，这尤其适用。

在您出于此目的创建角色时，可在该角色的信任策略的 `Principal` 元素中按 ID 指定其用户需要访问权限的账户。随后可以向这些其他账户中的特定用户授予切换到角色的权限。要了解您信任区域之外的账户（受信任的企业或账户）中的主体是否有权承担您的角色，请参阅[什么是 IAM Access Analyzer？](https://docs.amazonaws.cn/IAM/latest/UserGuide/what-is-access-analyzer.html)。

一个账户中的用户可以切换为相同或不同账户中的角色。使用角色过程中，用户只能执行角色允许的操作并且只能访问角色允许的资源；其原始用户权限处于暂停状态。用户退出角色时，恢复原始用户权限。

## 使用不同的开发和生产账户的示例方案
<a name="id_roles_common-scenarios_aws-accounts-example"></a>

假设您的组织拥有多个 Amazon Web Services 账户 以将开发环境与生产环境隔离。开发账户中的用户有时可能需要访问生产账户中的资源。例如，在促进从开发环境到生产环境的更新时，您可能需要进行跨账户访问。尽管您可以为在两个账户中工作的用户创建单独的身份 (和密码)，多个账户的凭证管理还是会为身份管理带来难题。在以下图表中，所有用户都通过开发账户进行管理，但一些开发人员需要对生产账户进行有限访问。开发账户有两个组：测试人员和开发人员，每个组有其自身的策略。

![\[使用角色向不同账户中的用户委托权限\]](http://docs.amazonaws.cn/IAM/latest/UserGuide/images/roles-usingroletodelegate.png)


1. 在生产账户中，管理员使用 IAM 在该账户中创建 `UpdateApp` 角色。在角色中，管理员定义信任策略，该策略将开发账户指定为 `Principal`，这意味着开发账户中的授权用户可以使用 `UpdateApp` 角色。管理员还为角色定义权限策略，以指定对名为 `productionapp` 的 Amazon S3 存储桶的读取和写入权限。

   然后，管理员相应信息与需要担任角色的所有人共享。该信息是角色的账号和名称（对于 Amazon 控制台用户）或 Amazon Resource Name (ARN)（用于 Amazon CLI 或 Amazon API 访问）。角色 ARN 类似于 `arn:aws:iam::123456789012:role/UpdateApp`，其中角色名为 `UpdateApp`，角色采用账号 123456789012 进行创建。
**注意**  
管理员可以选择配置角色，以便担任角色的用户必须先使用多重身份验证 (MFA) 进行身份验证。有关更多信息，请参阅 [使用 MFA 保护 API 访问](id_credentials_mfa_configure-api-require.md)。

1. 在开发账户中，管理员向开发人员组的成员授予切换为角色的权限。执行此操作的方法是向开发人员组授予针对 `UpdateApp` 角色调用 Amazon Security Token Service (Amazon STS) `AssumeRole` API 的权限。开发账户中开发人员组的所有 IAM 用户现在都可以切换为生产账户中的 `UpdateApp` 角色。不在开发人员组中的其他用户无权切换为该角色，因此无法访问生产账户中的 S3 存储桶。

1. 用户请求切换为角色：
   + Amazon 控制台：用户选择导航栏上的账户名并选择 **Switch Role (切换角色)**。用户指定账户 ID (或别名) 和角色名称。或者，用户可以单击管理员在电子邮件中发送的链接。通过该链接，用户可以转到已填写详细信息的 **Switch Role** 页面。
   + Amazon API/Amazon CLI：开发账户中开发人员组的用户调用 `AssumeRole` 函数以获取 `UpdateApp` 角色的凭证。用户将 `UpdateApp` 角色的 ARN 指定为调用的一部分。如果测试人员组中的用户发出相同请求，请求将失败，因为测试人员没有针对 `UpdateApp` 角色 ARN 调用 `AssumeRole` 的权限。

1. Amazon STS 返回临时凭证：
   + Amazon 控制台：Amazon STS 使用角色的信任策略来验证请求，以确保请求来自受信任实体（即开发账户）。验证完成后，Amazon STS 向 Amazon 控制台返回[临时安全凭证](https://docs.amazonaws.cn/STS/latest/UsingSTS/Welcome.html)。
   + API/CLI：Amazon STS 根据角色的信任策略来验证请求，以确保请求来自受信任实体 (即开发账户)。验证完成后，Amazon STS 向应用程序返回[临时安全凭证](https://docs.amazonaws.cn/STS/latest/UsingSTS/Welcome.html)。

1. 临时凭证允许访问 Amazon 资源：
   + Amazon 控制台：Amazon 控制台在所有后续控制台操作中代表用户使用临时凭证，在本例中是用于读取和写入 `productionapp` 存储桶。该控制台无法访问生产账户中的任何其他资源。用户退出角色时，用户的权限恢复为切换为角色之前所拥有的原始权限。
   + API/CLI：应用程序使用临时安全凭证更新 `productionapp` 存储桶。应用程序只能使用临时安全凭证读取和写入 `productionapp` 存储桶，无法访问生产账户的任何其他资源。应用程序不必退出角色，只需在后续 API 调用中停止使用临时凭证并使用原始凭证。

## 其他资源
<a name="id_roles_common-scenarios_more-info"></a>

有关更多信息，请参阅下列内容：
+ [IAM 教程：使用 IAM 角色委托跨 Amazon 账户的访问权限](tutorial_cross-account-with-roles.md)