
# 配置双端固定实现VPC粒度的访问控制
#### 应用场景
使用"双端固定"特性，可以对OBS中的资源提供VPC粒度的权限控制，确保云上数据在一个安全的网络环境内传输，降低未授权访问风险。双端固定适用于以下场景：
- 保护重要数据不通过公网传输，只有指定用户可以通过内网访问。例如，医疗行业存储在OBS中的医疗影像、电子病例等敏感信息，由于合规要求不能在公网传输，只能由华为云某个特定VPC中的服务器（ECS/CCE/BMS）通过内网访问，来自其他VPC的访问都会被拒绝。
- 共享OBS中的数据，针对来自不同VPC的访问授予不同权限。例如，企业在OBS中存储的数据需要在不同部门之间共享，不同部门需要设置不同的访问权限，比如在VPC1的开发团队拥有所有数据的读写权限，在VPC2的测试团队拥有所有数据的读权限，在VPC3的其他团队只有部分数据的读权限。
 
#### 背景信息
虚拟私有云（Virtual Private Cloud，以下简称VPC）是您在云上的私有网络，为云服务器、云容器、云数据库等云上资源构建隔离、私密的虚拟网络环境。您可以在这个私有网络里创建和管理自己的云上资源，安全又灵活。了解更多请参见[什么是VPC？](https://support.huaweicloud.com/productdesc-vpc/zh-cn_topic_0013748729.html)
VPC终端节点（VPC Endpoint，以下简称VPCEP），能够将VPC私密地连接到终端节点服务（比如对象存储服务，即OBS），VPC中的云资源无需弹性公网IP就能够访问OBS，提高了访问效率，为您提供更加灵活、安全的组网方式。了解更多请参见[什么是VPCEP？](https://support.huaweicloud.com/productdesc-vpcep/zh-cn_topic_0131645194.html)
您可以通过VPCEP将OBS中的数据共享给云上VPC。您还可以通过[云专线](https://support.huaweicloud.com/productdesc-dc/zh-cn_topic_0032053183.html)、[虚拟专用网络（VPN）](https://support.huaweicloud.com/productdesc-vpn/vpn_01_0031.html)等将OBS中的数据共享给用户本地数据中心，构建混合云网络，灵活整合资源。
- [将OBS中存储的数据共享给云上VPC]
  图1将OBS中存储的数据共享给云上VPC   
  ![](https://support.huaweicloud.com/usermanual-obs/figure/zh-cn_image_0000002348739385.png "点击放大")
  如果想在同一区域内借助VPCEP以私有网络的方式访问OBS，只需要把OBS作为服务资源添加到终端节点服务中，然后在VPC内创建与OBS相连的终端节点，就能通过终端节点，在私有网络环境下访问OBS了。
- [将OBS中存储的数据共享给用户本地数据中心]
  图2将OBS中存储的数据共享给用户本地数据中心   
  ![](https://support.huaweicloud.com/usermanual-obs/figure/zh-cn_image_0000002348618313.png "点击放大")
  如果您本地数据中心想要通过私有网络访问存储在华为云OBS中的数据，需要在同一区域内，用云专线或者VPN网关搭建起本地数据中心和VPC之间的桥梁，然后使用VPCEP连接起VPC和OBS，这样本地数据中心就能顺利通过私有网络，访问到OBS中存储的数据了。
#### 工作原理
图3双端固定工作原理   
![](https://support.huaweicloud.com/usermanual-obs/figure/zh-cn_image_0000002307192709.png "点击放大")
VPCEP策略和OBS桶策略，分别从请求来源和被访问资源两个角度保障了数据安全性。
设置VPCEP策略可以限制VPC中的服务器（ECS/CCE/BMS）可以访问哪些云上资源，如[图3]所示，终端节点1允许VPC1中的服务器访问桶A，不允许访问桶B，所以VPC1访问桶A成功，访问桶B失败。
设置桶策略可以限定OBS桶只能被特定VPC中的服务器访问，如[图3]所示，桶A的桶策略允许来自VPC1的请求，拒绝来自VPC2的请求，所以VPC1访问桶A成功，VPC2访问桶A失败。
#### VPCEP策略语法说明
VPCEP策略遵循最小权限原则，如果策略没有显式"Allow（允许）"，则默认"Deny（拒绝）"。在购买终端节点时，系统将会为该终端节点生成一个默认策略，该策略允许对OBS的完全访问，您可以在创建终端节点时修改默认策略，还可以在创建完成后，根据需要随时调整策略。针对VPCEP策略，您需要注意：
- VPC终端节点策略，配置后需等待10分钟才可生效，请耐心等待。
- VPC终端节点策略与IAM权限存在部分差异：VPC终端节点策略中不含"sid"字段。
VPCEP策略由Effect（作用）、Action（授权项）、Resource（资源类型）、Condition（生效条件）组成：
表1表1 VPCEP策略参数说明 
| 参数             | 值                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    |
|:---|:---|
| Effect：作用      | 定义Action中的操作权限是否允许执行。 - Allow：允许。  - Deny：拒绝。   默认值：Deny。当同一个Action的Effect既有Allow又有Deny时，遵循Deny优先的原则。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        |
| Action：授权项     | 对OBS资源的操作权限。格式为："服务名:资源类型:操作"，支持单个或多个操作权限，支持通配符号\*，通配符号表示所有。授权项不区分大小写。 OBS支持bucket和object两种资源类型： - 桶相关的授权项格式为：obs:bucket:操作，例如"obs:bucket:ListAllMybuckets"表示查看OBS桶列表权限，其中obs为服务名，bucket为资源类型，ListAllMybuckets为操作。  - 对象相关的授权项格式为：obs:object:操作。   详细的Action描述请参见[桶相关授权项](https://support.huaweicloud.com/api-obs/obs_04_0111.html)和[对象相关授权项](https://support.huaweicloud.com/api-obs/obs_04_0112.html)。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              |
| Resource: 资源   | 策略所作用的资源。格式为"obs:\*:\*:资源类型:资源路径"。 资源类型不区分大小写，支持以下取值： - bucket：表示本策略设置的是桶的访问权限  - object：表示本策略设置的是对象的访问权限  - "\*"：通配符号\*，表示同时设置桶和对象的访问权限。   资源路径格式为"桶名"或"桶名/对象名"，支持通配符号\*，区分大小写，示例如下： - "obs:\*:\*:bucket:\*": 表示所有的OBS桶。  - "obs:\*:\*:object:my-bucket/my-object/\*": 表示my-bucket桶my-object目录下的所有对象。   |
| Condition：生效条件 | 策略生效条件。只有当条件设置的表达式与访问请求中的值匹配时，策略才生效。 VPCEP策略支持的条件键有obs:x-obs-acl、obs:x-obs-copysource、obs:x-obs-server-side-encryption、obs:x-obs-metadata-directive、obs:delimiter、obs:max-keys、obs:prefix、obs:versionId、obs:EpochTime、obs:SecureTransport、obs:SourceIp、obs:SourceVpc、obs:SourceVpce、obs:UserAgent、obs:Referer，了解条件键的详细信息和使用示例请参考[Condition参数说明](https://support.huaweicloud.com/perms-cfg-obs/obs_40_0041.html)。 示例：禁止上传对象时设置公开的ACL，同时允许其他所有操作 ``` [ { "Action": [ "obs:object:PutObject" ], "Effect": "Deny", "Resource": ["obs:*:*:object:bucketa/*"], "Condition": { "StringNotEquals": { "obs:x-obs-acl": ["private"] } } }, { "Action": ["obs:*:*"], "Effect": "Allow", "Resource": ["obs:*:*:*:*"] } ] ```                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 |
   
注意，策略中的Action、Resource需要满足以下规则，否则配置会报错：
| 规则                       | 规则描述                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                |
|:---|:---|
| Action和Resource的资源粒度保持一致 | 如果Action中包含对象操作，那么Resource中需包含对象资源。 如果Action中包含桶操作，那么Resource中需包含桶资源。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 |
| Resource中资源类型和资源路径保持一致   | 如果Resource资源类型为bucket，则路径为"桶名"，即 "Resource": \["obs:\*:\*:**bucket** :*桶名*"\]。 如果Resource资源类型为object，则路径为"桶名/对象名"，即 "Resource": \["obs:\*:\*:**object** :*桶名* /*对象名*"\]。 资源类型、桶名、对象名支持使用通配符"\*"。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              |
| 桶名满足规范                   | - 需全局唯一，不能与已有的任何桶名称重复，包括其他用户创建的桶。用户删除桶后，立即创建同名桶或并行文件系统会创建失败，需要等待30分钟才能创建。  - 长度范围为3到63个字符，仅支持小写字母、数字、中划线（-）、英文句号（.）。  - 禁止两个英文句号（.）相邻，禁止英文句号（.）和中划线（-）相邻，禁止以英文句号（.）和中划线（-）开头或结尾。  - 禁止使用IP地址。   |
   
#### 典型场景及策略配置示例
本节提供双端固定典型的使用场景和配置示例：
#### 示例一：VPC只能访问指定OBS桶
图4示例一   
![](https://support.huaweicloud.com/usermanual-obs/figure/zh-cn_image_0000002272688274.png "点击放大")
**场景描述：**
VPC1内的服务器只能下载桶A中的对象，不允许访问其他桶。桶A并未设置桶策略，所以其他VPC也可以访问桶A。
**配置方法：**
配置VPC1的终端节点策略如下：
入口：服务列表 \> VPC终端节点 \> 单击对应VPC终端节点ID（OBS双端固定的终端节点） \> 策略 \> 编辑
```
[
    {
        "Action": [
            "obs:object:GetObject"
        ],
        "Resource": [
            "obs:*:*:object:bucketa/*"
        ],
        "Effect": "Allow"
    }
]
```
#### 示例二：VPC只能访问指定OBS桶，且只能进行指定操作
**场景描述：**
VPC1内的服务器只能下载桶A中的对象，不允许访问其他桶。
除了桶A中的名为myobject对象外，允许VPC1内的服务器下载桶A中所有其他对象。
**配置方法：**
配置VPC1的终端节点策略如下：
入口：服务列表 \> VPC终端节点 \> 单击对应VPC终端节点ID（OBS双端固定的终端节点） \> 策略 \> 编辑
```
[
    {
        "Action": [
            "obs:object:GetObject"
        ],
        "Resource": [
            "obs:*:*:object:bucketa/*"
        ],
        "Effect": "Allow"
    },
    {
        "Action": [
            "obs:object:GetObject"
        ],
        "Resource": [
            "obs:*:*:object:bucketa/myobject"
        ],
        "Effect": "Deny"
    }
]
```
#### 示例三：VPC只能访问指定OBS桶，OBS桶只能被指定VPC访问
图5示例三   
![](https://support.huaweicloud.com/usermanual-obs/figure/zh-cn_image_0000002307345065.png "点击放大")
**场景描述：**
只允许VPC1内的服务器上传/下载桶A中的对象，并且只允许桶A中的对象被VPC1内的服务器上传/下载。
其中VPC1的ID为：4dad1f75-0361-4aa4-ac75-1ffdda3a0fec。
**配置方法：**
1. 配置VPC1的终端节点策略如下：
   入口：服务列表 \> VPC终端节点 \> 单击对应VPC终端节点ID（OBS双端固定的终端节点） \> 策略 \> 编辑
   ```
   [
       {
           "Action": [
               "obs:object:GetObject",
       "obs:object:PutObject"
           ],
           "Resource": [
               "obs:*:*:object:bucketa/*"
           ],
           "Effect": "Allow"
       }
   ]
   ```
   
2. 配置桶A的桶策略如下： 配置方法请参见[自定义创建桶策略（JSON视图）](https://support.huaweicloud.com/usermanual-obs/obs_03_0141.html#ZH-CN_TOPIC_0000001858344854)。
   需要配置两个桶策略：
   - 桶策略1：允许VPC1内的服务器上传/下载桶A中的对象。 其中*statementId* 可自定义，*domainId* 和*userId* 需要设置为允许上传下载的账号ID和用户ID。相关说明请参见[桶策略](https://support.huaweicloud.com/perms-cfg-obs/obs_40_0004.html)。
     ```
     {
         "Statement": [
             {
                 "Sid": "statementId",
                 "Effect": "Allow",
                 "Principal": {
                     "ID": ["domain/domainId:user/userId"]
                 },
                 "Action": ["GetObject", "PutObject"],
                 "Resource": ["bucketa/*"],
                 "Condition": {
                     "StringEquals": {
                         "SourceVpc": ["4dad1f75-0361-4aa4-ac75-1ffdda3a0fec"]
                     }
                 }
             }
         ]
     }
     ```
     
   
   - 桶策略2：除了VPC1外的其他VPC内的服务器均不能操作桶A及桶中的对象。 其中*DenyReqNotFromVpc*可自定义。
     ```
     {
         "Statement": [
             {
                 "Sid": "DenyReqNotFromVpc",
                 "Effect": "Deny",
                 "Principal": {
                     "ID": ["*"]
                 },
                 "Action": "*",
                 "Resource": ["bucketa", "bucketa/*"],
                 "Condition": {
                     "StringNotEquals": {
                         "SourceVpc": ["4dad1f75-0361-4aa4-ac75-1ffdda3a0fec"]
                     }
                 }
             }
         ]
     }
     ```
     ![](https://support.huaweicloud.com/usermanual-obs/public_sys-resources/note_3.0-zh-cn.png)
     设置上述桶策略后，被授权的IAM用户可以正常通过SDK或API进行上传下载操作。如果希望在[管理控制台](https://console.huaweicloud.com/console/?locale=zh-cn#/obs/manager/buckets)或OBS Browser+上进行上传下载，还需要在IAM权限中额外配置obs:bucket:ListAllMyBuckets和obs:bucket:ListBucket权限，否则访问控制台和OBS Browser+时会报错，无法看到桶和桶内对象。
     
    
 
#### 示例四：同时配置VPC终端节点策略与桶策略后，再授权其他云服务访问桶
**场景描述：**
当同时设置了VPC1的终端节点策略与桶A的桶策略后，由于双端固定的限制，其它云服务包括OBS就无法访问桶A。如果想要授权其它云服务能够访问桶A，可以通过委托授权的方式。
其中VPC1的ID为：4dad1f75-0361-4aa4-ac75-1ffdda3a0fec。
**配置方法：**
1. 配置VPC1的终端节点策略如下： 
   只允许VPC1内的服务器上传/下载桶A中的对象。
   入口：服务列表 \> VPC终端节点 \> 单击对应VPC终端节点ID（OBS双端固定的终端节点） \> 策略 \> 编辑
   ```
   [
       {
           "Action": [
               "obs:object:GetObject",
       "obs:object:PutObject"
           ],
           "Resource": [
               "obs:*:*:object:bucketa/*"
           ],
           "Effect": "Allow"
       }
   ]
   ```
   
   
2. [创建IAM委托](https://support.huaweicloud.com/usermanual-iam/iam_06_0004.html)，委托其它云服务访问桶A。例如，委托OBS，绑定系统策略OBS FullAccess，也可以创建自定义策略并绑定该委托。
3. 配置桶A的桶策略如下： 
   只允许桶A中的对象被VPC1内的服务器或者委托名为testAgencyName所对应授权的云服务访问桶A中的对象。其中委托名以[步骤2]中实际创建的IAM委托名称为准。
   ```
   {
       "Statement": [
           {
               "Effect": "Allow",
               "Principal": {"ID": ["*"]},
               "Action": ["*"],
               "Resource": ["bucketa/*"],
               "Condition": {
                   "StringEquals": {
                       "SourceVpc": ["4dad1f75-0361-4aa4-ac75-1ffdda3a0fec"]
                   }
               }
           },
           {
               "Effect": "Allow",
               "Principal": {"ID": ["*"]},
               "Action": ["*"],
               "Resource": ["bucketa/*"],
               "Condition": {
                   "StringEquals": {
                       "g:PrincipalUrn": ["sts::<domain-id>:assumed-agency:testAgencyName/<session-name>"]
                   }
               }
           }
       ]
   }
   ```
   同时，桶策略也可按如下配置达到同样的效果：
   ```
   {
       "Statement": [
           {
               "Effect": "Deny",
               "Principal": {"ID": ["*"]},
               "Action": ["*"],
               "Resource": ["bucketa/*"],
               "Condition": {
                   "StringNotEquals": {
                       "SourceVpc": ["4dad1f75-0361-4aa4-ac75-1ffdda3a0fec"],
                       "g:PrincipalUrn": ["sts::<domain-id>:assumed-agency:testAgencyName/<session-name>"]
                   }
               }
           }
       ]
   }
   ```
   
   
 
#### 配置双端固定
本节以VPC中的ECS云服务器访问OBS桶为示例场景，如[图6]所示，为您介绍双端固定的详细操作步骤。
图6双端固定配置场景   
![](https://support.huaweicloud.com/usermanual-obs/figure/zh-cn_image_0000002276812696.png "点击放大")
表2资源规划 
| 资源                                                                                             | 区域     | 数量                                                                                    | 资源名称             | 资源说明                                                                    |
|:---|:---|:---|:---|:---|
| 虚拟私有云VPC                                                                                       | 华北-北京四 | 2                                                                                     | example-vpc1     | 用于承载云服务器example-ecs1，绑定example-vpcep1。                                  |
| 虚拟私有云VPC                                                                                       | 华北-北京四 | 2                                                                                     | example-vpc2     | 用于承载云服务器example-ecs2，绑定example-vpcep2。                                  |
| VPC终端节点 VPCEP  | 华北-北京四 | 2  | example-vpcep1   | 绑定example-vpc1，对example-vpc1发出的请求做访问控制。允许对example-bucket-a中的对象进行上传下载操作。 |
| VPC终端节点 VPCEP  | 华北-北京四 | 2  | example-vpcep2   | 绑定example-vpc2，对example-vpc2发出的请求做访问控制。允许对example-bucket-a中的对象进行上传下载操作。 |
| 弹性云服务器ECS                                                                                      | 华北-北京四 | 2                                                                                     | example-ecs1     | 创建时，虚拟私有云选择example-vpc1，选择Linux操作系统，例如Ubuntu 24.04 server 64bit(10GiB)。 |
| 弹性云服务器ECS                                                                                      | 华北-北京四 | 2                                                                                     | example-ecs2     | 创建时，虚拟私有云选择example-vpc2，选择Linux操作系统，例如Ubuntu 24.04 server 64bit(10GiB)。 |
| 对象存储OBS                                                                                        | 华北-北京四 | 1                                                                                     | example-bucket-a | 桶策略允许来自example-vpc1访问，拒绝来自example-vpc2访问。                               |
   
#### 步骤一：在VPC控制台创建VPC
本步骤将创建名为example-vpc1、example-vpc2的两个VPC。
进入[VPC控制台创建虚拟私有云页面](https://console.huaweicloud.com/vpc/?locale=zh-cn#/vpc/vpcs/createVpc)，根据界面提示配置VPC参数，要求区域选择"华北-北京四"，其他选项没有特殊要求，保持默认即可，您也可以根据业务需求自定义，详情可参见[创建虚拟私有云和子网](https://support.huaweicloud.com/usermanual-vpc/zh-cn_topic_0013935842.html)。
![](https://support.huaweicloud.com/usermanual-obs/figure/zh-cn_image_0000002311389281.png "点击放大")
#### 步骤二：在ECS控制台创建Linux ECS云服务器
本步骤将创建名为example-ecs1、example-ecs2的2个ECS云服务器，并将example-ecs1绑定example-vpc1，将example-ecs2绑定example-vpc2。
1. 进入[ECS控制台自定义购买](https://console.huaweicloud.com/ecm/?locale=zh-cn#/ecs/create/custom)页面。
2. 根据界面提示配置ECS参数，"区域"选择"华北-北京四"。
3. 选择"操作系统"，此处以选择Linux镜像Ubuntu 24.04 server 64bit(10GiB)为例。
4. "网络"选择[步骤一]中创建的VPC，example-ecs1绑定example-vpc1，example-ecs2绑定example-vpc2。
   
   ![](https://support.huaweicloud.com/usermanual-obs/figure/zh-cn_image_0000002277464882.png "点击放大")
   
   
   
5. 其他选项没有特殊要求，保持默认即可，您也可以根据业务需求自定义，详情可参见[自定义购买ECS](https://support.huaweicloud.com/usermanual-ecs/ecs_03_7002.html)。
6. 单击右下角"立即购买"。
 
#### 步骤三：在OBS控制台创建OBS桶并上传对象
本步骤将创建名为example-bucket-a的对象桶，并向桶中上传名为test.txt的对象。
1. 创建名为example-bucket-a的对象桶。 
   进入[OBS控制台创建桶页面](https://console.huaweicloud.com/console/?agencyId=037a96c8ee16453098ec7ab325a129ba&locale=zh-cn#/obs/create)，区域选择"华北-北京四"，"存储类型"选择"标准存储"，"桶策略"选择"私有"，其他选项保持默认，您也可以根据业务需求自定义，详情可参见[创建桶](https://support.huaweicloud.com/usermanual-obs/zh-cn_topic_0045829088.html)。
   ![](https://support.huaweicloud.com/usermanual-obs/figure/zh-cn_image_0000002349603677.png)
   
   
   
2. 上传名为test.txt的对象到example-bucket-a桶中。上传对象详细步骤详见[上传对象](https://support.huaweicloud.com/usermanual-obs/obs_03_1002.html)。
 
#### 步骤四：在OBS控制台配置桶策略
本步骤将为桶配置桶策略，该桶策略仅允许来自于example-vpc1内的服务器下载桶example-bucket-a中的对象，其他VPC内的服务器均不能操作桶example-bucket-a及桶中的对象。
1. 登录OBS[控制台](https://console.huaweicloud.com/console/?locale=zh-cn#/obs/manager/buckets)，在左侧导航栏选择"桶列表"。
2. 在桶列表中，单击[步骤三]中创建的桶example-bucket-a，进入"对象"页面。
3. 在左侧导航栏，单击"权限控制 \> 桶策略"。
4. 单击"创建"，选择"JSON视图"页签。
5. 配置第1条桶策略：允许example-vpc1内的服务器下载桶example-bucket-a中的对象。
   
   表3桶策略参数说明 
   | 参数名称                     | 说明                                                                                                                                                |
   |:---|:---|
   | *domainId*               | 允许下载example-bucket-a桶中对象的账号ID，获取账号ID请参见[如何获取账号ID？](https://support.huaweicloud.com/api-iam/iam_17_0002.html)                                      |
   | *userId*                 | 允许下载example-bucket-a桶中对象的IAM用户ID，获取IAM用户ID请参见[如何获取IAM用户ID？](https://support.huaweicloud.com/api-iam/iam_17_0002.html)                             |
   | *VPC ID of example-vpc1* | 允许下载example-bucket-a桶中对象的VPC ID，此处为example-vpc1的ID，如何获取VPC ID请参见[获取虚拟私有云的ID信息](https://support.huaweicloud.com/usermanual-vpc/vpc_vpc_0013.html)。 |
      
   ```
   {
       "Statement": [
           {
               "Sid": "exampleSidId1",
               "Effect": "Allow",
               "Principal": {
                   "ID": ["domain/domainId:user/userId"]
               },
               "Action": ["GetObject"],
               "Resource": ["example-bucket-a/*"],
               "Condition": {
                   "StringEquals": {
                       "SourceVpc": ["VPC ID of example-vpc1"]
                   }
               }
           }
       ]
   }
   ```
   
   
6. 单击"创建"，完成第1条桶策略配置。
7. 单击"创建"，选择"JSON视图"页签，开始第2条桶策略创建。
8. 配置第2条桶策略：除了example-vpc1外的其他VPC内的服务器均不能操作桶example-bucket-a及桶中的对象。 
   *VPC ID of example-vpc1* 为example-vpc1的ID，如何获取VPC ID请参见[获取虚拟私有云的ID信息](https://support.huaweicloud.com/usermanual-vpc/vpc_vpc_0013.html)。
   ```
   {
       "Statement": [
           {
               "Sid": "exampleSidId2",
               "Effect": "Deny",
               "Principal": {
                   "ID": ["*"]
               },
               "Action": "*",
               "Resource": ["example-bucket-a", "example-bucket-a/*"],
               "Condition": {
                   "StringNotEquals": {
                       "SourceVpc": ["VPC ID of example-vpc1"]
                   }
               }
           }
       ]
   }
   ```
   配置了本条桶策略后，由于Principal为通配符星号（\*）且包含Condition，因此会对所有访问者生效，包括桶拥有者如果不是从指定VPC访问，访问请求将被拒绝。如果您不想限制桶拥有者的访问，可以在桶策略中增加一个条件以排除对桶拥有者的限制，示例如下:
   *IAM user ID of bucket owner* 为桶拥有者的IAM用户ID，如何获取IAM用户ID请参见[获取IAM用户ID](https://support.huaweicloud.com/api-iam/iam_17_0002.html)。
   ```
   {
       "Statement": [
           {
               "Sid": "exampleSidId2",
               "Effect": "Deny",
               "Principal": {
                   "ID": ["*"]
               },
               "Action": "*",
               "Resource": ["example-bucket-a", "example-bucket-a/*"],
               "Condition": {
                   "StringNotEquals": {
                       "SourceVpc": ["VPC ID of example-vpc1"],
                       "g:UserId": ["IAM user ID of bucket owner"]
                   }
               }
           }
       ]
   }
   ```
   
   
9. 单击"创建"，完成第2条桶策略配置。
 
#### 步骤五：在VPCEP控制台创建终端节点并配置VPCEP策略
本步骤将创建名为example-vpcep1、example-vpcep2的两个VPC终端节点，并将example-vpcep1绑定example-vpc1，将example-vpcep2绑定example-vpc2。
1. 进入[VPCEP控制台终端节点列表页](https://console.huaweicloud.com/vpc/?agencyId=7dc9c9806c414731b45a360a2e1ddd9e&locale=zh-cn#/ep/list)。
2. 单击右上角"购买终端节点"，进入购买页。
3. 选择终端节点区域。要求与VPC、OBS桶所在区域保持一致。
4. 选择计费模式为"按需计费"。
5. 选择服务。选择"按名称查找服务"。
6. 获取服务名称并验证。 
   [提交工单](https://console.huaweicloud.com/ticket/?locale=zh-cn#/ticketindex/feedbackBusiness?productTypeId=2a129f7ed0b543c6b92d73e2c26aa590)获取服务名称，提交工单时同步提供OBS桶名给技术支持人员。将从工单中获得的服务名称填写到"服务名称"中，单击"验证"。
   
   
7. 设置虚拟私有云。 
   "虚拟私有云"选择[步骤一]中创建的VPC。example-vpcep1选择example-vpc1，example-vpcep2选择example-vpc2。路由表和子网保持默认设置。
   ![](https://support.huaweicloud.com/usermanual-obs/figure/zh-cn_image_0000002348874389.png "点击放大")
   
   
   
8. 设置终端节点策略。 
   启用"策略"开关，策略编辑页面填写终端节点策略。以下方策略为例，允许example-vpc1中的ECS可以向example-bucket-a桶中上传和下载对象，example-vpcep1和example-vpcep2都填写以下示例中的策略。
   ```
   [
       {
           "Action": [
               "obs:object:GetObject",
       "obs:object:PutObject"
           ],
           "Resource": [
               "obs:*:*:object:example-bucket-a/*"
           ],
           "Effect": "Allow"
       }
   ]
   ```
   
   
9. 单击右下角的"立即购买"。
10. 确认终端节点配置，单击"提交"。
 
#### 步骤六：使用VPC中的ECS云服务器访问OBS
登录**example-ecs1**云服务，下载example-bucket-a中的对象。因为example-vpcep1允许访问桶example-bucket-a，并且桶策略允许来自example-vpc1的访问，所以预期操作结果是下载对象成功。
1. 登录example-ecs1云服务器。 
   本例[通过CloudShell登录Linux ECS](https://support.huaweicloud.com/usermanual-ecs/ecs_03_0185.html)，如果您想使用其他登录方式请参考[Linux ECS登录方式概述](https://support.huaweicloud.com/usermanual-ecs/zh-cn_topic_0013771089.html)。
   
   
2. 在ECS云服务器中下载并安装obsutil，详细操作参见[下载和安装obsutil](https://support.huaweicloud.com/utiltg-obs/obs_11_0003.html)。
3. 初始化obsutil。 
   使用[第1条桶策略]中允许访问桶example-bucket-a的账号，初始化obsutil，详细操作参见[obsutil初始化配置](https://support.huaweicloud.com/utiltg-obs/obs_11_0005.html)。如何获取访问密钥AK/SK详见[获取AK/SK](https://support.huaweicloud.com/usermanual-ca/ca_01_0003.html)。
   ![](https://support.huaweicloud.com/usermanual-obs/figure/zh-cn_image_0000002278716924.png)
   
   
   
4. 下载对象。执行如下命令，下载example-bucket-a中的test.txt文档到本地： 
   ```
   ./obsutil cp obs://example-bucket-a/test.txt  test.txt
   ```
   展示如下回显，说明下载成功，example-ecs1可以正常访问example-bucket-a。
   ![](https://support.huaweicloud.com/usermanual-obs/figure/zh-cn_image_0000002278616976.png)
   
   
登录**example-ecs2**云服务，下载example-bucket-a中的对象。因为example-bucket-a的桶策略拒绝了来自example-vpc2的访问，所以预期操作结果是下载对象的请求被拒绝，下载失败。
1. 登录example-ecs2云服务器。 
   本例[通过CloudShell登录Linux ECS](https://support.huaweicloud.com/usermanual-ecs/ecs_03_0185.html)，如果您想使用其他登录方式请参考[Linux ECS登录方式概述](https://support.huaweicloud.com/usermanual-ecs/zh-cn_topic_0013771089.html)。
   
   
2. 在ECS云服务器中下载并安装obsutil，详细操作参见[下载和安装obsutil](https://support.huaweicloud.com/utiltg-obs/obs_11_0003.html)。
3. 初始化obsutil。 
   使用[第1条桶策略]中允许访问桶example-bucket-a的账号，初始化obsutil，详细操作参见[obsutil初始化配置](https://support.huaweicloud.com/utiltg-obs/obs_11_0005.html)。
   ![](https://support.huaweicloud.com/usermanual-obs/figure/zh-cn_image_0000002278635568.png)
   
   
4. 下载对象。执行如下命令，下载example-bucket-a中的test.txt文档到本地： 
   ```
   ./obsutil cp obs://example-bucket-a/test.txt  test.txt
   ```
   展示如下回显，说明下载失败，来自example-ecs2 的下载请求被拒绝，操作结果符合预期。
   ![](https://support.huaweicloud.com/usermanual-obs/figure/zh-cn_image_0000002313305601.png)
   
   
 
#### 相关操作
使用双端固定的过程中，您可能还会涉及到以下操作：
#### 更新已有终端节点的策略
1. 进入[VPCEP控制台终端节点列表页](https://console.huaweicloud.com/vpc/?agencyId=7dc9c9806c414731b45a360a2e1ddd9e&locale=zh-cn#/ep/list)。
2. 单击要更新策略的终端节点，进入终端节点详情页。
3. 选择"策略"页签。
4. 单击"编辑"。
5. 配置VPCEP策略，策略语法参见[VPCEP策略语法说明]。
6. 单击"确认"。
 
#### 相关文档
- 如何将OBS桶共享给用户本地数据中心请参见[通过VPC终端节点和云专线服务实现云下IDC访问云上服务](https://support.huaweicloud.com/bestpractice-vpcep/vpcep_05_1000.html)。
- 虚拟专用网络、云专线线下节点通过终端节点高速访问OBS请参见[访问OBS](https://support.huaweicloud.com/usermanual-vpcep/vpcep_03_0300.html)。
- OBS桶策略介绍详见[桶策略](https://support.huaweicloud.com/perms-cfg-obs/obs_40_0004.html)。
 
