
# 生成临时安全凭证的权限
AssumeAgency API返回的临时安全凭证的权限由所切换的委托或信任委托的身份策略所决定，您可在创建或更新该委托或信任委托时定义其身份策略。
您也可以将[会话策略](https://support.huaweicloud.com/usermanual-iam5/iam_01_1104.html#iam_01_1104__section17501135104615)作为调用AssumeAgency API的参数（可选），进一步限制生成的临时安全凭证的权限，其权限是委托或者信任委托的身份策略与[会话策略](https://support.huaweicloud.com/usermanual-iam5/iam_01_1104.html#iam_01_1104__section17501135104615)的权限交集。
您可以在后续的API调用中使用新生成的临时安全凭证来访问拥有该委托或者信任委托的账号中的资源。
图1生成的临时安全凭证的权限   
![](https://support.huaweicloud.com/usermanual-iam5/zh-cn_image_0000001882352062.png)
![](https://support.huaweicloud.com/usermanual-iam5/public_sys-resources/note_3.0-zh-cn.png)
使用AssumeAgency API生成的临时安全凭证访问华为云资源时，不会评估切换委托的原始用户的权限，即用户将临时放弃其原始权限，以支持切换委托或信任委托所分配的权限。
在调用AssumeAgencyWithSAML和AssumeAgencyWithOIDC这两个API时，不需要对调用者的身份策略进行策略评估，因为调用这些API的主体并不是一个华为云身份，但是需要对身份提供商所绑定的信任策略进行评估，以判断该身份提供商的三方用户是否有切换该联邦委托的权限。
接下来以AssumeAgency API为例，说明如何使用身份策略和会话策略控制生成的临时安全凭证的权限：
#### 基于信任委托的身份策略设置权限
在本示例中，通过调用AssumeAgency API，不设置可选Policy、Policy_ids参数，生成的临时安全凭证的权限取决于切换的目标信任委托的身份策略。通过向信任委托关联以下身份策略，将允许该信任委托列出名为productionapp的OBS存储桶中包含的所有对象。它还允许该信任委托获取、放置和删除该存储桶中的对象。
```
{
"Version": "5.0",
"Statement": [{
"Effect": "Allow",
"Action": [
"obs:bucket:listBucket"
],
"Resource": [
"obs:*:*:bucket:productionapp"
]
},
{
"Effect": "Allow",
"Action": [
"obs:object:getObject",
"obs:object:putObject",
"obs:object:deleteObject"
],
"Resource": [
"obs:*:*:bucket:productionapp/*"
]
}
]
}
```
#### 传递会话策略参数限制权限
假设您希望允许某用户切换上例中的相同信任委托，但是希望临时安全凭证只具有在productionapp OBS存储桶中获取和放入对象的权限，不希望具有删除对象的权限。完成该操作的一种方法是创建一个新的信任委托，并在该信任委托的身份策略中指定所需的权限；完成该操作的另一种方法是，调用AssumeAgency API ，并设置可选的会话策略Policy参数，生成的临时安全凭证的权限是信任委托的身份策略与会话策略的权限交集。获取到新的临时安全凭证后，可以将其传递给希望具有这些权限的用户。
例如，将示例会话策略作为AssumeAgency API调用的参数传递，生成的临时安全凭证只具备执行以下操作权限：
- 列出productionapp存储桶中的所有对象。
- 获取productionapp存储桶中的对象或向其中上传对象。
示例会话策略中，obs:object:deleteObject权限已被筛选掉，因此生成的临时安全凭证不会拥有obs:object:deleteObject权限。
```
{
"Version": "5.0",
"Statement": [{
"Effect": "Allow",
"Action": [
"obs:bucket:listBucket"
],
"Resource": [
"obs:*:*:bucket:productionapp"
]
},
{
"Effect": "Allow",
"Action": [
"obs:object:getObject",
"obs:object:putObject"
],
"Resource": [
"obs:*:*:bucket:productionapp/*"
]
}
]
}
```
