
# 自定义身份策略使用示例
#### 配合较高权限系统身份策略使用
如果您给IAM用户授予较高权限的系统身份策略，例如"FullAccessV5"，但不希望IAM用户拥有某个服务的权限，例如云审计服务。您可以创建一个自定义身份策略，并将自定义身份策略的Effect设置为Deny，然后将较高权限的系统身份策略和自定义身份策略同时授予IAM用户，根据Deny优先原则，则授权的IAM用户除了云审计服务，可以对其他所有服务执行所有操作。
以下身份策略样例表示：拒绝IAM用户使用云审计服务。
```
{
    "Version": "5.0",
    "Statement": [
        {
            "Effect": "Deny",
            "Action": [
                "cts:*:*"
            ]
        }
    ]
}
```
![](https://support.huaweicloud.com/usermanual-iam5/public_sys-resources/note_3.0-zh-cn.png)
- Action为授权项，格式为：服务名:资源类型:操作。 "cts:\*:\*"：表示对云审计的所有操作。其中cts为服务名；"\*"为通配符，表示对所有的资源类型可以执行所有操作。
  
- Effect为作用，Deny表示拒绝，Allow表示允许。
 
#### 配合单个服务系统身份策略使用
- 如果您给IAM用户授予单个服务系统身份策略，例如"EVSFullAccessPolicy"，但不希望用户拥有EVSFullAccessPolicy中的创建云硬盘权限（evs:volumes:create），可以创建一条相同Action的自定义身份策略，并将自定义身份策略的Effect设置为Deny，然后将系统身份策略EVSFullAccessPolicy和自定义身份策略同时授予用户，根据Deny优先原则，则用户可以对EVS执行除了创建云硬盘外的所有操作。 以下身份策略样例表示：拒绝IAM用户创建云硬盘。
  ```
  {
      "Version": "5.0",
      "Statement": [
          {
              "Effect": "Deny",
              "Action": [
                  "evs:volumes:create"
              ]
          }
      ]
  }
  ```
  

- 如果您给IAM用户授予"CBRReadOnlyPolicy"权限，但不希望部分用户删除指定的CBR存储库（例如，不希望用户名以"TestUser"开头的用户查看以"vault"命名开头的桶），可以再创建一条自定义身份策略来指定特定的资源，并将自定义身份策略的Effect设置为Deny，然后将CBRReadOnlyPolicy和自定义身份策略同时授予用户。根据Deny优先原则，则用户可以对以"vault"命名开头之外的存储库进行删除操作。
  以下身份策略样例表示：拒绝以TestUser命名开头的用户删除以vault命名开头的存储库。
  ```
  {
      "Version": "5.0",
      "Statement": [
          {
              "Effect": "Deny",
              "Action": [
                  "cbr:vaults:delete"
              ],
              "Resource": [
                  "cbr:*:*:vault:vault*"
              ],
              "Condition": {
                  "StringMatch": {
                      "g:UserName": [
                          "TestUser*"
                      ]
                  }
              }
          }
      ]
  }
  ```
  
 
#### 完全使用自定义身份策略
您也可以不使用系统身份策略，只创建自定义身份策略，实现IAM用户的指定服务授权。
- 以下身份策略样例表示：仅允许IAM用户使用ECS、EVS、VPC、ELB、AOM
  ```
  {
  "Version": "5.0",
  "Statement": [{
  "Effect": "Allow",
  "Action": [
  "ecs:*:*",
  "evs:*:*",
  "vpc:*:*",
  "elb:*:*",
  "aom:*:*"
  ]
  }]
  }
  ```
  
 
- 以下身份策略样例表示：允许IAM用户使用除了ECS、EVS、VPC、ELB、AOM、APM外的其他所有服务。
  ```
  {
  "Version": "5.0",
  "Statement": [{
  "Effect": "Allow",
  "NotAction": [
  "ecs:*:*",
  "evs:*:*",
  "vpc:*:*",
  "elb:*:*",
  "aom:*:*",
  "apm:*:*"
  ]
  }]
  }
  ```
  
#### 允许基于日期和时间进行访问
此示例说明如何创建基于日期和时间操作的自定义身份策略。此身份策略只允许在2024年2月1日到2024年3月1日（不含这两个日期）之间发生的访问。
使用此身份策略时，请将身份策略示例中的斜体占位符文本替换为您自己的信息。然后按照[创建自定义身份策略](https://support.huaweicloud.com/usermanual-iam5/iam_01_0917.html)或[修改、删除自定义身份策略](https://support.huaweicloud.com/usermanual-iam5/iam_01_0918.html)中的说明操作。
了解在IAM身份策略中的Condition元素中使用多个条件的信息，请参阅[身份策略语法](https://support.huaweicloud.com/usermanual-iam5/iam_01_0934.html)。
```
{
"Version": "5.0",
"Statement": [{
"Effect": "Allow",
"Action": [
"service-prefix:resource-name:action-name"
],
"Condition": {
"DateGreaterThan": {
"g:CurrentTime": [
"2024-02-01T00:00:00Z"
]
},
"DateLessThan": {
"g:CurrentTime": [
"2024-03-01T23:59:59Z"
]
}
}
}]
}
```
#### 允许在特定日期内使用MFA进行特定访问
此示例说明了如何创建一个使用多个条件的自定义身份策略，这些条件使用逻辑"与"运算来求值。它允许对名为service-prefix-1的服务进行完全操作访问，并且允许对名为service-prefix-2的服务中的resource-name-A资源进行action-name-a和action-name-b操作。只有在用户使用多重身份验证（MFA）进行身份验证时，才允许执行这些操作，且只能在2024年2月1日和2024年3月1日（不含这两个日期）之间进行操作。
使用此身份策略时，请将身份策略示例中的斜体占位符文本替换为您自己的信息。然后按照[创建自定义身份策略](https://support.huaweicloud.com/usermanual-iam5/iam_01_0917.html)或[修改、删除自定义身份策略](https://support.huaweicloud.com/usermanual-iam5/iam_01_0918.html)中的说明操作。
```
{
"Version": "5.0",
"Statement": [{
"Effect": "Allow",
"Action": [
"service-prefix-1:*:*",
"service-prefix-2:resource-name-A:action-name-a",
"service-prefix-2:resource-name-A:action-name-b"
],
"Condition": {
"Bool": {
"g:MFAPresent": [
"true"
]
},
"DateGreaterThan": {
"g:CurrentTime": [
"2024-02-01T00:00:00Z"
]
},
"DateLessThan": {
"g:CurrentTime": [
"2024-03-01T23:59:59Z"
]
}
}
}]
}
```
 #### 基于源IP拒绝对华为云的访问
此示例将拒绝请求来自指定IP范围以外的主体对账号进行所有操作。当您公司的IP地址位于指定范围内时，该策略很有用。此示例表示支持仅限于来自IP地址范围192.0.2.0/24或10.27.128.0/24的访问，否则请求将被拒绝。
在包含"Effect": "Deny"的身份策略语句中需要谨慎使用否定条件，例如NotIpAddress。使用否定条件时，在指定的条件之外，身份策略语句中指定的操作将被明确拒绝。该身份策略不允许进行任何操作，可将此身份策略与指定条件内允许特定操作的其他策略结合使用。当指定条件内的其他身份策略明确允许操作时，主体可以从允许的IP地址范围内发出请求。华为云还可以使用主体的凭证发出请求。当主体从允许的IP范围之外发出请求时，请求将被拒绝。
有关使用g:SourceIp条件键的更多信息，以及有关g:SourceIp可能无法在您的身份策略中起作用的信息，请参阅[身份策略语法](https://support.huaweicloud.com/usermanual-iam5/iam_01_0934.html)。
```
{
"Version": "5.0",
"Statement": [{
"Effect": "Deny",
"Action": [
"*:*:*"
],
"Condition": {
"NotIpAddress": {
"g:SourceIp": [
"192.0.2.0/24",
"10.27.128.0/24"
]
}
}
}]
}
```
#### 根据请求的区域拒绝访问华为云
此示例说明了如何使用g:RequestedRegion条件键创建拒绝对指定的区域以外进行任何操作的自定义身份策略。此身份策略定义了编程访问和控制台访问的权限。此示例表示，除来自ap-southeast-1、cn-north-1、cn-north-4区域的请求，其他区域的请求将被拒绝。
使用此身份策略时，请将身份策略示例中的斜体占位符文本替换为您自己的信息。然后按照[创建自定义身份策略](https://support.huaweicloud.com/usermanual-iam5/iam_01_0917.html)或[修改、删除自定义身份策略](https://support.huaweicloud.com/usermanual-iam5/iam_01_0918.html)中的说明操作。
```
{
"Version": "5.0",
"Statement": [{
"Effect": "Deny",
"Action": [
"*:*:*"
],
"Condition": {
"StringNotEquals": {
"g:RequestedRegion": [
"ap-southeast-1",
"cn-north-1",
"cn-north-4"
]
}
}
}]
}
```
#### 拒绝访问非本账号的华为云资源
以下示例说明如何创建拒绝访问不属于您账号资源的自定义身份策略。
使用此身份策略时，请将身份策略示例中的斜体占位符文本替换为您自己的信息。然后按照[创建自定义身份策略](https://support.huaweicloud.com/usermanual-iam5/iam_01_0917.html)或[修改、删除自定义身份策略](https://support.huaweicloud.com/usermanual-iam5/iam_01_0918.html)中的说明操作。
```
{
"Version": "5.0",
"Statement": [{
"Effect": "Deny",
"Action": [
"*:*:*"
],
"Condition": {
"StringNotEquals": {
"g:ResourceAccount": [
"111122223333"
]
}
}
}]
}
```
#### 拒绝非指定的IAM用户使用请求访问华为云
此示例说明了如何创建拒绝非指定的IAM用户访问华为云资源的自定义身份策略。此身份策略包含编程访问和控制台访问的权限。此示例表示，除来自用户ID为111122223333的IAM用户的请求，其他请求将被拒绝。
使用此身份策略时，请将身份策略示例中的斜体占位符文本替换为您自己的信息。然后按照[创建自定义身份策略](https://support.huaweicloud.com/usermanual-iam5/iam_01_0917.html)或[修改、删除自定义身份策略](https://support.huaweicloud.com/usermanual-iam5/iam_01_0918.html)中的说明操作。
```
{
"Version": "5.0",
"Statement": [{
"Effect": "Deny",
"Action": [
"*:*:*"
],
"Condition": {
"StringNotEquals": {
"g:UserId": [
"111122223333"
]
}
}
}]
}
```
#### 允许或拒绝访问多个服务
此示例说明了如何创建允许访问多个服务而在IAM中进行有限权限访问的身份策略。此身份策略包含编程访问和控制台访问的权限。
使用此身份策略时，请参考示例策略中的配置信息根据需要替换为您自己的信息。然后按照[创建自定义身份策略](https://support.huaweicloud.com/usermanual-iam5/iam_01_0917.html)或[修改、删除自定义身份策略](https://support.huaweicloud.com/usermanual-iam5/iam_01_0918.html)中的说明操作。
此身份策略示例中授予了IAM的有限只读权限和STS的所有操作权限，以及拒绝ECS的example123实例所有操作权限。
```
{
"Version": "5.0",
"Statement": [{
"Effect": "Allow",
"Action": [
"iam:securitypolicies:getPasswordPolicyV5",
"iam:securitypolicies:getLoginPolicyV5",
"iam:credentials:showAccessKeyLastUsedV5",
"iam:users:showLoginProfileV5",
"iam:users:getUserV5",
"iam:users:showUserLastLoginV5",
"iam:groups:getGroupV5",
"iam:policies:getV5",
"iam:policies:getVersionV5",
"iam:agencies:getServiceLinkedAgencyDeletionStatusV5",
"iam:agencies:getV5",
"iam::getAsymmetricSignatureSwitchV5"
]
},
{
"Effect": "Allow",
"Action": [
"STS:*:*"
]
},
{
"Effect": "Deny",
"Action": [
"ecs:*:*"
],
"Resource": [
"ecs:*:*:capacityReservations:example123"
]
}
]
}
```
#### 为具有特定标签的用户添加指定标签
此示例说明了如何创建允许为IAM用户添加标签键为Department且标签值为Marketing、Development或QualityAssurance的自定义身份策略。该IAM用户必须已包含标签键值对JobFunction=manager。您可以使用此身份策略来要求经理只能属于三个部门中的一个。此身份策略包含编程访问和控制台访问的权限。
使用此身份策略时，请将身份策略示例中的配置信息替换为您自己的信息。然后按照[创建自定义身份策略](https://support.huaweicloud.com/usermanual-iam5/iam_01_0917.html)或[修改、删除自定义身份策略](https://support.huaweicloud.com/usermanual-iam5/iam_01_0918.html)中的说明操作。
iam::tagForResourceV5授权项表示允许对您账号中的所有用户授予设置资源标签的权限。
第一个条件使用ForAllValues:StringEquals条件运算符。如果请求中的标签键与身份策略中的键匹配，则条件返回true。这意味着，请求中的唯一标签键必须为Department。有关使用ForAllValues的更多信息，请参阅[多值条件键](https://support.huaweicloud.com/usermanual-iam5/iam_01_1289.html#iam_01_1289__li66850537344)。
第二个条件使用StringEquals条件运算符。如果条件的两个部分都为true，则此条件返回true。要标记的用户必须已具有JobFunction=Manager标签。请求必须包括Department标签键以及其中一个列出的标签值。
iam::listTagsForResourceV5授权项表示允许对您账号中的所有用户授予列举资源标签的权限。
```
{
"Version": "5.0",
"Statement": [{
"Effect": "Allow",
"Action": [
"iam::tagForResourceV5"
],
"Condition": {
"ForAllValues:StringEquals": {
"g:TagKeys": [
"Department"
]
},
"StringEquals": {
"g:ResourceTag/JobFunction": [
"Manager"
],
"g:RequestTag/Department": [
"Marketing",
"Development",
"QualityAssurance"
]
}
}
},
{
"Effect": "Allow",
"Action": [
"iam::listTagsForResourceV5"
]
}
]
}
```
#### 管理特定标签
此示例说明如何创建允许IAM主体（IAM用户和信任委托）进行添加和移除带有标签键为Department的IAM标签的自定义身份策略。此身份策略不限制Department标签的值。
使用此身份策略时，请将身份策略示例中的配置信息替换为您自己的信息。然后按照[创建自定义身份策略](https://support.huaweicloud.com/usermanual-iam5/iam_01_0917.html)或[修改、删除自定义身份策略](https://support.huaweicloud.com/usermanual-iam5/iam_01_0918.html)中的说明操作。
```
{
"Version": "5.0",
"Statement": [{
"Effect": "Allow",
"Action": [
"iam::tagForResourceV5",
"iam::untagForResourceV5"
],
"Condition": {
"ForAllValues:StringEquals": {
"g:TagKeys": [
"Department"
]
}
}
}]
}
```
#### 允许使用设置账号密码策略
此示例说明了如何创建允许IAM用户查看和更新其密码策略的自定义身份策略。密码策略包含设置密码最小长度、密码中同一字符连续出现的最大次数、密码不能与历史密码相同等。
要了解如何设置密码策略，请参阅[密码策略](https://support.huaweicloud.com/usermanual-iam5/iam_01_1171.html)。
```
{
"Version": "5.0",
"Statement": [{
"Effect": "Allow",
"Action": [
"iam:securitypolicies:getPasswordPolicyV5",
"iam:securitypolicies:updatePasswordPolicyV5"
]
}]
}
```
