| OLD | NEW | 
| (Empty) |  | 
 |    1 # Copyright 2012 Google Inc. All Rights Reserved. | 
 |    2 # | 
 |    3 # Licensed under the Apache License, Version 2.0 (the "License"); | 
 |    4 # you may not use this file except in compliance with the License. | 
 |    5 # You may obtain a copy of the License at | 
 |    6 # | 
 |    7 #     http://www.apache.org/licenses/LICENSE-2.0 | 
 |    8 # | 
 |    9 # Unless required by applicable law or agreed to in writing, software | 
 |   10 # distributed under the License is distributed on an "AS IS" BASIS, | 
 |   11 # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | 
 |   12 # See the License for the specific language governing permissions and | 
 |   13 # limitations under the License. | 
 |   14  | 
 |   15 from gslib.help_provider import HELP_NAME | 
 |   16 from gslib.help_provider import HELP_NAME_ALIASES | 
 |   17 from gslib.help_provider import HELP_ONE_LINE_SUMMARY | 
 |   18 from gslib.help_provider import HelpProvider | 
 |   19 from gslib.help_provider import HELP_TEXT | 
 |   20 from gslib.help_provider import HelpType | 
 |   21 from gslib.help_provider import HELP_TYPE | 
 |   22  | 
 |   23 _detailed_help_text = (""" | 
 |   24 <B>OVERVIEW</B> | 
 |   25   Access Control Lists (ACLs) allow you to control who can read and write | 
 |   26   your data, and who can read and write the ACLs themselves. | 
 |   27  | 
 |   28   If not specified at the time an object is uploaded (e.g., via the gsutil cp | 
 |   29   -a option), objects will be created with a default object ACL set on the | 
 |   30   bucket (see "gsutil help setdefacl"). You can replace the ACL on an object | 
 |   31   or bucket using the gsutil setacl command (see "gsutil help setacl"), or | 
 |   32   modify the existing ACL using the gsutil chacl command (see "gsutil help | 
 |   33   chacl"). | 
 |   34  | 
 |   35  | 
 |   36 <B>BUCKET VS OBJECT ACLS</B> | 
 |   37   In Google Cloud Storage, the bucket ACL works as follows: | 
 |   38  | 
 |   39     - Users granted READ access are allowed to list the bucket contents. | 
 |   40  | 
 |   41     - Users granted WRITE access are allowed READ access and also are | 
 |   42       allowed to write and delete objects in that bucket -- including | 
 |   43       overwriting previously written objects. | 
 |   44  | 
 |   45     - Users granted FULL_CONTROL access are allowed WRITE access and also | 
 |   46       are allowed to read and write the bucket's ACL. | 
 |   47  | 
 |   48   The object ACL works as follows: | 
 |   49  | 
 |   50     - Users granted READ access are allowed to read the object's data and | 
 |   51       metadata. | 
 |   52  | 
 |   53     - Users granted FULL_CONTROL access are allowed READ access and also | 
 |   54       are allowed to read and write the object's ACL. | 
 |   55  | 
 |   56   A couple of points are worth noting, that sometimes surprise users: | 
 |   57  | 
 |   58   1. There is no WRITE access for objects; attempting to set an ACL with WRITE | 
 |   59      permission for an object will result in an error. | 
 |   60  | 
 |   61   2. The bucket ACL plays no role in determining who can read objects; only the | 
 |   62      object ACL matters for that purpose. This is different from how things | 
 |   63      work in Linux file systems, where both the file and directory permission | 
 |   64      control file read access. It also means, for example, that someone with | 
 |   65      FULL_CONTROL over the bucket may not have read access to objects in | 
 |   66      the bucket.  This is by design, and supports useful cases. For example, | 
 |   67      you might want to set up bucket ownership so that a small group of | 
 |   68      administrators have FULL_CONTROL on the bucket (with the ability to | 
 |   69      delete data to control storage costs), but not grant those users read | 
 |   70      access to the object data (which might be sensitive data that should | 
 |   71      only be accessed by a different specific group of users). | 
 |   72  | 
 |   73  | 
 |   74 <B>CANNED ACLS</B> | 
 |   75   The simplest way to set an ACL on a bucket or object is using a "canned | 
 |   76   ACL". The available canned ACLs are: | 
 |   77  | 
 |   78   project-private            Gives permission to the project team based on their | 
 |   79                              roles. Anyone who is part of the team has READ | 
 |   80                              permission, and project owners and project editors | 
 |   81                              have FULL_CONTROL permission. This is the default | 
 |   82                              ACL for newly created buckets. This is also the | 
 |   83                              default ACL for newly created objects unless the | 
 |   84                              default object ACL for that bucket has been | 
 |   85                              changed. For more details see | 
 |   86                              "gsutil help projects". | 
 |   87  | 
 |   88   private                    Gives the requester (and only the requester) | 
 |   89                              FULL_CONTROL permission for a bucket or object. | 
 |   90  | 
 |   91   public-read                Gives the requester FULL_CONTROL permission and | 
 |   92                              gives all users READ permission. When you apply | 
 |   93                              this to an object, anyone on the Internet can | 
 |   94                              read the object without authenticating. | 
 |   95  | 
 |   96   public-read-write          Gives the requester FULL_CONTROL permission and | 
 |   97                              gives all users READ and WRITE permission. This | 
 |   98                              ACL applies only to buckets. | 
 |   99  | 
 |  100   authenticated-read         Gives the requester FULL_CONTROL permission and | 
 |  101                              gives all authenticated Google account holders | 
 |  102                              READ permission. | 
 |  103  | 
 |  104   bucket-owner-read          Gives the requester FULL_CONTROL permission and | 
 |  105                              gives the bucket owner READ permission. This is | 
 |  106                              used only with objects. | 
 |  107  | 
 |  108   bucket-owner-full-control  Gives the requester FULL_CONTROL permission and | 
 |  109                              gives the bucket owner FULL_CONTROL | 
 |  110                              permission. This is used only with objects. | 
 |  111  | 
 |  112  | 
 |  113 <B>ACL XML</B> | 
 |  114   When you use a canned ACL, it is translated into an XML representation | 
 |  115   that can later be retrieved and edited to specify more fine-grained | 
 |  116   detail about who can read and write buckets and objects. By running | 
 |  117   the gsutil getacl command you can retrieve the ACL XML, and edit it to | 
 |  118   customize the permissions. | 
 |  119  | 
 |  120   As an example, if you create an object in a bucket that has no default | 
 |  121   object ACL set and then retrieve the ACL on the object, it will look | 
 |  122   something like this: | 
 |  123  | 
 |  124   <AccessControlList> | 
 |  125     <Owner> | 
 |  126       <ID> | 
 |  127         00b4903a9740e42c29800f53bd5a9a62a2f96eb3f64a4313a115df3f3a776bf7 | 
 |  128       </ID> | 
 |  129     </Owner> | 
 |  130     <Entries> | 
 |  131       <Entry> | 
 |  132         <Scope type="GroupById"> | 
 |  133           <ID> | 
 |  134             00b4903a9740e42c29800f53bd5a9a62a2f96eb3f64a4313a115df3f3a776bf7 | 
 |  135           </ID> | 
 |  136         </Scope> | 
 |  137         <Permission> | 
 |  138           FULL_CONTROL | 
 |  139         </Permission> | 
 |  140       </Entry> | 
 |  141       <Entry> | 
 |  142         <Scope type="GroupById"> | 
 |  143           <ID> | 
 |  144             00b4903a977fd817e9da167bc81306489181a110456bb635f466d71cf90a0d51 | 
 |  145           </ID> | 
 |  146         </Scope> | 
 |  147         <Permission> | 
 |  148           FULL_CONTROL | 
 |  149         </Permission> | 
 |  150       </Entry> | 
 |  151       <Entry> | 
 |  152         <Scope type="GroupById"> | 
 |  153           <ID> | 
 |  154             00b4903a974898cc8fc309f2f2835308ba3d3df1b889d3fc7e33e187d52d8e71 | 
 |  155           </ID> | 
 |  156         </Scope> | 
 |  157         <Permission> | 
 |  158           READ | 
 |  159         </Permission> | 
 |  160       </Entry> | 
 |  161     </Entries> | 
 |  162   </AccessControlList> | 
 |  163  | 
 |  164   The ACL consists of an Owner element and a collection of Entry elements, | 
 |  165   each of which specifies a Scope and a Permission. Scopes are the way you | 
 |  166   specify an individual or group of individuals, and Permissions specify what | 
 |  167   access they're permitted. | 
 |  168  | 
 |  169   This particular ACL grants FULL_CONTROL to two groups (which means members | 
 |  170   of those groups are allowed to read the object and read and write the ACL), | 
 |  171   and READ permission to a third group. The project groups are (in order) | 
 |  172   the owners group, editors group, and viewers group. | 
 |  173  | 
 |  174   The 64 digit hex identifiers used in this ACL are called canonical IDs, | 
 |  175   and are used to identify predefined groups associated with the project that | 
 |  176   owns the bucket. For more information about project groups, see "gsutil | 
 |  177   help projects". | 
 |  178  | 
 |  179   Here's an example of an ACL specified using the GroupByEmail and GroupByDomain | 
 |  180   scopes: | 
 |  181  | 
 |  182   <AccessControlList> | 
 |  183     <Entries> | 
 |  184       <Entry> | 
 |  185         <Permission> | 
 |  186           FULL_CONTROL | 
 |  187         </Permission> | 
 |  188         <Scope type="GroupByEmail"> | 
 |  189           <EmailAddress>travel-companion-owners@googlegroups.com</EmailAddress> | 
 |  190         </Scope> | 
 |  191       </Entry> | 
 |  192       <Entry> | 
 |  193         <Permission> | 
 |  194           READ | 
 |  195         </Permission> | 
 |  196         <Scope type="GroupByDomain"> | 
 |  197           <Domain>example.com</Domain> | 
 |  198         </Scope> | 
 |  199       </Entry> | 
 |  200     </Entries> | 
 |  201   </AccessControlList> | 
 |  202  | 
 |  203   This ACL grants members of an email group FULL_CONTROL, and grants READ | 
 |  204   access to any user in a domain (which must be a Google Apps for Business | 
 |  205   domain). By applying email group grants to a collection of objects | 
 |  206   you can edit access control for large numbers of objects at once via | 
 |  207   http://groups.google.com. That way, for example, you can easily and quickly | 
 |  208   change access to a group of company objects when employees join and leave | 
 |  209   your company (i.e., without having to individually change ACLs across | 
 |  210   potentially millions of objects). | 
 |  211  | 
 |  212  | 
 |  213 <B>SHARING SCENARIOS</B> | 
 |  214   For more detailed examples how to achieve various useful sharing use | 
 |  215   cases see https://developers.google.com/storage/docs/collaboration | 
 |  216 """) | 
 |  217  | 
 |  218  | 
 |  219 class CommandOptions(HelpProvider): | 
 |  220   """Additional help about Access Control Lists.""" | 
 |  221  | 
 |  222   help_spec = { | 
 |  223     # Name of command or auxiliary help info for which this help applies. | 
 |  224     HELP_NAME : 'acls', | 
 |  225     # List of help name aliases. | 
 |  226     HELP_NAME_ALIASES : ['acl', 'ACL', 'access control', 'access control list', | 
 |  227                          'authorization', 'canned', 'canned acl'], | 
 |  228     # Type of help: | 
 |  229     HELP_TYPE : HelpType.ADDITIONAL_HELP, | 
 |  230     # One line summary of this help. | 
 |  231     HELP_ONE_LINE_SUMMARY : 'Working with Access Control Lists', | 
 |  232     # The full help text. | 
 |  233     HELP_TEXT : _detailed_help_text, | 
 |  234   } | 
| OLD | NEW |