comparison env/lib/python3.7/site-packages/boto/cloudtrail/layer1.py @ 0:26e78fe6e8c4 draft

"planemo upload commit c699937486c35866861690329de38ec1a5d9f783"
author shellac
date Sat, 02 May 2020 07:14:21 -0400
parents
children
comparison
equal deleted inserted replaced
-1:000000000000 0:26e78fe6e8c4
1 # Copyright (c) 2015 Amazon.com, Inc. or its affiliates. All Rights Reserved
2 #
3 # Permission is hereby granted, free of charge, to any person obtaining a
4 # copy of this software and associated documentation files (the
5 # "Software"), to deal in the Software without restriction, including
6 # without limitation the rights to use, copy, modify, merge, publish, dis-
7 # tribute, sublicense, and/or sell copies of the Software, and to permit
8 # persons to whom the Software is furnished to do so, subject to the fol-
9 # lowing conditions:
10 #
11 # The above copyright notice and this permission notice shall be included
12 # in all copies or substantial portions of the Software.
13 #
14 # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
15 # OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABIL-
16 # ITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT
17 # SHALL THE AUTHOR BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
18 # WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
19 # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
20 # IN THE SOFTWARE.
21 #
22
23 import boto
24 from boto.connection import AWSQueryConnection
25 from boto.regioninfo import RegionInfo
26 from boto.exception import JSONResponseError
27 from boto.cloudtrail import exceptions
28 from boto.compat import json
29
30
31 class CloudTrailConnection(AWSQueryConnection):
32 """
33 AWS CloudTrail
34 This is the CloudTrail API Reference. It provides descriptions of
35 actions, data types, common parameters, and common errors for
36 CloudTrail.
37
38 CloudTrail is a web service that records AWS API calls for your
39 AWS account and delivers log files to an Amazon S3 bucket. The
40 recorded information includes the identity of the user, the start
41 time of the AWS API call, the source IP address, the request
42 parameters, and the response elements returned by the service.
43
44 As an alternative to using the API, you can use one of the AWS
45 SDKs, which consist of libraries and sample code for various
46 programming languages and platforms (Java, Ruby, .NET, iOS,
47 Android, etc.). The SDKs provide a convenient way to create
48 programmatic access to AWSCloudTrail. For example, the SDKs take
49 care of cryptographically signing requests, managing errors, and
50 retrying requests automatically. For information about the AWS
51 SDKs, including how to download and install them, see the `Tools
52 for Amazon Web Services page`_.
53
54 See the CloudTrail User Guide for information about the data that
55 is included with each AWS API call listed in the log files.
56 """
57 APIVersion = "2013-11-01"
58 DefaultRegionName = "us-east-1"
59 DefaultRegionEndpoint = "cloudtrail.us-east-1.amazonaws.com"
60 ServiceName = "CloudTrail"
61 TargetPrefix = "com.amazonaws.cloudtrail.v20131101.CloudTrail_20131101"
62 ResponseError = JSONResponseError
63
64 _faults = {
65 "InvalidMaxResultsException": exceptions.InvalidMaxResultsException,
66 "InvalidSnsTopicNameException": exceptions.InvalidSnsTopicNameException,
67 "InvalidS3BucketNameException": exceptions.InvalidS3BucketNameException,
68 "TrailAlreadyExistsException": exceptions.TrailAlreadyExistsException,
69 "InvalidTimeRangeException": exceptions.InvalidTimeRangeException,
70 "InvalidLookupAttributesException": exceptions.InvalidLookupAttributesException,
71 "InsufficientSnsTopicPolicyException": exceptions.InsufficientSnsTopicPolicyException,
72 "InvalidCloudWatchLogsLogGroupArnException": exceptions.InvalidCloudWatchLogsLogGroupArnException,
73 "InvalidCloudWatchLogsRoleArnException": exceptions.InvalidCloudWatchLogsRoleArnException,
74 "InvalidTrailNameException": exceptions.InvalidTrailNameException,
75 "CloudWatchLogsDeliveryUnavailableException": exceptions.CloudWatchLogsDeliveryUnavailableException,
76 "TrailNotFoundException": exceptions.TrailNotFoundException,
77 "S3BucketDoesNotExistException": exceptions.S3BucketDoesNotExistException,
78 "InvalidNextTokenException": exceptions.InvalidNextTokenException,
79 "InvalidS3PrefixException": exceptions.InvalidS3PrefixException,
80 "MaximumNumberOfTrailsExceededException": exceptions.MaximumNumberOfTrailsExceededException,
81 "InsufficientS3BucketPolicyException": exceptions.InsufficientS3BucketPolicyException,
82 }
83
84
85 def __init__(self, **kwargs):
86 region = kwargs.pop('region', None)
87 if not region:
88 region = RegionInfo(self, self.DefaultRegionName,
89 self.DefaultRegionEndpoint)
90
91 if 'host' not in kwargs or kwargs['host'] is None:
92 kwargs['host'] = region.endpoint
93
94 super(CloudTrailConnection, self).__init__(**kwargs)
95 self.region = region
96
97 def _required_auth_capability(self):
98 return ['hmac-v4']
99
100 def create_trail(self, name, s3_bucket_name, s3_key_prefix=None,
101 sns_topic_name=None, include_global_service_events=None,
102 cloud_watch_logs_log_group_arn=None,
103 cloud_watch_logs_role_arn=None):
104 """
105 From the command line, use `create-subscription`.
106
107 Creates a trail that specifies the settings for delivery of
108 log data to an Amazon S3 bucket.
109
110 :type name: string
111 :param name: Specifies the name of the trail.
112
113 :type s3_bucket_name: string
114 :param s3_bucket_name: Specifies the name of the Amazon S3 bucket
115 designated for publishing log files.
116
117 :type s3_key_prefix: string
118 :param s3_key_prefix: Specifies the Amazon S3 key prefix that precedes
119 the name of the bucket you have designated for log file delivery.
120
121 :type sns_topic_name: string
122 :param sns_topic_name: Specifies the name of the Amazon SNS topic
123 defined for notification of log file delivery.
124
125 :type include_global_service_events: boolean
126 :param include_global_service_events: Specifies whether the trail is
127 publishing events from global services such as IAM to the log
128 files.
129
130 :type cloud_watch_logs_log_group_arn: string
131 :param cloud_watch_logs_log_group_arn: Specifies a log group name using
132 an Amazon Resource Name (ARN), a unique identifier that represents
133 the log group to which CloudTrail logs will be delivered. Not
134 required unless you specify CloudWatchLogsRoleArn.
135
136 :type cloud_watch_logs_role_arn: string
137 :param cloud_watch_logs_role_arn: Specifies the role for the CloudWatch
138 Logs endpoint to assume to write to a users log group.
139
140 """
141 params = {'Name': name, 'S3BucketName': s3_bucket_name, }
142 if s3_key_prefix is not None:
143 params['S3KeyPrefix'] = s3_key_prefix
144 if sns_topic_name is not None:
145 params['SnsTopicName'] = sns_topic_name
146 if include_global_service_events is not None:
147 params['IncludeGlobalServiceEvents'] = include_global_service_events
148 if cloud_watch_logs_log_group_arn is not None:
149 params['CloudWatchLogsLogGroupArn'] = cloud_watch_logs_log_group_arn
150 if cloud_watch_logs_role_arn is not None:
151 params['CloudWatchLogsRoleArn'] = cloud_watch_logs_role_arn
152 return self.make_request(action='CreateTrail',
153 body=json.dumps(params))
154
155 def delete_trail(self, name):
156 """
157 Deletes a trail.
158
159 :type name: string
160 :param name: The name of a trail to be deleted.
161
162 """
163 params = {'Name': name, }
164 return self.make_request(action='DeleteTrail',
165 body=json.dumps(params))
166
167 def describe_trails(self, trail_name_list=None):
168 """
169 Retrieves settings for the trail associated with the current
170 region for your account.
171
172 :type trail_name_list: list
173 :param trail_name_list: The trail returned.
174
175 """
176 params = {}
177 if trail_name_list is not None:
178 params['trailNameList'] = trail_name_list
179 return self.make_request(action='DescribeTrails',
180 body=json.dumps(params))
181
182 def get_trail_status(self, name):
183 """
184 Returns a JSON-formatted list of information about the
185 specified trail. Fields include information on delivery
186 errors, Amazon SNS and Amazon S3 errors, and start and stop
187 logging times for each trail.
188
189 :type name: string
190 :param name: The name of the trail for which you are requesting the
191 current status.
192
193 """
194 params = {'Name': name, }
195 return self.make_request(action='GetTrailStatus',
196 body=json.dumps(params))
197
198 def lookup_events(self, lookup_attributes=None, start_time=None,
199 end_time=None, max_results=None, next_token=None):
200 """
201 Looks up API activity events captured by CloudTrail that
202 create, update, or delete resources in your account. Events
203 for a region can be looked up for the times in which you had
204 CloudTrail turned on in that region during the last seven
205 days. Lookup supports five different attributes: time range
206 (defined by a start time and end time), user name, event name,
207 resource type, and resource name. All attributes are optional.
208 The maximum number of attributes that can be specified in any
209 one lookup request are time range and one other attribute. The
210 default number of results returned is 10, with a maximum of 50
211 possible. The response includes a token that you can use to
212 get the next page of results.
213 The rate of lookup requests is limited to one per second per
214 account. If this limit is exceeded, a throttling error occurs.
215 Events that occurred during the selected time range will not
216 be available for lookup if CloudTrail logging was not enabled
217 when the events occurred.
218
219 :type lookup_attributes: list
220 :param lookup_attributes: Contains a list of lookup attributes.
221 Currently the list can contain only one item.
222
223 :type start_time: timestamp
224 :param start_time: Specifies that only events that occur after or at
225 the specified time are returned. If the specified start time is
226 after the specified end time, an error is returned.
227
228 :type end_time: timestamp
229 :param end_time: Specifies that only events that occur before or at the
230 specified time are returned. If the specified end time is before
231 the specified start time, an error is returned.
232
233 :type max_results: integer
234 :param max_results: The number of events to return. Possible values are
235 1 through 50. The default is 10.
236
237 :type next_token: string
238 :param next_token: The token to use to get the next page of results
239 after a previous API call. This token must be passed in with the
240 same parameters that were specified in the the original call. For
241 example, if the original call specified an AttributeKey of
242 'Username' with a value of 'root', the call with NextToken should
243 include those same parameters.
244
245 """
246 params = {}
247 if lookup_attributes is not None:
248 params['LookupAttributes'] = lookup_attributes
249 if start_time is not None:
250 params['StartTime'] = start_time
251 if end_time is not None:
252 params['EndTime'] = end_time
253 if max_results is not None:
254 params['MaxResults'] = max_results
255 if next_token is not None:
256 params['NextToken'] = next_token
257 return self.make_request(action='LookupEvents',
258 body=json.dumps(params))
259
260 def start_logging(self, name):
261 """
262 Starts the recording of AWS API calls and log file delivery
263 for a trail.
264
265 :type name: string
266 :param name: The name of the trail for which CloudTrail logs AWS API
267 calls.
268
269 """
270 params = {'Name': name, }
271 return self.make_request(action='StartLogging',
272 body=json.dumps(params))
273
274 def stop_logging(self, name):
275 """
276 Suspends the recording of AWS API calls and log file delivery
277 for the specified trail. Under most circumstances, there is no
278 need to use this action. You can update a trail without
279 stopping it first. This action is the only way to stop
280 recording.
281
282 :type name: string
283 :param name: Communicates to CloudTrail the name of the trail for which
284 to stop logging AWS API calls.
285
286 """
287 params = {'Name': name, }
288 return self.make_request(action='StopLogging',
289 body=json.dumps(params))
290
291 def update_trail(self, name, s3_bucket_name=None, s3_key_prefix=None,
292 sns_topic_name=None, include_global_service_events=None,
293 cloud_watch_logs_log_group_arn=None,
294 cloud_watch_logs_role_arn=None):
295 """
296 From the command line, use `update-subscription`.
297
298 Updates the settings that specify delivery of log files.
299 Changes to a trail do not require stopping the CloudTrail
300 service. Use this action to designate an existing bucket for
301 log delivery. If the existing bucket has previously been a
302 target for CloudTrail log files, an IAM policy exists for the
303 bucket.
304
305 :type name: string
306 :param name: Specifies the name of the trail.
307
308 :type s3_bucket_name: string
309 :param s3_bucket_name: Specifies the name of the Amazon S3 bucket
310 designated for publishing log files.
311
312 :type s3_key_prefix: string
313 :param s3_key_prefix: Specifies the Amazon S3 key prefix that precedes
314 the name of the bucket you have designated for log file delivery.
315
316 :type sns_topic_name: string
317 :param sns_topic_name: Specifies the name of the Amazon SNS topic
318 defined for notification of log file delivery.
319
320 :type include_global_service_events: boolean
321 :param include_global_service_events: Specifies whether the trail is
322 publishing events from global services such as IAM to the log
323 files.
324
325 :type cloud_watch_logs_log_group_arn: string
326 :param cloud_watch_logs_log_group_arn: Specifies a log group name using
327 an Amazon Resource Name (ARN), a unique identifier that represents
328 the log group to which CloudTrail logs will be delivered. Not
329 required unless you specify CloudWatchLogsRoleArn.
330
331 :type cloud_watch_logs_role_arn: string
332 :param cloud_watch_logs_role_arn: Specifies the role for the CloudWatch
333 Logs endpoint to assume to write to a users log group.
334
335 """
336 params = {'Name': name, }
337 if s3_bucket_name is not None:
338 params['S3BucketName'] = s3_bucket_name
339 if s3_key_prefix is not None:
340 params['S3KeyPrefix'] = s3_key_prefix
341 if sns_topic_name is not None:
342 params['SnsTopicName'] = sns_topic_name
343 if include_global_service_events is not None:
344 params['IncludeGlobalServiceEvents'] = include_global_service_events
345 if cloud_watch_logs_log_group_arn is not None:
346 params['CloudWatchLogsLogGroupArn'] = cloud_watch_logs_log_group_arn
347 if cloud_watch_logs_role_arn is not None:
348 params['CloudWatchLogsRoleArn'] = cloud_watch_logs_role_arn
349 return self.make_request(action='UpdateTrail',
350 body=json.dumps(params))
351
352 def make_request(self, action, body):
353 headers = {
354 'X-Amz-Target': '%s.%s' % (self.TargetPrefix, action),
355 'Host': self.region.endpoint,
356 'Content-Type': 'application/x-amz-json-1.1',
357 'Content-Length': str(len(body)),
358 }
359 http_request = self.build_base_http_request(
360 method='POST', path='/', auth_path='/', params={},
361 headers=headers, data=body)
362 response = self._mexe(http_request, sender=None,
363 override_num_retries=10)
364 response_body = response.read().decode('utf-8')
365 boto.log.debug(response_body)
366 if response.status == 200:
367 if response_body:
368 return json.loads(response_body)
369 else:
370 json_body = json.loads(response_body)
371 fault_name = json_body.get('__type', None)
372 exception_class = self._faults.get(fault_name, self.ResponseError)
373 raise exception_class(response.status, response.reason,
374 body=json_body)