github.com/kaituanwang/hyperledger@v2.0.1+incompatible/docs/source/policies/policies.md (about) 1 # Policies 2 3 **Audience**: Architects, application and smart contract developers, 4 administrators 5 6 In this topic, we'll cover: 7 8 * [What is a policy](#what-is-a-policy) 9 * [Why are policies needed](#why-are-policies-needed) 10 * [How are policies implemented throughout Fabric](#how-are-policies-implemented-throughout-fabric) 11 * [Fabric policy domains](#the-fabric-policy-domains) 12 * [How do you write a policy in Fabric](#how-do-you-write-a-policy-in-fabric) 13 * [Fabric chaincode lifecycle](#fabric-chaincode-lifecycle) 14 * [Overriding policy definitions](#overriding-policy-definitions) 15 16 ## What is a policy 17 18 At its most basic level, a policy is a set of rules that define the structure 19 for how decisions are made and specific outcomes are reached. To that end, 20 policies typically describe a **who** and a **what**, such as the access or 21 rights that an individual has over an **asset**. We can see that policies are 22 used throughout our daily lives to protect assets of value to us, from car 23 rentals, health, our homes, and many more. 24 25 For example, an insurance policy defines the conditions, terms, limits, and 26 expiration under which an insurance payout will be made. The policy is 27 agreed to by the policy holder and the insurance company, and defines the rights 28 and responsibilities of each party. 29 30 Whereas an insurance policy is put in place for risk management, in Hyperledger 31 Fabric, policies are the mechanism for infrastructure management. Fabric policies 32 represent how members come to agreement on accepting or rejecting changes to the 33 network, a channel, or a smart contract. Policies are agreed to by the consortium 34 members when a network is originally configured, but they can also be modified 35 as the network evolves. For example, they describe the criteria for adding or 36 removing members from a channel, change how blocks are formed, or specify the 37 number of organizations required to endorse a smart contract. All of these 38 actions are described by a policy which defines who can perform the action. 39 Simply put, everything you want to do on a Fabric network is controlled by a 40 policy. 41 42 ## Why are policies needed 43 44 Policies are one of the things that make Hyperledger Fabric different from other 45 blockchains like Ethereum or Bitcoin. In those systems, transactions can be 46 generated and validated by any node in the network. The policies that govern the 47 network are fixed at any point in time and can only to be changed using the same 48 process that governs the code. Because Fabric is a permissioned blockchain whose 49 users are recognized by the underlying infrastructure, those users have the 50 ability to decide on the governance of the network before it is launched, and 51 change the governance of a running network. 52 53 Policies allow members to decide which organizations can access or update a Fabric 54 network, and provide the mechanism to enforce those decisions. Policies contain 55 the lists of organizations that have access to a given resource, such as a 56 user or system chaincode. They also specify how many organizations need to agree 57 on a proposal to update a resource, such as a channel or smart contracts. Once 58 they are written, policies evaluate the collection of signatures attached to 59 transactions and proposals and validate if the signatures fulfill the governance 60 agreed to by the network. 61 62 ## How are policies implemented throughout Fabric 63 64 Policies are implemented at different levels of a Fabric network. Each policy 65 domain governs different aspects of how a network operates. 66 67 ![policies.policies](./FabricPolicyHierarchy-2.png) *A visual representation 68 of the Fabric policy hierarchy.* 69 70 ### System channel configuration 71 72 Every network begins with an ordering **system channel**. There must be exactly 73 one ordering system channel for an ordering service, and it is the first channel 74 to be created. The system channel also contains the organizations who are the 75 members of the ordering service (ordering organizations) and those that are 76 on the networks to transact (consortium organizations). 77 78 The policies in the ordering system channel configuration blocks govern the 79 consensus used by the ordering service and define how new blocks are created. 80 The system channel also governs which members of the consortium are allowed to 81 create new channels. 82 83 ### Application channel configuration 84 85 Application _channels_ are used to provide a private communication mechanism 86 between organizations in the consortium. 87 88 The policies in an application channel govern the ability to add or remove 89 members from the channel. Application channels also govern which organizations 90 are required to approve a chaincode before the chaincode is defined and 91 committed to a channel using the Fabric chaincode lifecyle. When an application 92 channel is initially created, it inherits all the ordering service parameters 93 from the orderer system channel by default. However, those parameters (and the 94 policies governing them) can be customized in each channel. 95 96 ### Access control lists (ACLs) 97 98 Network administrators will be especially interested in the Fabric use of ACLs, 99 which provide the ability to configure access to resources by associating those 100 resources with existing policies. These "resources" could be functions on system 101 chaincode (e.g., "GetBlockByNumber" on the "qscc" system chaincode) or other 102 resources (e.g.,who can receive Block events). ACLs refer to policies 103 defined in an application channel configuraton and extends them to control 104 additional resources. The default set of Fabric ACLs is visible in the 105 `configtx.yaml` file under the `Application: &ApplicationDefaults` section but 106 they can and should be overridden in a production environment. The list of 107 resources named in `configtx.yaml` is the complete set of all internal resources 108 currently defined by Fabric. 109 110 In that file, ACLs are expressed using the following format: 111 112 ``` 113 # ACL policy for chaincode to chaincode invocation 114 peer/ChaincodeToChaincode: /Channel/Application/Readers 115 ``` 116 117 Where `peer/ChaincodeToChaincode` represents the resource being secured and 118 `/Channel/Application/Readers` refers to the policy which must be satisfied for 119 the associated transaction to be considered valid. 120 121 For a deeper dive into ACLS, refer to the topic in the Operations Guide on [ACLs](../access_control.html). 122 123 ### Smart contract endorsement policies 124 125 Every smart contract inside a chaincode package has an endorsement policy that 126 specifies how many peers belonging to different channel members need to execute 127 and validate a transaction against a given smart contract in order for the 128 transaction to be considered valid. Hence, the endorsement policies define the 129 organizations (through their peers) who must “endorse” (i.e., approve of) the 130 execution of a proposal. 131 132 ### Modification policies 133 134 There is one last type of policy that is crucial to how policies work in Fabric, 135 the `Modification policy`. Modification policies specify the group of identities 136 required to sign (approve) any configuration _update_. It is the policy that 137 defines how the policy is updated. Thus, each channel configuration element 138 includes a reference to a policy which governs its modification. 139 140 ## The Fabric policy domains 141 142 While Fabric policies are flexible and can be configured to meet the needs of a 143 network, the policy structure naturally leads to a division between the domains 144 governed by either the Ordering Service organizations or the members of the 145 consortium. In the following diagram you can see how the default policies 146 implement control over the Fabric policy domains below. 147 148 ![policies.policies](./FabricPolicyHierarchy-4.png) *A more detailed look at the 149 policy domains governed by the Orderer organizations and consortium organizations.* 150 151 A fully functional Fabric network can feature many organizations with different 152 responsibilities. The domains provide the ability to extend different privileges 153 and roles to different organizations by allowing the founders of the ordering 154 service the ability to establish the initial rules and membership of the 155 consortium. They also allow the organizations that join the consortium to create 156 private application channels, govern their own business logic, and restrict 157 access to the data that is put on the network. 158 159 The system channel configuration and a portion of each application channel 160 configuration provides the ordering organizations control over which organizations 161 are members of the consortium, how blocks are delivered to channels, and the 162 consensus mechanism used by the nodes of the ordering service. 163 164 The system channel configuration provides members of the consortium the ability 165 to create channels. Application channels and ACLs are the mechanism that 166 consortium organizations use to add or remove members from a channel and restrict 167 access to data and smart contracts on a channel. 168 169 ## How do you write a policy in Fabric 170 171 If you want to change anything in Fabric, the policy associated with the resource 172 describes **who** needs to approve it, either with an explicit sign off from 173 individuals, or an implicit sign off by a group. In the insurance domain, an 174 explicit sign off could be a single member of the homeowners insurance agents 175 group. And an implicit sign off would be analogous to requiring approval from a 176 majority of the managerial members of the homeowners insurance group. This is 177 particularly useful because the members of that group can change over time 178 without requiring that the policy be updated. In Hyperledger Fabric, explicit 179 sign offs in policies are expressed using the `Signature` syntax and implicit 180 sign offs use the `ImplicitMeta` syntax. 181 182 ### Signature policies 183 184 `Signature` policies define specific types of users who must sign in order for a 185 policy to be satisfied such as `Org1.Peer OR Org2.Peer`. These policies are 186 considered the most versatile because they allow for the construction of 187 extremely specific rules like: “An admin of org A and 2 other admins, or 5 of 6 188 organization admins”. The syntax supports arbitrary combinations of `AND`, `OR` 189 and `NOutOf`. For example, a policy can be easily expressed by using `AND 190 (Org1, Org2)` which means that a signature from at least one member in Org1 AND 191 one member in Org2 is required for the policy to be satisfied. 192 193 ### ImplicitMeta policies 194 195 `ImplicitMeta` policies are only valid in the context of channel configuration 196 which is based on a tiered hierarchy of policies in a configuration tree. ImplicitMeta 197 policies aggregate the result of policies deeper in the configuration tree that 198 are ultimately defined by Signature policies. They are `Implicit` because they 199 are constructed implicitly based on the current organizations in the 200 channel configuration, and they are `Meta` because their evaluation is not 201 against specific MSP principals, but rather against other sub-policies below 202 them in the configuration tree. 203 204 The following diagram illustrates the tiered policy structure for an application 205 channel and shows how the `ImplicitMeta` channel configuration admins policy, 206 named `/Channel/Admins`, is resolved when the sub-policies named `Admins` below it 207 in the configuration hierarchy are satisfied where each check mark represents that 208 the conditions of the sub-policy were satisfied. 209 210 ![policies.policies](./FabricPolicyHierarchy-6.png) 211 212 As you can see in the diagram above, `ImplicitMeta` policies, Type = 3, use a 213 different syntax, `"<ANY|ALL|MAJORITY> <SubPolicyName>"`, for example: 214 ``` 215 `MAJORITY sub policy: Admins` 216 ``` 217 The diagram shows a sub-policy `Admins`, which refers to all the `Admins` policy 218 below it in the configuration tree. You can create your own sub-policies 219 and name them whatever you want and then define them in each of your 220 organizations. 221 222 As mentioned above, a key benefit of an `ImplicitMeta` policy such as `MAJORITY 223 Admins` is that when you add a new admin organization to the channel, you do not 224 have to update the channel policy. Therefore `ImplicitMeta` policies are 225 considered to be more flexible as the consortium members change. The consortium 226 on the orderer can change as new members are added or an existing member leaves 227 with the consortium members agreeing to the changes, but no policy updates are 228 required. Recall that `ImplicitMeta` policies ultimately resolve the 229 `Signature` sub-policies underneath them in the configuration tree as the 230 diagram shows. 231 232 You can also define an application level implicit policy to operate across 233 organizations, in a channel for example, and either require that ANY of them 234 are satisfied, that ALL are satisfied, or that a MAJORITY are satisfied. This 235 format lends itself to much better, more natural defaults, so that each 236 organization can decide what it means for a valid endorsement. 237 238 Further granularity and control can be achieved if you include [`NodeOUs`](msp.html#organizational-units) in your 239 organization definition. Organization Units (OUs) are defined in the Fabric CA 240 client configuration file and can be associated with an identity when it is 241 created. In Fabric, `NodeOUs` provide a way to classify identities in a digital 242 certificate hierarchy. For instance, an organization having specific `NodeOUs` 243 enabled could require that a 'peer' sign for it to be a valid endorsement, 244 whereas an organization without any might simply require that any member can 245 sign. 246 247 ## An example: channel configuration policy 248 249 Understanding policies begins with examining the `configtx.yaml` where the 250 channel policies are defined. We can use the `configtx.yaml` file in the Fabric 251 test network to see examples of both policy syntax types. We are going to examine 252 the configtx.yaml file used by the [fabric-samples/test-network](https://github.com/hyperledger/fabric-samples/blob/{BRANCH}/test-network/configtx/configtx.yaml) sample. 253 254 The first section of the file defines the organizations of the network. Inside each 255 organization definition are the default policies for that organization, `Readers`, `Writers`, 256 `Admins`, and `Endorsement`, although you can name your policies anything you want. 257 Each policy has a `Type` which describes how the policy is expressed (`Signature` 258 or `ImplicitMeta`) and a `Rule`. 259 260 The test network example below shows the Org1 organization definition in the system 261 channel, where the policy `Type` is `Signature` and the endorsement policy rule 262 is defined as `"OR('Org1MSP.peer')"`. This policy specifies that a peer that is 263 a member of `Org1MSP` is required to sign. It is these signature policies that 264 become the sub-policies that the ImplicitMeta policies point to. 265 266 <details> 267 <summary> 268 **Click here to see an example of an organization defined with signature policies** 269 </summary> 270 271 ``` 272 - &Org1 273 # DefaultOrg defines the organization which is used in the sampleconfig 274 # of the fabric.git development environment 275 Name: Org1MSP 276 277 # ID to load the MSP definition as 278 ID: Org1MSP 279 280 MSPDir: crypto-config/peerOrganizations/org1.example.com/msp 281 282 # Policies defines the set of policies at this level of the config tree 283 # For organization policies, their canonical path is usually 284 # /Channel/<Application|Orderer>/<OrgName>/<PolicyName> 285 Policies: 286 Readers: 287 Type: Signature 288 Rule: "OR('Org1MSP.admin', 'Org1MSP.peer', 'Org1MSP.client')" 289 Writers: 290 Type: Signature 291 Rule: "OR('Org1MSP.admin', 'Org1MSP.client')" 292 Admins: 293 Type: Signature 294 Rule: "OR('Org1MSP.admin')" 295 Endorsement: 296 Type: Signature 297 Rule: "OR('Org1MSP.peer')" 298 ``` 299 </details> 300 301 The next example shows the `ImplicitMeta` policy type used in the `Application` 302 section of the `configtx.yaml`. These set of policies lie on the 303 `/Channel/Application/` path. If you use the default set of Fabric ACLs, these 304 policies define the behavior of many important features of application channels, 305 such as who can query the channel ledger, invoke a chaincode, or update a channel 306 config. These policies point to the sub-policies defined for each organization. 307 The Org1 defined in the section above contains `Reader`, `Writer`, and `Admin` 308 sub-policies that are evaluated by the `Reader`, `Writer`, and `Admin` `ImplicitMeta` 309 policies in the `Application` section. Because the test network is built with the 310 default policies, you can use the example Org1 to query the channel ledger, invoke a 311 chaincode, and approve channel updates for any test network channel that you 312 create. 313 314 <details> 315 <summary> 316 **Click here to see an example of ImplicitMeta policies** 317 </summary> 318 ``` 319 ################################################################################ 320 # 321 # SECTION: Application 322 # 323 # - This section defines the values to encode into a config transaction or 324 # genesis block for application related parameters 325 # 326 ################################################################################ 327 Application: &ApplicationDefaults 328 329 # Organizations is the list of orgs which are defined as participants on 330 # the application side of the network 331 Organizations: 332 333 # Policies defines the set of policies at this level of the config tree 334 # For Application policies, their canonical path is 335 # /Channel/Application/<PolicyName> 336 Policies: 337 Readers: 338 Type: ImplicitMeta 339 Rule: "ANY Readers" 340 Writers: 341 Type: ImplicitMeta 342 Rule: "ANY Writers" 343 Admins: 344 Type: ImplicitMeta 345 Rule: "MAJORITY Admins" 346 LifecycleEndorsement: 347 Type: ImplicitMeta 348 Rule: "MAJORITY Endorsement" 349 Endorsement: 350 Type: ImplicitMeta 351 Rule: "MAJORITY Endorsement" 352 ``` 353 </details> 354 355 ## Fabric chaincode lifecycle 356 357 In the Fabric 2.0 release, a new chaincode lifecycle process was introduced, 358 whereby a more democratic process is used to govern chaincode on the network. 359 The new process allows multiple organizations to vote on how a chaincode will 360 be operated before it can be used on a channel. This is significant because it is 361 the combination of this new lifecycle process and the policies that are 362 specified during that process that dictate the security across the network. More details on 363 the flow are available in the [Chaincode for Operators](../chaincode4noah.html) 364 tutorial, but for purposes of this topic you should understand how policies are 365 used in this flow. The new flow includes two steps where policies are specified: 366 when chaincode is **approved** by organization members, and when it is **committed** 367 to the channel. 368 369 The `Application` section of the `configtx.yaml` file includes the default 370 chaincode lifecycle endorsement policy. In a production environment you would 371 customize this definition for your own use case. 372 373 ``` 374 ################################################################################ 375 # 376 # SECTION: Application 377 # 378 # - This section defines the values to encode into a config transaction or 379 # genesis block for application related parameters 380 # 381 ################################################################################ 382 Application: &ApplicationDefaults 383 384 # Organizations is the list of orgs which are defined as participants on 385 # the application side of the network 386 Organizations: 387 388 # Policies defines the set of policies at this level of the config tree 389 # For Application policies, their canonical path is 390 # /Channel/Application/<PolicyName> 391 Policies: 392 Readers: 393 Type: ImplicitMeta 394 Rule: "ANY Readers" 395 Writers: 396 Type: ImplicitMeta 397 Rule: "ANY Writers" 398 Admins: 399 Type: ImplicitMeta 400 Rule: "MAJORITY Admins" 401 LifecycleEndorsement: 402 Type: ImplicitMeta 403 Rule: "MAJORITY Endorsement" 404 Endorsement: 405 Type: ImplicitMeta 406 Rule: "MAJORITY Endorsement" 407 ``` 408 409 - The `LifecycleEndorsement` policy governs who needs to _approve a chaincode 410 definition_. 411 - The `Endorsement` policy is the _default endorsement policy for 412 a chaincode_. More on this below. 413 414 ## Chaincode endorsement policies 415 416 The endorsement policy is specified for a **chaincode** when it is approved 417 and committed to the channel using the Fabric chaincode lifecycle (that is, one 418 endorsement policy covers all of the state associated with a chaincode). The 419 endorsement policy can be specified either by reference to an endorsement policy 420 defined in the channel configuration or by explicitly specifying a Signature policy. 421 422 If an endorsement policy is not explicitly specified during the approval step, 423 the default `Endorsement` policy `"MAJORITY Endorsement"` is used which means 424 that a majority of the peers belonging to the different channel members 425 (organizations) need to execute and validate a transaction against the chaincode 426 in order for the transaction to be considered valid. This default policy allows 427 organizations that join the channel to become automatically added to the chaincode 428 endorsement policy. If you don't want to use the default endorsement 429 policy, use the Signature policy format to specify a more complex endorsement 430 policy (such as requiring that a chaincode be endorsed by one organization, and 431 then one of the other organizations on the channel). 432 433 Signature policies also allow you to include `principals` which are simply a way 434 of matching an identity to a role. Principals are just like user IDs or group 435 IDs, but they are more versatile because they can include a wide range of 436 properties of an actor’s identity, such as the actor’s organization, 437 organizational unit, role or even the actor’s specific identity. When we talk 438 about principals, they are the properties which determine their permissions. 439 Principals are described as 'MSP.ROLE', where `MSP` represents the required MSP 440 ID (the organization), and `ROLE` represents one of the four accepted roles: 441 Member, Admin, Client, and Peer. A role is associated to an identity when a user 442 enrolls with a CA. You can customize the list of roles available on your Fabric 443 CA. 444 445 Some examples of valid principals are: 446 * 'Org0.Admin': an administrator of the Org0 MSP 447 * 'Org1.Member': a member of the Org1 MSP 448 * 'Org1.Client': a client of the Org1 MSP 449 * 'Org1.Peer': a peer of the Org1 MSP 450 * 'OrdererOrg.Orderer': an orderer in the OrdererOrg MSP 451 452 There are cases where it may be necessary for a particular state 453 (a particular key-value pair, in other words) to have a different endorsement 454 policy. This **state-based endorsement** allows the default chaincode-level 455 endorsement policies to be overridden by a different policy for the specified 456 keys. 457 458 For a deeper dive on how to write an endorsement policy refer to the topic on 459 [Endorsement policies](../endorsement-policies.html) in the Operations Guide. 460 461 **Note:** Policies work differently depending on which version of Fabric you are 462 using: 463 - In Fabric releases prior to 2.0, chaincode endorsement policies can be 464 updated during chaincode instantiation or by using the chaincode lifecycle 465 commands. If not specified at instantiation time, the endorsement policy 466 defaults to “any member of the organizations in the channel”. For example, 467 a channel with “Org1” and “Org2” would have a default endorsement policy of 468 “OR(‘Org1.member’, ‘Org2.member’)”. 469 - Starting with Fabric 2.0, Fabric introduced a new chaincode 470 lifecycle process that allows multiple organizations to agree on how a 471 chaincode will be operated before it can be used on a channel. The new process 472 requires that organizations agree to the parameters that define a chaincode, 473 such as name, version, and the chaincode endorsement policy. 474 475 ## Overriding policy definitions 476 477 Hyperledger Fabric includes default policies which are useful for getting started, 478 developing, and testing your blockchain, but they are meant to be customized 479 in a production environment. You should be aware of the default policies 480 in the `configtx.yaml` file. Channel configuration policies can be extended 481 with arbitrary verbs, beyond the default `Readers, Writers, Admins` in 482 `configtx.yaml`. The orderer system and application channels are overridden by 483 issuing a config update when you override the default policies by editing the 484 `configtx.yaml` for the orderer system channel or the `configtx.yaml` for a 485 specific channel. 486 487 See the topic on 488 [Updating a channel configuration](../config_update.html#updating-a-channel-configuration) 489 for more information. 490 491 <!--- Licensed under Creative Commons Attribution 4.0 International License 492 https://creativecommons.org/licenses/by/4.0/) -->