

# 对 Amazon Elastic Container Service 标识和访问进行故障排除
<a name="security_iam_troubleshoot"></a>

可以使用以下信息，帮助您诊断和修复在使用 Amazon ECS 和 IAM 时可能遇到的常见问题。

**Topics**
+ [我无权在 Amazon ECS 中执行操作](#security_iam_troubleshoot-no-permissions)
+ [我无权执行 iam:PassRole](#security_iam_troubleshoot-passrole)
+ [我希望允许我的 AWS 账户 以外的人访问我的 Amazon ECS 资源](#security_iam_troubleshoot-cross-account-access)
+ [我的 Amazon ECS 托管实例实例配置文件有问题](#security_iam_instance-profile)
+ [其他故障排除资源](#security_iam_troubleshoot-additional-errors)

## 我无权在 Amazon ECS 中执行操作
<a name="security_iam_troubleshoot-no-permissions"></a>

如果您收到错误提示，指明您无权执行某个操作，则必须更新策略以允许执行该操作。

当 `mateojackson` IAM 用户尝试使用控制台查看有关虚构 `{{my-example-widget}}` 资源的详细信息，但不拥有虚构 `ecs:{{GetWidget}}` 权限时，会发生以下示例错误。

```
User: arn:aws:iam::123456789012:user/mateojackson is not authorized to perform: ecs:{{GetWidget}} on resource: {{my-example-widget}}
```

在此情况下，必须更新 `mateojackson` 用户的策略，以允许使用 `ecs:{{GetWidget}}` 操作访问 `{{my-example-widget}}` 资源。

如果您需要帮助，请联系 AWS 管理员。您的管理员是提供登录凭证的人。

## 我无权执行 iam:PassRole
<a name="security_iam_troubleshoot-passrole"></a>

如果您收到一个错误，表明您无权执行 `iam:PassRole` 操作，则必须更新策略以允许您将角色传递给 Amazon ECS。

有些 AWS 服务 允许将现有角色传递到该服务，而不是创建新服务角色或服务关联角色。为此，您必须具有将角色传递到服务的权限。

当名为 `marymajor` 的 IAM 用户尝试使用控制台在 Amazon ECS 中执行操作时，会发生以下示例错误。但是，服务必须具有服务角色所授予的权限才可执行此操作。Mary 不具有将角色传递到服务的权限。

```
User: arn:aws:iam::123456789012:user/marymajor is not authorized to perform: iam:PassRole
```

在这种情况下，必须更新 Mary 的策略以允许她执行 `iam:PassRole` 操作。

如果您需要帮助，请联系 AWS 管理员。您的管理员是提供登录凭证的人。

如果您使用 Amazon ECS 托管实例并收到此错误，则实例角色名称可能与托管式策略要求的命名约定不匹配。有关更多信息，请参阅 [我的 Amazon ECS 托管实例实例配置文件有问题](#security_iam_instance-profile)。

## 我希望允许我的 AWS 账户 以外的人访问我的 Amazon ECS 资源
<a name="security_iam_troubleshoot-cross-account-access"></a>

您可以创建一个角色，以便其他账户中的用户或您组织外的人员可以使用该角色来访问您的资源。您可以指定谁值得信赖，可以代入角色。对于支持基于资源的策略或访问控制列表（ACL）的服务，您可以使用这些策略向人员授予对您的资源的访问权。

要了解更多信息，请参阅以下内容：
+ 要了解 Amazon ECS 是否支持这些功能，请参阅 [如何将 Amazon Elastic Container Service 与 IAM 结合使用](security_iam_service-with-iam.md)。
+ 要了解如何为您拥有的 AWS 账户中的资源提供访问权限，请参阅《IAM 用户指南》**中的[为您拥有的另一个 AWS 账户中的 IAM 用户提供访问权限](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_common-scenarios_aws-accounts.html)。
+ 要了解如何为第三方 AWS 账户 提供您的资源的访问权限，请参阅《IAM 用户指南》**中的[为第三方拥有的 AWS 账户 提供访问权限](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_common-scenarios_third-party.html)。
+ 要了解如何通过身份联合验证提供访问权限，请参阅《IAM 用户指南》**中的[为经过外部身份验证的用户（身份联合验证）提供访问权限](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_common-scenarios_federated-users.html)。
+ 要了解使用角色和基于资源的策略进行跨账户访问之间的差别，请参阅《IAM 用户指南》**中的 [IAM 中的跨账户资源访问](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies-cross-account-resource-access.html)。

## 我的 Amazon ECS 托管实例实例配置文件有问题
<a name="security_iam_instance-profile"></a>

如果使用 `AmazonECSInfrastructureRolePolicyForManagedInstances` 托管式策略，则实例角色名称必须以 `ecsInstanceRole` 开头。该策略将 `iam:PassRole` 的作用范围限定为 `arn:aws:iam::*:role/ecsInstanceRole*`，因此名称不匹配会导致任务启动时出现授权错误。

当您从 `AWS::IAM::Role` 资源中省略 `RoleName` 时，CloudFormation 通常会出现这种情况，因为 CloudFormation 会自动生成 `MyStack-InstanceRole-ABC123` 等名称，而这些名称与策略条件不匹配。

要解决该问题，可以执行下列操作之一：
+ 将 `RoleName: ecsInstanceRole` 添加到 `AWS::IAM::Role` 资源中，使名称与托管式策略匹配。
+ 向基础设施角色添加针对实例角色 ARN 的显式 `iam:PassRole` 内联策略。

有关 CloudFormation 模板和详细步骤，请参阅[使用 CloudFormation 创建实例配置文件](managed-instances-instance-profile.md#create-instance-profile-cfn)。

## 其他故障排除资源
<a name="security_iam_troubleshoot-additional-errors"></a>

以下页面提供了有关错误代码的信息：
+  [Amazon ECS 已停止任务错误消息](stopped-task-error-codes.md) 
+  [查看 Amazon ECS 服务事件消息](service-event-messages.md) 