云服务器内容精选

  • 查询结果验证 切换到u1账号连接集群。 1 SET ROLE u1 PASSWORD '*********'; 查询v1视图,u1仅能查询到视图v1数据。 1 2 3 4 5 6 SELECT * FROM dbadmin.v1; id | province_id | user_info ----+-------------+----------- 1 | 1 | Alice 2 | 1 | Jack (2 rows) 若u1试图查询视图v2中的数据,则会返回如下报错: 1 2 SELECT * FROM dbadmin.v2; ERROR: SELECT permission denied to user "u1" for relation "dbadmin.v2" 结果显示用户u1仅能查看省份1(即province_id=1)的数据。 使用u2账号连接集群。 1 SET ROLE u2 PASSWORD '*********'; 查询v2视图,u2仅能查询到视图v2数据。 1 2 3 4 5 SELECT * FROM dbadmin.v2; id | province_id | user_info ----+-------------+----------- 3 | 2 | Jack (1 row) 若u2试图查询视图v1中的数据,则会返回如下报错: 1 2 SELECT * FROM dbadmin.v1; ERROR: SELECT permission denied to user "u2" for relation "dbadmin.v1" 结果显示用户u2仅能查看省份2(即province_id=2)的数据。
  • 实现方式 通过创建视图实现上述场景中的需求,具体操作步骤如下: dbadmin用户连接集群后,在dbadmin模式下为省份1和省份2分别创建视图v1和视图v2。 使用CREATE VIEW语句创建查询省份1数据的视图v1: 1 2 CREATE VIEW v1 AS SELECT * FROM customer WHERE province_id=1; 使用CREATE VIEW语句创建查询省份2数据的视图v2: 1 2 CREATE VIEW v2 AS SELECT * FROM customer WHERE province_id=2; 创建用户u1和u2。 1 2 CREATE USER u1 PASSWORD '*********'; CREATE USER u2 PASSWORD '*********'; 使用GRANT语句将对应的数据查询权限授予目标用户。 授予u1和u2对应视图schema的权限。 1 GRANT USAGE ON schema dbadmin TO u1,u2; 授予u1通过v1视图查询省份1数据的权限: 1 GRANT SELECT ON v1 TO u1; 授予u2通过v2视图查询省份2数据的权限: 1 GRANT SELECT ON v2 TO u2;
  • 场景 dbadmin用户连接集群后,创建示例表customer: 1 CREATE TABLE customer (id bigserial NOT NULL, province_id bigint NOT NULL, user_info varchar, primary key (id)) DISTRIBUTE BY HASH(id); 向示例表customer插入测试数据: 1 2 INSERT INTO customer(province_id,user_info) VALUES (1,'Alice'),(1,'Jack'),(2,'Jack'),(3,'Matu'); INSERT 0 4 查询示例表customer: 1 2 3 4 5 6 7 8 SELECT * FROM customer; id | province_id | user_info ----+-------------+----------- 3 | 2 | Jack 1 | 1 | Alice 2 | 1 | Jack 4 | 3 | Matu (4 rows)
  • 响应示例 { "security_group": { "id": "16b6e77a-08fa-42c7-aa8b-106c048884e6", "name": "qq", "description": "", "vpc_id": "3ec3b33f-ac1c-4630-ad1c-7dba1ed79d85", "enterprise_project_id": "0aad99bc-f5f6-4f78-8404-c598d76b0ed2", "security_group_rules": [ { "id": "f11a3824-ac19-4fad-b4f1-c5f4a6dd0a80", "tenant_id": "060576782980d5762f9ec014dd2f1148", "security_group_id": "69c999ad-d9ef-4d79-94fd-35e6ceb75325", "remote_group_id": "69c999ad-d9ef-4d79-94fd-35e6ceb75325", "direction": "ingress", "protocol": null, "description": "", "ethertype": "IPv6", "remote_ip_prefix": null, "remote_address_group_id": null, "port_range_max": null, "port_range_min": null }, { "id": "3d6480e8-9ea4-46dc-bb1b-8db190cd5677", "tenant_id": "060576782980d5762f9ec014dd2f1148", "security_group_id": "69c999ad-d9ef-4d79-94fd-35e6ceb75325", "remote_group_id": null, "direction": "egress", "protocol": null, "description": "", "ethertype": "IPv6", "remote_ip_prefix": null, "remote_address_group_id": null, "port_range_max": null, "port_range_min": null }, { "id": "9581f18c-1fdd-43da-ace9-7758a56ef28a", "tenant_id": "060576782980d5762f9ec014dd2f1148", "security_group_id": "69c999ad-d9ef-4d79-94fd-35e6ceb75325", "remote_group_id": null, "direction": "egress", "protocol": null, "description": "", "ethertype": "IPv4", "remote_ip_prefix": null, "remote_address_group_id": null, "port_range_max": null, "port_range_min": null }, { "id": "a3ba270e-e58b-432d-a912-aeb7eace9fb8", "tenant_id": "060576782980d5762f9ec014dd2f1148", "security_group_id": "69c999ad-d9ef-4d79-94fd-35e6ceb75325", "remote_group_id": "69c999ad-d9ef-4d79-94fd-35e6ceb75325", "direction": "ingress", "protocol": null, "description": "", "ethertype": "IPv4", "remote_ip_prefix": null, "remote_address_group_id": null, "port_range_max": null, "port_range_min": null } ] } }
  • 请求示例 创建一个安全组,命名为sg-01,所在vpc id为3ec3b33f-ac1c-4630-ad1c-7dba1ed79d85。 POST https://{Endpoint}/v1/{project_id}/security-groups { "security_group": { "name": "sg-01", "vpc_id": "3ec3b33f-ac1c-4630-ad1c-7dba1ed79d85", "enterprise_project_id": "0aad99bc-f5f6-4f78-8404-c598d76b0ed2" } }
  • 请求参数 表2 请求参数 名称 是否必选 参数类型 说明 security_group 是 security_group object 安全组对象,请参见表3。 表3 security_group字段说明 名称 是否必选 参数类型 说明 name 是 String 功能说明:安全组名称。 取值范围:1-64个字符,支持数字、字母、中文、_(下划线)、-(中划线)、.(点)。 vpc_id 否 String 安全组所在的vpc的资源标识。 说明: 当前该参数只作提示用,不约束安全组在此vpc下,不建议继续使用。 enterprise_project_id 否 String 功能说明:企业项目ID。创建安全组时,给安全组绑定企业项目ID。 取值范围:最大长度36字节,带“-”连字符的UUID格式,或者是字符串“0”。“0”表示默认企业项目。 说明: 关于企业项目ID的获取及企业项目特性的详细信息,请参见《企业管理用户指南》。
  • 响应参数 表4 响应参数 名称 参数类型 说明 security_group security_group object 安全组对象,请参见表5。 表5 security_group字段说明 名称 参数类型 说明 name String 安全组名称。 description String 安全组描述。 id String 安全组唯一标识。 vpc_id String 安全组所在的vpc的资源标识。 说明: 当前该参数只作提示用,不约束安全组在此vpc下,不建议继续使用。 security_group_rules Array of security_group_rule objects 默认安全组规则列表,保证安全组内互通。 enterprise_project_id String 功能说明:企业项目ID。创建安全组时,给安全组绑定企业项目ID。 取值范围:最大长度36字节,带“-”连字符的UUID格式,或者是字符串“0”。“0”表示默认企业项目。 说明: 关于企业项目ID的获取及企业项目特性的详细信息,请参见《企业管理用户指南》。 表6 security_group_rule对象 名称 参数类型 说明 id String 安全组规则标识。 description String 功能说明:安全组规则描述。 取值范围:0-255个字符,支持数字、字母、中文字符。 security_group_id String 安全组标识。 direction String 功能说明:出入控制方向。 取值范围: egress:出方向 ingress:入方向 ethertype String 功能说明:IP协议类型。 取值范围:IPv4,IPv6 protocol String 功能说明:协议类型。 取值范围:icmp、tcp、udp、icmpv6、IP协议号(0~255)(如gre协议号为47)。 约束:为空表示支持所有协议。 port_range_min Integer 功能说明:起始端口值。 取值范围:1~65535 约束:不能大于port_range_max的值,为空表示所有端口,如果协议是icmp类型,取值范围请参见安全组规则icmp协议名称对应关系表。 port_range_max Integer 功能说明:结束端口值。 取值范围:1~65535 约束:协议不为icmp时,取值不能小于port_range_min的值,为空表示所有端口,如果协议是icmp类型,取值范围请参见安全组规则icmp协议名称对应关系表。 remote_ip_prefix String 功能说明:远端IP地址,当direction是egress时为虚拟机访问端的地址,当direction是ingress时为访问虚拟机的地址。 取值范围:IP地址,或者cidr格式 约束:和remote_group_id,remote_address_group_id互斥。 remote_group_id String 功能说明:对端安全组id。 约束:和remote_ip_prefix,remote_address_group_id互斥。 remote_address_group_id String 功能说明:远端IP地址组ID。 约束:和remote_ip_prefix,remote_group_id互斥。 tenant_id String 功能说明:安全组规则所属项目ID。
  • 责任共担 华为云秉承“将公司对网络和业务安全性保障的责任置于公司的商业利益之上”。针对层出不穷的 云安全 挑战和无孔不入的云安全威胁与攻击,华为云在遵从法律法规业界标准的基础上,以安全生态圈为护城河,依托华为独有的软硬件优势,构建面向不同区域和行业的完善云服务安全保障体系。 安全性是华为云与您的共同责任,如图1所示。 华为云:负责云服务自身的安全,提供安全的云。华为云的安全责任在于保障其所提供的 IaaS、PaaS 和 SaaS 各类各项云服务自身的安全,涵盖华为云数据中心的物理环境设施和运行其上的基础服务、平台服务、应用服务等。这不仅包括华为云基础设施和各项云服务技术的安全功能和性能本身,也包括运维运营安全,以及更广义的安全合规遵从。 租户:负责云服务内部的安全,安全地使用云。 华为云租户的安全责任在于对使用的 IaaS、PaaS 和 SaaS 类各项云服务内部的安全以及对租户定制配置进行安全有效的管理,包括但不限于虚拟网络、 虚拟主机 和访客虚拟机的操作系统,虚拟防火墙、API 网关和高级安全服务,各项云服务,租户数据,以及身份账号和密钥管理等方面的安全配置。 《华为云安全白皮书》详细介绍华为云安全性的构建思路与措施,包括云安全战略、责任共担模型、合规与隐私、安全组织与人员、基础设施安全、租户服务与租户安全、工程安全、运维运营安全、生态安全。 图1 华为云安全责任共担模型 父主题: 安全
  • 创建名单 如果当前应用列表区域没有适合的黑白名单,您可以选择创建新的黑白名单。 登录KooPhone管理控制台,进入云手机页面。 单击左侧导航栏的“安全管控策略”,选择“应用黑白名单”,进入“应用黑白名单”页面。 单击“创建名单”。填写应用名单信息后,单击“下一步”。应用名单信息说明如表2所示。 表2 应用名单信息说明 参数 参数说明 名单名称 用户自定义的名单名称,可输入20个字符。 名单类型 黑名单、白名单两种类型。 应用包名 本地应用程序的名称。 描述 用户对名单的自定义描述,可输入100个字符。 选择云机,单击“下一步”。 列表展示已购买的云手机实例,可在搜索栏输入“云手机名称”“云手机ID”“区域”“规格信息”“用户名”进行筛选。 云手机仅可录入一个应用黑白名单中。 查看应用名单信息与云手机信息。确认无误后,单击“提交”。 页面弹窗提示“创建成功”,单击“确定”。
  • 条件(Condition) 条件(Condition)是SCP生效的特定条件,包括条件键和运算符。 条件键表示SCP语句的Condition元素中的键值。根据适用范围,分为全局级条件键和服务级条件键。 全局级条件键(前缀为g:)适用于所有操作,在鉴权过程中,云服务不需要提供用户身份信息,系统将自动获取并鉴权。详情请参见:请参考全局条件键。 服务级条件键(前缀通常为服务缩写,如pca:)仅适用于对应服务的操作,详情请参见表 PCA支持的服务级条件键。 单值/多值表示API调用时请求中与条件关联的值数。单值条件键在API调用时的请求中最多包含一个值,多值条件键在API调用时请求可以包含多个值。例如:g:SourceVpce是单值条件键,表示仅允许通过某个 VPC终端节点 发起请求访问某资源,一个请求最多包含一个VPC终端节点ID值。g:TagKeys是多值条件键,表示请求中携带的所有标签的key组成的列表,当用户在调用API请求时传入标签可以传入多个值。 运算符与条件键、条件值一起构成完整的条件判断语句,当请求信息满足该条件时,SCP才能生效。支持的运算符请参见:运算符。 PCA定义了以下可以在SCP的Condition元素中使用的条件键,您可以使用这些条件键进一步细化SCP语句应用的条件。 表4 PCA支持的服务级条件键 服务级条件键 类型 单值/多值 说明 pca:CommonName string 单值 根据请求参数中的证书通用名称过滤访问。
  • JWT结构 JWT是一个包含了特定声明的Json结构。从前面介绍的JWT认证流程第六步知道,只要验证这个Json结构本身,即可以确认请求身份,不需要查询后端服务。下面解析JWT结构从而了解如何携带这些认证信息。 JWT包含三部分:头部Header、负载Payload和签名Signature。 头部Header 头部描述JWT的元数据,包括算法alg和类别typ等信息。alg描述签名算法,这样接收者可以根据对应的算法来验证签名,默认是如下所示的HS256,表示 HMAC-SHA256;typ表示令牌类型,设置为JWT,表示这是一个JWT类型的令牌。 { "alg": "HS256", "typ": "JWT" } 负载Payload 存放令牌的主体内容,由认证服务AuthN生成相关信息并放到令牌的负载中。重要属性包括: iss:令牌发行者 issuer aud:令牌受众 audience 在JWT验证时,会校验发行者、受众信息和令牌负载中的发行者iss、受众audience是否匹配。JWT的内容本身不是加密的,所有拿到令牌的服务都可以看到令牌负载Payload中的内容,因此建议Payload里不要存放私密的信息。 签名Signature 签名字段是对头部和负载的签名,确保只有特定合法的认证服务才可以发行令牌。实际使用中一般是把头部和负载分别执行Base64转换成字符串,然后使用认证服务的密钥对拼接的字符串进行签名,签名算法正是前面介绍的头域中定义的算法。 一个完整的JWT示例如下,对于头部Header和负载Payload进行签名得到Signature。 # Header: { "alg": "RS512", "typ": "JWT" } # Payload { "iss": "weather@cloudnative-istio", "audience": "weather@cloudnative-istio" } # Signature RSASHA512( base64UrlEncode(header) + "." + base64UrlEncode(payload) ) 以上结构最终输出的令牌如下,可以看到“.”分割的三个字符串分别对应JWT结构的头部、负载和签名三部分。 eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJleHAiOjQ2ODU5ODk3MDAsInZlciI6IjIuMCIsImlhdCI6MTUzMjM4OTcwMCwiaXNzIjoid2VhdGhlckBjbG91ZG5hdGl2ZS1pc3Rpby5ib29rIiwic3ViIjoid2VhdGhlckBjbG91ZG5hdGl2ZS1pc3Rpby5ib29rIn0.SEp-8qiMwI45BuBgQPH-wTHvOYxcE_jPI0wqOxEpauw
  • JWT认证原理 JWT(Json Web Token)是一种服务端向客户端发放令牌的认证方式。客户端用户名密码登录时,服务端会生成一个令牌返回给客户端;客户端随后在向服务端请求时只需携带这个令牌,服务端通过校验令牌来验证是否是来自合法的客户端,进而决定是否向客户端返回应答。从机制可以看到,这种基于请求中携带令牌来维护认证的客户端连接的方式解决了早期服务端存储会话的各种有状态问题。 在Istio使用中,JWT令牌生成由特定的认证服务提供,令牌验证由网格执行,彻底解耦用户业务中的认证逻辑,使应用程序专注于自身业务。基于Istio的JWT完整机制如图1所示。 图1 Istio JWT认证流程 ① 客户端连接认证服务,提供用户名和密码; ② 认证服务验证用户名和密码,生成JWT令牌,包括用户标识和过期时间等信息,并使用认证服务的私钥签名; ③ 认证服务向客户端返回生成的JWT令牌; ④ 客户端将收到的JWT令牌存储在本端,供后续请求时使用; ⑤ 客户端在向其他服务发起请求时携带JWT令牌,无需再提供用户名、密码等信息; ⑥ 网格数据面代理拦截到流量,使用配置的公钥验证JWT令牌; ⑦ 验证通过后,网格代理将请求转发给服务端; ⑧ 服务端处理请求; ⑨ 服务端返回应答数据给网格代理; ⑩ 网格数据面代理转发应答数据给调用方。 在这个过程中,重点是第六步,原来服务端的JWT认证功能迁移到了网格代理上。网格数据面从控制面配置的认证策略中获取验证JWT令牌的公钥,可以是jwks(JSON Web Key Set)上配置的公钥,也可以是从jwksUri配置的公钥地址获取到的公钥。获得公钥后,网格代理使用该公钥对认证服务私钥签名的令牌进行验证,并解开令牌中的iss,验证是否匹配认证策略中的签发者信息。验证通过的请求发送给应用程序,验证不通过则直接拒绝,不会发送给应用程序。
  • 责任共担 华为云秉承“将公司对网络和业务安全性保障的责任置于公司的商业利益之上”。针对层出不穷的云安全挑战和无孔不入的云安全威胁与攻击,华为云在遵从法律法规业界标准的基础上,以安全生态圈为护城河,依托华为独有的软硬件优势,构建面向不同区域和行业的完善云服务安全保障体系。 安全性是华为云与您的共同责任,如图1所示。 华为云:负责云服务自身的安全,提供安全的云。华为云的安全责任在于保障其所提供的IaaS、PaaS和SaaS各类各项云服务自身的安全,涵盖华为云数据中心的物理环境设施和运行其上的基础服务、平台服务、应用服务等。这不仅包括华为云基础设施和各项云服务技术的安全功能和性能本身,也包括运维运营安全,以及更广义的安全合规遵从。 租户:负责云服务内部的安全,安全地使用云。 华为云租户的安全责任在于对使用的IaaS、PaaS和SaaS类各项云服务内部的安全以及对租户定制配置进行安全有效的管理,包括但不限于虚拟网络、虚拟主机和访客虚拟机的操作系统,虚拟防火墙、API网关和高级安全服务,各项云服务,租户数据,以及身份账号和密钥管理等方面的安全配置。 《华为云安全白皮书》详细介绍华为云安全性的构建思路与措施,包括云安全战略、责任共担模型、合规与隐私、安全组织与人员、基础设施安全、租户服务与租户安全、工程安全、运维运营安全、生态安全。 图1 华为云安全责任共担模型 父主题: 安全
  • Spark作业传输通信加密 Spark作业支持通过配置表1中的参数开启通信加密。 请确保已上传密钥和证书到指定的OBS路径下,并在作业配置中的其他依赖文件中引入。 表1 Spark作业传输开启通信加密配置项 参数 说明 配置示例 spark.network.crypto.enabled 该参数用于启用或禁用数据在节点之间传输时的加密。当设置为true时,Spark会加密Executor和Driver之间以及Executor之间的所有通信。这是确保数据传输安全的重要配置。 true spark.network.sasl.serverAlwaysEncrypt 该参数用于配置服务器端是否使用加密来与客户端通信。当设置为true时,服务器将要求所有客户端使用加密连接,这可以提高通信的安全性。 true spark.authenticate 该参数用于配置是否对Spark应用程序的组件进行身份验证。启用身份验证可以防止未授权的访问。这个参数可以设置为true来启用身份验证。 true
  • Flink作业传输通信加密 在Flink作业可以通过配置表2中的参数来开启SSL传输。 打开Task Manager之间data传输通道的SSL,会对性能会有较大影响,建议结合安全和性能综合考虑是否开启。 证书文件还需要在作业配置页面的“其他依赖文件”中完成配置。 OBS路径/opt/flink/usrlib/userData/为默认存储依赖文件路径。 请确保已上传密钥和证书到指定的OBS路径下,并在作业配置中的其他依赖文件中引入。 表2 Flink作业传输通信加密配置参数 参数 说明 是否必须 配置示例 security.ssl.enabled 打开SSL总开关。 是 true akka.ssl.enabled 打开akka SSL开关。 否 true blob.service.ssl.enabled 打开blob通道SSL开关。 否 true taskmanager.data.ssl.enable 打开taskmanager之间通信的SSL开关。 否 true security.ssl.algorithms 设置SSL加密的算法。 否 TLS_DHE_RSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,TLS_DHE_RSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 security.ssl.keystore keystore的存放路径,“flink.keystore”表示用户通过generate_keystore.sh*工具生成的keystore文件名称。 是 /opt/flink/usrlib/userData/flink.keystore security.ssl.keystore-password keystore的password,-表示需要用户输入自定义设置的密码值。 是 - security.ssl.key-password ssl key的password,-表示需要用户输入自定义设置的密码值。 是 - security.ssl.truststore truststore存放路径,“flink.truststore”表示用户通过generate_keystore.sh*工具生成的truststore文件名称。 是 /opt/flink/usrlib/userData/flink.truststore security.ssl.truststore-password truststore的password,-表示需要用户输入自定义设置的密码值。 是 - security.ssl.rest.enabled REST API接口是否启用SSL/TLS加密。 是 false security.ssl.verify-hostname 用于控制在建立SSL/TLS连接时是否验证对端的主机名(hostname)与证书中的信息是否匹配。 否 false security.ssl.protocol 指定SSL/TLS连接时所使用的协议版本 否 TLSv1.2、TLSv1.3 security.ssl.encrypt.enabled Flink集群内部以及与其他组件之间通信时是否启用 数据加密 否 false 开启Flink作业传输通信加密配置示例: security.ssl.enabled: true security.ssl.encrypt.enabled: false security.ssl.key-password: *** security.ssl.keystore-password: Admin12! security.ssl.keystore: /opt/flink/usrlib/userData/*.keystore security.ssl.protocol: TLSv1.2 security.ssl.rest.enabled: false security.ssl.truststore-password: *** security.ssl.truststore: /opt/flink/usrlib/userData/*.truststore security.ssl.verify-hostname: false