OLD | NEW |
| (Empty) |
1 # -*- coding: utf-8 -*- | |
2 # Copyright 2015 Google Inc. All Rights Reserved. | |
3 # | |
4 # Licensed under the Apache License, Version 2.0 (the "License"); | |
5 # you may not use this file except in compliance with the License. | |
6 # You may obtain a copy of the License at | |
7 # | |
8 # http://www.apache.org/licenses/LICENSE-2.0 | |
9 # | |
10 # Unless required by applicable law or agreed to in writing, software | |
11 # distributed under the License is distributed on an "AS IS" BASIS, | |
12 # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |
13 # See the License for the specific language governing permissions and | |
14 # limitations under the License. | |
15 """Additional help about types of credentials and authentication.""" | |
16 | |
17 from __future__ import absolute_import | |
18 | |
19 from gslib.help_provider import HelpProvider | |
20 | |
21 _DETAILED_HELP_TEXT = (""" | |
22 <B>OVERVIEW</B> | |
23 This help section provides details about various precautions taken by gsutil | |
24 to protect data security, as well as recommendations for how customers should | |
25 safeguard security. | |
26 | |
27 | |
28 <B>TRANSPORT LAYER SECURITY</B> | |
29 gsutil performs all operations using transport-layer encryption (HTTPS), to | |
30 protect against data leakage over shared network links. This is also important | |
31 because gsutil uses "bearer tokens" for authentication (OAuth2) as well as for | |
32 resumable upload identifiers, and such tokens must be protected from being | |
33 eavesdropped and reused. | |
34 | |
35 gsutil also supports the older HMAC style of authentication via the XML API | |
36 (see "gsutil help apis"). While HMAC authentication does not use bearer | |
37 tokens (and thus is not subject to eavesdropping/replay attacks), it's still | |
38 important to encrypt data traffic. | |
39 | |
40 Prior to gsutil release 4.0 it was possible to use HTTP instead of HTTPS by | |
41 setting the "is_secure" configuration parameter in the [Boto] section of the | |
42 boto configuration file to False. However, starting with gsutil version 4.0 | |
43 setting is_secure to False is disallowed. For more details about different | |
44 credential options, see "gsutil help creds". | |
45 | |
46 | |
47 <B>LOCAL FILE STORAGE SECURITY</B> | |
48 gsutil takes a number of precautions to protect against security exploits in | |
49 the files it stores locally: | |
50 | |
51 - When the gsutil config command runs it sets file protection mode 600 | |
52 ("-rw-------") on the the .boto configuration file it generates, so only | |
53 the user (or superuser) can read it. This is important because these files | |
54 contain security-sensitive information, including credentials and proxy | |
55 configuration. | |
56 | |
57 - The gsutil config command also uses file protection mode 600 for the | |
58 private key file stored locally when you create service account | |
59 credentials. | |
60 | |
61 - The default level of logging output from gsutil commands does not include | |
62 security-sensitive information, such as OAuth2 tokens and proxy | |
63 configuration information. (See the "RECOMMENDED USER PRECAUTIONS" section | |
64 below if you increase the level of debug output, using the gsutil -D | |
65 option.) | |
66 | |
67 Note that protection modes are not supported on Windows, so if you | |
68 use gsutil on Windows we recommend using an encrypted file system and strong | |
69 account passwords. | |
70 | |
71 | |
72 <B>SECURITY-SENSITIVE FILES WRITTEN TEMPORARILY TO DISK BY GSUTIL</B> | |
73 gsutil buffers data in temporary files in several situations: | |
74 | |
75 - While compressing data being uploaded via gsutil cp -z, gsutil | |
76 buffers the data in temporary files with protection 600, which it | |
77 deletes after the upload is complete (similarly for downloading files | |
78 that were uploaded with gsutil cp -z or some other process that sets the | |
79 Content-Encoding to "gzip"). However, if you kill the gsutil process | |
80 while the upload is under way the partially written file will be left | |
81 in place. See the "CHANGING TEMP DIRECTORIES" section in | |
82 "gsutil help cp" for details of where the temporary files are written | |
83 and how to change the temp directory location. | |
84 | |
85 - When performing a resumable upload gsutil stores the upload ID (which, | |
86 as noted above, is a bearer token and thus should be safe-guarded) in a | |
87 file under ~/.gsutil/tracker-files with protection 600, and deletes this | |
88 file after the upload is complete. However, if the upload doesn't | |
89 complete successfully the tracker file is left in place so the resumable | |
90 upload can be re-attempted later. Over time it's possible to accumulate | |
91 these tracker files from aborted upload attempts, though resumable | |
92 upload IDs are only valid for 1 week, so the security risk only exists | |
93 for files less than that old. If you consider the risk of leaving | |
94 aborted upload IDs in the tracker directory too high you could modify | |
95 your upload scripts to delete the tracker files; or you could create a | |
96 cron job to clear the tracker directory periodically. | |
97 | |
98 - The gsutil rsync command stores temporary files (with protection 600) | |
99 containing the names, sizes, and checksums of source and destination | |
100 directories/buckets, which it deletes after the rsync is complete. | |
101 However, if you kill the gsutil process while the rsync is under way the | |
102 listing files will be left in place. | |
103 | |
104 Note that gsutil deletes temporary files using the standard OS unlink system | |
105 call, which does not perform `data wiping | |
106 <https://en.wikipedia.org/wiki/Data_erasure>`_. Thus, the content of such | |
107 temporary files can be recovered by a determined adversary. | |
108 | |
109 | |
110 <B>ACCESS CONTROL LISTS</B> | |
111 Unless you specify a different ACL (e.g., via the gsutil cp -a option), by | |
112 default objects written to a bucket use the default object ACL on that bucket. | |
113 Unless you modify that ACL (e.g., via the gsutil defacl command), by default | |
114 it will allow all project editors write access to the object and read/write | |
115 access to the object's metadata; and will allow all project viewers read | |
116 access to the object. | |
117 | |
118 The GCS access control system includes the ability to specify that objects are | |
119 publicly readable. Make sure you intend for any objects you write with this | |
120 permission to be public. Once "published", data on the Internet can be copied | |
121 to many places, so it's effectively impossible to regain read control over an | |
122 object written with this permission. | |
123 | |
124 The GCS access control system includes the ability to specify that buckets are | |
125 publicly writable. While configuring a bucket this way can be convenient for | |
126 various purposes, we recommend against using this permission - it can be | |
127 abused for distributing illegal content, viruses, and other malware, and the | |
128 bucket owner is legally and financially responsible for the content stored in | |
129 their buckets. If you need to make content available to customers who don't | |
130 have Google accounts consider instead using signed URLs (see | |
131 "gsutil help signurl"). | |
132 | |
133 | |
134 <B>SOFTWARE INTEGRITY AND UPDATES</B> | |
135 gsutil is distributed as a standalone bundle via tar and zip files stored in | |
136 the gs://pub bucket, as a PyPi module, and as part of the bundled Cloud | |
137 SDK release. Each of these distribution methods takes a variety of security | |
138 precautions to protect the integrity of the software. We strongly recommend | |
139 against getting a copy of gsutil from any other sources (such as mirror | |
140 sites). | |
141 | |
142 | |
143 <B>PROXY USAGE</B> | |
144 gsutil supports access via proxies, such as Squid and a number of commercial | |
145 products. A full description of their capabilities is beyond the scope of this | |
146 documentation, but proxies can be configured to support many security-related | |
147 functions, including virus scanning, Data Leakage Prevention, control over | |
148 which certificates/CA's are trusted, content type filtering, and many more | |
149 capabilities. Some of these features can slow or block legitimate gsutil | |
150 behavior. For example, virus scanning depends on decrypting file content, | |
151 which in turn requires that the proxy terminate the gsutil connection and | |
152 establish a new connection - and in some cases proxies will rewrite content in | |
153 ways that result in checksum validation errors and other problems. | |
154 | |
155 For details on configuring proxies see the proxy help text in your .boto | |
156 configuration file (generated by the gsutil config command). | |
157 | |
158 | |
159 <B>ENCRYPTION AT REST</B> | |
160 All GCS data are stored encrypted. For more information see | |
161 `Server-Side Encryption | |
162 <https://cloud.google.com/storage/docs/concepts-techniques#encryption>`_. | |
163 | |
164 | |
165 <B>DATA PRIVACY FROM GOOGLE EMPLOYEES</B> | |
166 Google employees will never look at your data unless you first explicitly | |
167 grant them permission to do so while troubleshooting a specific incident. | |
168 | |
169 Google will never ask you to share your credentials, password, or other | |
170 security-sensitive information. Beware of potential phishing scams where | |
171 someone attempts to impersonate Google and asks for such information. | |
172 | |
173 | |
174 <B>MEASUREMENT DATA</B> | |
175 The gsutil perfdiag command collects a variety of performance-related | |
176 measurements and details about your local system and network environment, for | |
177 use in troubleshooting performance problems. None of this information will be | |
178 sent to Google unless you choose to send it. | |
179 | |
180 | |
181 <B>RECOMMENDED USER PRECAUTIONS</B> | |
182 The first and foremost precaution is: Never share your credentials. Each user | |
183 should have distinct credentials. | |
184 | |
185 If you run gsutil -D (to generate debugging output) it will include OAuth2 | |
186 refresh and access tokens in the output. Make sure to redact this information | |
187 before sending this debug output to anyone during troubleshooting/tech support | |
188 interactions. | |
189 | |
190 The proxy configuration information in the .boto configuration is | |
191 security-sensitive, especially if your proxy setup requires user and | |
192 password information. Even if your proxy setup doesn't require user and | |
193 password, the host and port number for your proxy is often considered | |
194 security-sensitive. Protect access to your .boto configuration file. | |
195 | |
196 If you are using gsutil from a production environment (e.g., via a cron job | |
197 running on a host in your data center), use service account credentials rather | |
198 than individual user account credentials. These credentials were designed for | |
199 such use and, for example, protect you from losing access when an employee | |
200 leaves your company. | |
201 """) | |
202 | |
203 | |
204 class CommandOptions(HelpProvider): | |
205 """Additional help about security and privacy considerations using gsutil.""" | |
206 | |
207 # Help specification. See help_provider.py for documentation. | |
208 help_spec = HelpProvider.HelpSpec( | |
209 help_name='security', | |
210 help_name_aliases=['encryption', 'protection', 'privacy', 'proxies', | |
211 'proxy'], | |
212 help_type='additional_help', | |
213 help_one_line_summary='Security and Privacy Considerations', | |
214 help_text=_DETAILED_HELP_TEXT, | |
215 subcommand_help_text={}, | |
216 ) | |
OLD | NEW |