comparison env/lib/python3.7/site-packages/boto/cloudhsm/layer1.py @ 5:9b1c78e6ba9c draft default tip

"planemo upload commit 6c0a8142489327ece472c84e558c47da711a9142"
author shellac
date Mon, 01 Jun 2020 08:59:25 -0400
parents 79f47841a781
children
comparison
equal deleted inserted replaced
4:79f47841a781 5:9b1c78e6ba9c
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.compat import json
25 from boto.connection import AWSQueryConnection
26 from boto.regioninfo import RegionInfo
27 from boto.exception import JSONResponseError
28 from boto.cloudhsm import exceptions
29
30
31 class CloudHSMConnection(AWSQueryConnection):
32 """
33 AWS CloudHSM Service
34 """
35 APIVersion = "2014-05-30"
36 DefaultRegionName = "us-east-1"
37 DefaultRegionEndpoint = "cloudhsm.us-east-1.amazonaws.com"
38 ServiceName = "CloudHSM"
39 TargetPrefix = "CloudHsmFrontendService"
40 ResponseError = JSONResponseError
41
42 _faults = {
43 "InvalidRequestException": exceptions.InvalidRequestException,
44 "CloudHsmServiceException": exceptions.CloudHsmServiceException,
45 "CloudHsmInternalException": exceptions.CloudHsmInternalException,
46 }
47
48
49 def __init__(self, **kwargs):
50 region = kwargs.pop('region', None)
51 if not region:
52 region = RegionInfo(self, self.DefaultRegionName,
53 self.DefaultRegionEndpoint)
54
55 if 'host' not in kwargs or kwargs['host'] is None:
56 kwargs['host'] = region.endpoint
57
58 super(CloudHSMConnection, self).__init__(**kwargs)
59 self.region = region
60
61 def _required_auth_capability(self):
62 return ['hmac-v4']
63
64 def create_hapg(self, label):
65 """
66 Creates a high-availability partition group. A high-
67 availability partition group is a group of partitions that
68 spans multiple physical HSMs.
69
70 :type label: string
71 :param label: The label of the new high-availability partition group.
72
73 """
74 params = {'Label': label, }
75 return self.make_request(action='CreateHapg',
76 body=json.dumps(params))
77
78 def create_hsm(self, subnet_id, ssh_key, iam_role_arn, subscription_type,
79 eni_ip=None, external_id=None, client_token=None,
80 syslog_ip=None):
81 """
82 Creates an uninitialized HSM instance. Running this command
83 provisions an HSM appliance and will result in charges to your
84 AWS account for the HSM.
85
86 :type subnet_id: string
87 :param subnet_id: The identifier of the subnet in your VPC in which to
88 place the HSM.
89
90 :type ssh_key: string
91 :param ssh_key: The SSH public key to install on the HSM.
92
93 :type eni_ip: string
94 :param eni_ip: The IP address to assign to the HSM's ENI.
95
96 :type iam_role_arn: string
97 :param iam_role_arn: The ARN of an IAM role to enable the AWS CloudHSM
98 service to allocate an ENI on your behalf.
99
100 :type external_id: string
101 :param external_id: The external ID from **IamRoleArn**, if present.
102
103 :type subscription_type: string
104 :param subscription_type: The subscription type.
105
106 :type client_token: string
107 :param client_token: A user-defined token to ensure idempotence.
108 Subsequent calls to this action with the same token will be
109 ignored.
110
111 :type syslog_ip: string
112 :param syslog_ip: The IP address for the syslog monitoring server.
113
114 """
115 params = {
116 'SubnetId': subnet_id,
117 'SshKey': ssh_key,
118 'IamRoleArn': iam_role_arn,
119 'SubscriptionType': subscription_type,
120 }
121 if eni_ip is not None:
122 params['EniIp'] = eni_ip
123 if external_id is not None:
124 params['ExternalId'] = external_id
125 if client_token is not None:
126 params['ClientToken'] = client_token
127 if syslog_ip is not None:
128 params['SyslogIp'] = syslog_ip
129 return self.make_request(action='CreateHsm',
130 body=json.dumps(params))
131
132 def create_luna_client(self, certificate, label=None):
133 """
134 Creates an HSM client.
135
136 :type label: string
137 :param label: The label for the client.
138
139 :type certificate: string
140 :param certificate: The contents of a Base64-Encoded X.509 v3
141 certificate to be installed on the HSMs used by this client.
142
143 """
144 params = {'Certificate': certificate, }
145 if label is not None:
146 params['Label'] = label
147 return self.make_request(action='CreateLunaClient',
148 body=json.dumps(params))
149
150 def delete_hapg(self, hapg_arn):
151 """
152 Deletes a high-availability partition group.
153
154 :type hapg_arn: string
155 :param hapg_arn: The ARN of the high-availability partition group to
156 delete.
157
158 """
159 params = {'HapgArn': hapg_arn, }
160 return self.make_request(action='DeleteHapg',
161 body=json.dumps(params))
162
163 def delete_hsm(self, hsm_arn):
164 """
165 Deletes an HSM. Once complete, this operation cannot be undone
166 and your key material cannot be recovered.
167
168 :type hsm_arn: string
169 :param hsm_arn: The ARN of the HSM to delete.
170
171 """
172 params = {'HsmArn': hsm_arn, }
173 return self.make_request(action='DeleteHsm',
174 body=json.dumps(params))
175
176 def delete_luna_client(self, client_arn):
177 """
178 Deletes a client.
179
180 :type client_arn: string
181 :param client_arn: The ARN of the client to delete.
182
183 """
184 params = {'ClientArn': client_arn, }
185 return self.make_request(action='DeleteLunaClient',
186 body=json.dumps(params))
187
188 def describe_hapg(self, hapg_arn):
189 """
190 Retrieves information about a high-availability partition
191 group.
192
193 :type hapg_arn: string
194 :param hapg_arn: The ARN of the high-availability partition group to
195 describe.
196
197 """
198 params = {'HapgArn': hapg_arn, }
199 return self.make_request(action='DescribeHapg',
200 body=json.dumps(params))
201
202 def describe_hsm(self, hsm_arn=None, hsm_serial_number=None):
203 """
204 Retrieves information about an HSM. You can identify the HSM
205 by its ARN or its serial number.
206
207 :type hsm_arn: string
208 :param hsm_arn: The ARN of the HSM. Either the HsmArn or the
209 SerialNumber parameter must be specified.
210
211 :type hsm_serial_number: string
212 :param hsm_serial_number: The serial number of the HSM. Either the
213 HsmArn or the HsmSerialNumber parameter must be specified.
214
215 """
216 params = {}
217 if hsm_arn is not None:
218 params['HsmArn'] = hsm_arn
219 if hsm_serial_number is not None:
220 params['HsmSerialNumber'] = hsm_serial_number
221 return self.make_request(action='DescribeHsm',
222 body=json.dumps(params))
223
224 def describe_luna_client(self, client_arn=None,
225 certificate_fingerprint=None):
226 """
227 Retrieves information about an HSM client.
228
229 :type client_arn: string
230 :param client_arn: The ARN of the client.
231
232 :type certificate_fingerprint: string
233 :param certificate_fingerprint: The certificate fingerprint.
234
235 """
236 params = {}
237 if client_arn is not None:
238 params['ClientArn'] = client_arn
239 if certificate_fingerprint is not None:
240 params['CertificateFingerprint'] = certificate_fingerprint
241 return self.make_request(action='DescribeLunaClient',
242 body=json.dumps(params))
243
244 def get_config(self, client_arn, client_version, hapg_list):
245 """
246 Gets the configuration files necessary to connect to all high
247 availability partition groups the client is associated with.
248
249 :type client_arn: string
250 :param client_arn: The ARN of the client.
251
252 :type client_version: string
253 :param client_version: The client version.
254
255 :type hapg_list: list
256 :param hapg_list: A list of ARNs that identify the high-availability
257 partition groups that are associated with the client.
258
259 """
260 params = {
261 'ClientArn': client_arn,
262 'ClientVersion': client_version,
263 'HapgList': hapg_list,
264 }
265 return self.make_request(action='GetConfig',
266 body=json.dumps(params))
267
268 def list_available_zones(self):
269 """
270 Lists the Availability Zones that have available AWS CloudHSM
271 capacity.
272
273
274 """
275 params = {}
276 return self.make_request(action='ListAvailableZones',
277 body=json.dumps(params))
278
279 def list_hapgs(self, next_token=None):
280 """
281 Lists the high-availability partition groups for the account.
282
283 This operation supports pagination with the use of the
284 NextToken member. If more results are available, the NextToken
285 member of the response contains a token that you pass in the
286 next call to ListHapgs to retrieve the next set of items.
287
288 :type next_token: string
289 :param next_token: The NextToken value from a previous call to
290 ListHapgs. Pass null if this is the first call.
291
292 """
293 params = {}
294 if next_token is not None:
295 params['NextToken'] = next_token
296 return self.make_request(action='ListHapgs',
297 body=json.dumps(params))
298
299 def list_hsms(self, next_token=None):
300 """
301 Retrieves the identifiers of all of the HSMs provisioned for
302 the current customer.
303
304 This operation supports pagination with the use of the
305 NextToken member. If more results are available, the NextToken
306 member of the response contains a token that you pass in the
307 next call to ListHsms to retrieve the next set of items.
308
309 :type next_token: string
310 :param next_token: The NextToken value from a previous call to
311 ListHsms. Pass null if this is the first call.
312
313 """
314 params = {}
315 if next_token is not None:
316 params['NextToken'] = next_token
317 return self.make_request(action='ListHsms',
318 body=json.dumps(params))
319
320 def list_luna_clients(self, next_token=None):
321 """
322 Lists all of the clients.
323
324 This operation supports pagination with the use of the
325 NextToken member. If more results are available, the NextToken
326 member of the response contains a token that you pass in the
327 next call to ListLunaClients to retrieve the next set of
328 items.
329
330 :type next_token: string
331 :param next_token: The NextToken value from a previous call to
332 ListLunaClients. Pass null if this is the first call.
333
334 """
335 params = {}
336 if next_token is not None:
337 params['NextToken'] = next_token
338 return self.make_request(action='ListLunaClients',
339 body=json.dumps(params))
340
341 def modify_hapg(self, hapg_arn, label=None, partition_serial_list=None):
342 """
343 Modifies an existing high-availability partition group.
344
345 :type hapg_arn: string
346 :param hapg_arn: The ARN of the high-availability partition group to
347 modify.
348
349 :type label: string
350 :param label: The new label for the high-availability partition group.
351
352 :type partition_serial_list: list
353 :param partition_serial_list: The list of partition serial numbers to
354 make members of the high-availability partition group.
355
356 """
357 params = {'HapgArn': hapg_arn, }
358 if label is not None:
359 params['Label'] = label
360 if partition_serial_list is not None:
361 params['PartitionSerialList'] = partition_serial_list
362 return self.make_request(action='ModifyHapg',
363 body=json.dumps(params))
364
365 def modify_hsm(self, hsm_arn, subnet_id=None, eni_ip=None,
366 iam_role_arn=None, external_id=None, syslog_ip=None):
367 """
368 Modifies an HSM.
369
370 :type hsm_arn: string
371 :param hsm_arn: The ARN of the HSM to modify.
372
373 :type subnet_id: string
374 :param subnet_id: The new identifier of the subnet that the HSM is in.
375
376 :type eni_ip: string
377 :param eni_ip: The new IP address for the elastic network interface
378 attached to the HSM.
379
380 :type iam_role_arn: string
381 :param iam_role_arn: The new IAM role ARN.
382
383 :type external_id: string
384 :param external_id: The new external ID.
385
386 :type syslog_ip: string
387 :param syslog_ip: The new IP address for the syslog monitoring server.
388
389 """
390 params = {'HsmArn': hsm_arn, }
391 if subnet_id is not None:
392 params['SubnetId'] = subnet_id
393 if eni_ip is not None:
394 params['EniIp'] = eni_ip
395 if iam_role_arn is not None:
396 params['IamRoleArn'] = iam_role_arn
397 if external_id is not None:
398 params['ExternalId'] = external_id
399 if syslog_ip is not None:
400 params['SyslogIp'] = syslog_ip
401 return self.make_request(action='ModifyHsm',
402 body=json.dumps(params))
403
404 def modify_luna_client(self, client_arn, certificate):
405 """
406 Modifies the certificate used by the client.
407
408 This action can potentially start a workflow to install the
409 new certificate on the client's HSMs.
410
411 :type client_arn: string
412 :param client_arn: The ARN of the client.
413
414 :type certificate: string
415 :param certificate: The new certificate for the client.
416
417 """
418 params = {
419 'ClientArn': client_arn,
420 'Certificate': certificate,
421 }
422 return self.make_request(action='ModifyLunaClient',
423 body=json.dumps(params))
424
425 def make_request(self, action, body):
426 headers = {
427 'X-Amz-Target': '%s.%s' % (self.TargetPrefix, action),
428 'Host': self.region.endpoint,
429 'Content-Type': 'application/x-amz-json-1.1',
430 'Content-Length': str(len(body)),
431 }
432 http_request = self.build_base_http_request(
433 method='POST', path='/', auth_path='/', params={},
434 headers=headers, data=body)
435 response = self._mexe(http_request, sender=None,
436 override_num_retries=10)
437 response_body = response.read().decode('utf-8')
438 boto.log.debug(response_body)
439 if response.status == 200:
440 if response_body:
441 return json.loads(response_body)
442 else:
443 json_body = json.loads(response_body)
444 fault_name = json_body.get('__type', None)
445 exception_class = self._faults.get(fault_name, self.ResponseError)
446 raise exception_class(response.status, response.reason,
447 body=json_body)
448