
# 服务控制策略(SCP)
#### 操作场景
服务控制策略 (Service Control Policy，SCP) 是一种基于组织的访问控制策略。组织管理账号可以使用SCP指定组织中成员账号的权限边界，限制账号内用户的操作。SCP可以关联到组织、OU和成员账号。当SCP关联到组织或OU时，该组织或OU下所有账号均受该策略影响。
#### 前提条件
获取组织ID：以组织管理员、管理账号或成员账号的身份登录[组织管理控制台](https://console.huaweicloud.com/organizations/?&locale=zh-cn#/home)，进入控制面板页，即可查看组织ID、组织的URN、管理账号名称及管理账号ID等信息。
![](https://support.huaweicloud.com/usermanual2-swr/zh-cn_image_0000002611746589.png)
#### 权限控制原理
- **允许类权限的生效规则**
  如果要在成员账号级别允许使用某个云服务的操作，则必须在账号和根组织单元之间的每个层级上允许该操作。这意味着，必须在根组织单元和账号之间的每个层级，附加允许该操作的SCP。
  因此，组织启用SCP时，默认会为所有OU和账号绑定全部权限（FullAccess策略），默认允许所有操作，默认开放全部云服务与操作权限。如果任意层级删除该默认策略且未配置替代的策略，则该层级下的所有组织单元和成员账号，将会被禁止所有云资源操作。
  如[图1]所示：如需让指定成员账号正常使用某个云服务，根组织单元、下层组织单元和目标成员账号自身，三个层级都必须绑定对应的允许该操作的SCP。
  图1三个层级都必须绑定对应的允许该操作的SCP   
  ![](https://support.huaweicloud.com/usermanual2-swr/zh-cn_image_0000002586292555.png)
  SCP整体遵循默认拒绝原则：所有未在各层级SCP中明确允许的操作，都会被自动拦截。只要根组织单元、下层组织单元、目标账号任意一层缺少允许配置，对应操作将无法执行。
  
- **拒绝类权限的生效规则**
  在根节点到目标成员账号的完整链路里，只要任意一个层级的SCP设置了禁止规则，该操作权限就会被统一限制。
  如[图2]所示：某业务组织单元中配置了禁止操作某个云服务的策略，即便根组织单元和下层的目标成员账号单独设置了允许该云服务操作的SCP，该组织单元下所有成员账号依然无法使用该云服务。上层配置的拒绝规则，会统一约束其管辖范围内全部下级组织单元与成员账号。
  图2拒绝类权限生效规则   
  ![](https://support.huaweicloud.com/usermanual2-swr/zh-cn_image_0000002555775912.png) 
 
#### 策略语法示例
**配置示例1：禁止某** **账号下载某个企业注册表实例的某个命名空间下的镜像。**
下面以禁止某账号下载企业注册表test-swr，命名空间为test-namespace下的镜像的场景为例演示如何配置。
**配置方法**：
1. 以组织管理员或管理账号的身份登录[组织控制台](https://console.huaweicloud.com/organizations/?&locale=zh-cn#/home)。
2. 进入策略管理页，依次单击"服务控制策略-创建"，进入SCP创建页面。
3. 输入策略名称和策略描述，在策略内容左侧可以复制粘贴如下JSON格式的策略内容。单击"保存"。 
   ```
   {
     "Version": "5.0",
     "Statement": [
       {
         "Effect": "Deny",
         "Action": [
           "swr:repository:downloadArtifact"
         ],
         "Resource": [
          
           "SWR:*:*:repository:test-swr/test-namespace/*"
         ]
       }
     ]
   }
   ```
   
   
4. 把此策略绑定至组织的OU或者账号上，使其生效。这样该账号就无法下载。具体方法如下： 
   1. 以组织管理员或管理账号的身份登录[组织控制台](https://console.huaweicloud.com/organizations/?&locale=zh-cn#/home)，进入组织管理页面。
   
   2. 选中要绑定SCP的OU或者账号。
   
   3. 在右侧详情页，选择策略页签，展开"服务控制策略"列表，单击列表上方的"绑定"。
   
   4. 在弹窗中选择要添加的策略后，在文本框中输入"确认"，然后单击"绑定"，完成策略绑定。
   
   
   
   
**配置** **示例** **2： 限制创建SWR注册表时必须添加标签APPID=test-appid。**
```
{
  "Version": "5.0",
  "Statement": [
    {
      "Effect": "Deny",
      "Action": [
        "swr:instance:create"
      ],
      "Condition": {
        "StringNotEquals": {
          "g:RequestTag/APPID": [
            "test-appid"
          ]
        }
      }
    }
  ]
}
```
**配置** **示例** **3：** **限制用户仅可下载标签值为APPID=test-appid的镜像（需提前在镜像所属命名空间上添加对应标签）。**
```
{
  "Version": "5.0",
  "Statement": [
    {
      "Effect": "Deny",
      "Action": [
        "swr:repository:downloadArtifact"
      ],
      "Condition": {
        "StringNotEquals": {
          "g:ResourceTag/APPID": [
            "test-appid"
          ]
        }
      }
    }
  ]
}
```
#### 策略参数说明
表1策略参数说明 
| 参数                                                                                                  || 含义                                                                                                                                                                                            | 值                                                                                                                                                                                                                                                                                               |
|:---|---|:---|:---|
| Version                                                                                             || 身份策略的版本。                                                                                                                                                                                      | 固定为5.0，不支持修改：代表身份策略JSON语法的版本号。                                                                                                                                                                                                                                                                  |
| Statement： 身份策略的授权语句 | Sid：语句ID             | Sid（Statement ID）表示语句的可选标识符。                                                                                                                                                                  | 为一个由零个或多个字符组成的字符串。                                                                                                                                                                                                                                                                              |
| Statement： 身份策略的授权语句 | Effect：作用            | 定义Action中的操作权限是否允许执行。                                                                                                                                                                         | 仅支持Deny：不允许执行。                                                                                                                                                                                                                                                                                  |
| Statement： 身份策略的授权语句 | Action/NotAction：授权项 | 操作权限。                                                                                                                                                                                         | 格式为"服务名:资源类型:操作"。授权项支持\*和?，\*表示任意个字符，?表示恰好一个字符。Action/NotAction不区分大小写。Action表示匹配列表中的所有授权项，NotAction表示匹配列表之外的所有授权项。 您可以打开[身份策略授权参考](https://support.huaweicloud.com/usermanual-permissions/iam_01_0003.html)，导航至云服务的"操作"小节，查看该服务所有授权项。 |
| Statement： 身份策略的授权语句 | Resource: 资源类型       | 身份策略所作用的资源。                                                                                                                                                                                   | 资源类型用资源URN表示，格式为"\<service-name\>:\<region\>:\<account-id\>:\<type-name\>:\<resource-path\>", 资源URN支持\*和?，\*表示任意个字符，?表示恰好一个字符。Resource不区分大小写。资源URN详情可参见[使用URN标识华为云资源](https://support.huaweicloud.com/usermanual-iam5/iam_01_1275.html)。                                                        |
| Statement： 身份策略的授权语句 | Condition：条件         | 使身份策略生效的特定条件，包括[条件键](https://support.huaweicloud.com/usermanual-iam5/iam_01_1287.html)和[运算符](https://support.huaweicloud.com/usermanual-iam5/iam_01_1289.html#iam_01_1289__li13495143171719)。 | 格式为"运算符:{条件键：\[条件值1,条件值2\]}"。其中，条件键不区分大小写。 如果您设置多个条件，同时满足所有条件时，该身份策略才生效。                                                                                                                                                            |
   
#### 相关文档：
[scp原理介绍](https://support.huaweicloud.com/usermanual-organizations/org_03_0032.html)
[SCP语法介绍](https://support.huaweicloud.com/usermanual-organizations/org_03_0033.html)
[使用标签控制对华为云资源的访问](https://support.huaweicloud.com/usermanual-iam5/iam_01_1229.html)
