
# 授予IAM用户传递委托给云服务的权限
在部分云服务中，您必须配置一个IAM委托给云服务，这个操作将允许云服务在后续的业务处理中切换到该委托身份上并代表您执行相关操作，这个配置操作即为传递委托（Pass Agency）给云服务。
![](https://support.huaweicloud.com/usermanual-iam5/public_sys-resources/note_3.0-zh-cn.png)
本章节提到的委托术语表示广义上的委托，包含[普通委托](https://support.huaweicloud.com/usermanual-iam/iam_01_0661.html)和[信任委托](https://support.huaweicloud.com/usermanual-iam5/iam_01_0915.html)两种，传递委托功能也支持普通委托和信任委托两种，但是云服务具体支持传递哪种委托依赖云服务具体实现，例如ECS目前只支持普通委托。
对于大多数云服务来讲，您只需要在配置阶段传递委托即可，而不是在云服务切换委托时再去指定委托。例如，您的应用程序在华为云ECS实例上运行，该应用程序需要具有一定权限的临时安全凭证用于访问华为云。当您部署应用程序后，您必须传递一个IAM委托给ECS服务，该IAM委托用于提供临时凭据给您部署的应用程序。您需要给这个IAM委托绑定必须的身份策略，这些权限就代表了您所部署的应用程序能够访问华为云资源的权限。这样，您部署的应用程序就可以在任何需要访问华为云的时候使用该委托凭证访问华为云了。
如果您账号下的IAM主体（IAM用户、IAM委托）需要为一个云服务传递委托时，这个IAM主体必须具有向云服务传递委托的权限，这样就可以帮助账号管理员保证IAM主体必须在有权限的情况下才能给云服务传递委托。如果您需要给某个IAM主体授予给云服务传递委托的权限，您必须给该IAM主体授予iam:agencies:pass的权限。
当您为某个IAM主体配置[iam:agencies:pass](https://support.huaweicloud.com/api-iam5/iam_02_1124.html#section0)权限时，您必须确保所传递委托中的权限不能超过您所授予的IAM主体本身具有的权限。例如，张三没有操作任何OBS桶的权限，如果张三可以传递IAM委托给云服务，且这个委托可以操作账号下的任何桶资源，那么该云服务就可以代表张三在应用程序中操作账号下的任何桶资源。
通常来说，一个IAM主体在调用云服务API时将委托URN作为参数传递给云服务，云服务会校验该IAM主体是否具有[iam:agencies:pass](https://support.huaweicloud.com/api-iam5/iam_02_1124.html#section0)的权限。为了限制IAM主体仅能传递某个IAM委托，您可以在IAM策略中使用Resources元素限定该IAM主体仅能传递某个/某些委托。
#### 身份策略示例
假如您想授予IAM用户张三能够给一个运行在华为云ECS上的应用程序传递一个IAM委托，您需要进行以下三个操作步骤：
1. 创建自定义身份策略并绑定至IAM委托上，保证传递给ECS服务的IAM委托权限最小化。
   ```
   {
   "Version": "5.0",
   "Statement": [{
   "Effect": "Allow",
   "Action": [
   "A list of the permissions the agency is allowed to use"
   ],
   "Resource": [
   "A list of the resources the agency is allowed to use"
   ]
   }]
   }
   ```
   
2. 创建IAM委托：需要创建给ECS云服务的委托，并为该IAM委托绑定[步骤1]中创建的身份策略。
3. 创建IAM身份策略允许获取以及传递委托给ECS，并为IAM用户张三绑定这个身份策略。在下述例子中使用了Resource元素限定了资源URN，在实际使用时您需要将其替换为实际的委托URN。
   ```
   {
   "Version": "5.0",
   "Statement": [{
   "Effect": "Allow",
   "Action": [
                           "iam:agencies:get*",
                           "iam:agencies:pass"
                   ],
   "Resource": [
                            "iam:*:{account_id}:agency:{agency_name}"
                   ]
   },
   {
   "Effect": "Allow",
   "Action": [
                           "iam:agencies:list*"
                   ]
   }]
   }
   ```
   
完成上述配置后，IAM用户张三就可以传递该委托给ECS了。运行在该ECS上的应用可以通过实例Metadata接口获取传递委托的临时安全凭证，该临时安全凭证的权限则为[步骤1]中所配置的权限。
#### 向云服务传递IAM委托的CTS日志
传递委托不是一个独立的API调用，传递委托仅仅是一个权限，这就意味着CTS日志中不会为IAM传递委托生成单独的审计日志。如果您希望在CTS日志中查看到什么委托传递给了什么云服务，您必须查看所有相关可以传递委托的云服务API调用的CTS日志。例如，您在创建ECS实例时请求参数中携带了某个IAM委托ID/IAM委托URN，那么CreateServers操作的审计日志中将会显示传递委托的记录。
