def Run(self, args): client = privateca_base.GetClientInstance('v1') messages = privateca_base.GetMessagesModule('v1') cert_template_ref = args.CONCEPTS.certificate_template.Parse() flags_v1.ValidateIdentityConstraints(args) new_cert_template = messages.CertificateTemplate( predefinedValues=flags_v1.ParsePredefinedValues(args), identityConstraints=flags_v1.ParseIdentityConstraints(args), passthroughExtensions=flags_v1.ParseExtensionConstraints(args), description=args.description if args.IsSpecified('description') else None) operation = client.projects_locations_certificateTemplates.Create( messages. PrivatecaProjectsLocationsCertificateTemplatesCreateRequest( parent=cert_template_ref.Parent().RelativeName(), certificateTemplateId=cert_template_ref.Name(), certificateTemplate=new_cert_template, requestId=request_utils.GenerateRequestId())) cert_template_response = operations.Await( operation, 'Creating Certificate Template.', api_version='v1') cert_template = operations.GetMessageFromResponse( cert_template_response, messages.CertificateTemplate) log.status.Print('Created Certificate Template [{}].'.format( cert_template.name))
def Run(self, args): cert_ref = _ParseCertificateResource(args) reason = flags.ParseRevocationChoiceToEnum(args.reason) client = privateca_base.GetClientInstance() messages = privateca_base.GetMessagesModule() operation = client.projects_locations_certificateAuthorities_certificates.Revoke( messages. PrivatecaProjectsLocationsCertificateAuthoritiesCertificatesRevokeRequest( name=cert_ref.RelativeName(), revokeCertificateRequest=messages.RevokeCertificateRequest( reason=reason, requestId=request_utils.GenerateRequestId()))) response = operations.Await(operation, 'Revoking Certificate.') certificate = operations.GetMessageFromResponse( response, messages.Certificate) log.status.Print('Publishing a new Certificate Revocation List.') client.projects_locations_certificateAuthorities.PublishCrl( messages. PrivatecaProjectsLocationsCertificateAuthoritiesPublishCrlRequest( name=cert_ref.Parent().RelativeName(), publishCertificateRevocationListRequest=messages. PublishCertificateRevocationListRequest())) revoke_time = times.ParseDateTime( certificate.revocationDetails.revocationTime) log.status.Print('Revoked certificate [{}] at {}.'.format( certificate.name, times.FormatDateTime(revoke_time, tzinfo=times.LOCAL)))
def Run(self, args): new_ca, ca_ref, _ = create_utils.CreateCAFromArgs( args, is_subordinate=False) project_ref = ca_ref.Parent().Parent() key_version_ref = args.CONCEPTS.kms_key_version.Parse() kms_key_ref = key_version_ref.Parent() if key_version_ref else None iam.CheckCreateCertificateAuthorityPermissions(project_ref, kms_key_ref) bucket_ref = None if args.IsSpecified('bucket'): bucket_ref = storage.ValidateBucketForCertificateAuthority(args.bucket) new_ca.gcsBucket = bucket_ref.bucket p4sa_email = p4sa.GetOrCreate(project_ref) p4sa.AddResourceRoleBindings(p4sa_email, kms_key_ref, bucket_ref) create_utils.PrintBetaResourceDeletionDisclaimer('certificate authorities') operation = self.client.projects_locations_certificateAuthorities.Create( self.messages .PrivatecaProjectsLocationsCertificateAuthoritiesCreateRequest( certificateAuthority=new_ca, certificateAuthorityId=ca_ref.Name(), parent=ca_ref.Parent().RelativeName(), requestId=request_utils.GenerateRequestId())) ca_response = operations.Await(operation, 'Creating Certificate Authority.') ca = operations.GetMessageFromResponse(ca_response, self.messages.CertificateAuthority) log.status.Print('Created Certificate Authority [{}].'.format(ca.name))
def Run(self, args): client = privateca_base.GetClientInstance('v1') messages = privateca_base.GetMessagesModule('v1') ca_pool_ref = args.CONCEPTS.ca_pool.Parse() issuance_policy = flags_v1.ParseIssuancePolicy(args) publishing_options = flags_v1.ParsePublishingOptions(args) tier = flags_v1.ParseTierFlag(args) labels = labels_util.ParseCreateArgs(args, messages.CaPool.LabelsValue) new_ca_pool = messages.CaPool(issuancePolicy=issuance_policy, publishingOptions=publishing_options, tier=tier, labels=labels) operation = client.projects_locations_caPools.Create( messages.PrivatecaProjectsLocationsCaPoolsCreateRequest( caPool=new_ca_pool, caPoolId=ca_pool_ref.Name(), parent=ca_pool_ref.Parent().RelativeName(), requestId=request_utils.GenerateRequestId())) ca_pool_response = operations.Await(operation, 'Creating CA Pool.', api_version='v1') ca_pool = operations.GetMessageFromResponse(ca_pool_response, messages.CaPool) log.status.Print('Created CA Pool [{}].'.format(ca_pool.name))
def Run(self, args): kms_key_version_ref, ca_ref = self.ParseResourceArgs(args) kms_key_ref = kms_key_version_ref.Parent() project_ref = ca_ref.Parent().Parent() subject_config = flags.ParseSubjectFlags(args, is_ca=True) issuing_options = flags.ParseIssuingOptions(args) issuance_policy = flags.ParseIssuancePolicy(args) reusable_config_wrapper = flags.ParseReusableConfig(args, ca_ref.locationsId, is_ca=True) lifetime = flags.ParseValidityFlag(args) labels = labels_util.ParseCreateArgs( args, self.messages.CertificateAuthority.LabelsValue) iam.CheckCreateCertificateAuthorityPermissions(project_ref, kms_key_ref) p4sa_email = p4sa.GetOrCreate(project_ref) bucket_ref = storage.CreateBucketForCertificateAuthority(ca_ref) p4sa.AddResourceRoleBindings(p4sa_email, kms_key_ref, bucket_ref) new_ca = self.messages.CertificateAuthority( type=self.messages.CertificateAuthority.TypeValueValuesEnum. SELF_SIGNED, lifetime=lifetime, config=self.messages.CertificateConfig( reusableConfig=reusable_config_wrapper, subjectConfig=subject_config), cloudKmsKeyVersion=kms_key_version_ref.RelativeName(), certificatePolicy=issuance_policy, issuingOptions=issuing_options, gcsBucket=bucket_ref.bucket, labels=labels) operation = self.client.projects_locations_certificateAuthorities.Create( self.messages. PrivatecaProjectsLocationsCertificateAuthoritiesCreateRequest( certificateAuthority=new_ca, certificateAuthorityId=ca_ref.Name(), parent=ca_ref.Parent().RelativeName(), requestId=request_utils.GenerateRequestId())) ca_response = operations.Await(operation, 'Creating Certificate Authority.') ca = operations.GetMessageFromResponse( ca_response, self.messages.CertificateAuthority) log.status.Print('Creating the initial Certificate Revocation List.') self.client.projects_locations_certificateAuthorities.PublishCrl( self.messages. PrivatecaProjectsLocationsCertificateAuthoritiesPublishCrlRequest( name=ca.name, publishCertificateRevocationListRequest=self.messages. PublishCertificateRevocationListRequest())) log.status.Print('Created Certificate Authority [{}].'.format(ca.name))
def Run(self, args): client = privateca_base.GetClientInstance() messages = privateca_base.GetMessagesModule() cert_ref = args.CONCEPTS.certificate.Parse() if not cert_ref: raise exceptions.InvalidArgumentException( 'CERTIFICATE', 'A certificate resource must be specified.') labels = labels_util.ParseCreateArgs(args, messages.Certificate.LabelsValue) request = messages.PrivatecaProjectsLocationsCertificateAuthoritiesCertificatesCreateRequest( ) request.certificate = messages.Certificate() request.certificateId = cert_ref.Name() request.certificate.name = cert_ref.RelativeName() request.certificate.lifetime = flags.ParseValidityFlag(args) request.certificate.labels = labels request.parent = cert_ref.Parent().RelativeName() request.requestId = request_utils.GenerateRequestId() if args.csr: request.certificate.pemCsr = self._ReadCsr(request, args.csr) elif args.generate_key: request.certificate.config = self._GenerateCertificateConfig( request, args, cert_ref.locationsId) else: # This should not happen because of the required arg group, but protects # in case of future additions. raise exceptions.OneOfArgumentsRequiredException( ['--csr', '--generate-key'], ('To create a certificate, please specify either a CSR or the ' '--generate-key flag to create a new key.')) operation = client.projects_locations_certificateAuthorities_certificates.Create( request) cert_response = operations.Await(operation, 'Creating Certificate.') certificate = operations.GetMessageFromResponse( cert_response, messages.Certificate) if args.IsSpecified('cert_output_file'): self._WritePemChain(certificate.pemCertificate, certificate.pemCertificateChain, args.cert_output_file) log.status.Print('Created Certificate [{}].'.format(certificate.name))
def Run(self, args): client = privateca_base.GetClientInstance() messages = privateca_base.GetMessagesModule() ca_ref = args.CONCEPTS.certificate_authority.Parse() if not console_io.PromptContinue( message= 'You are about to schedule Certificate Authority [{}] for deletion in 30 days' .format(ca_ref.RelativeName()), default=True): log.status.Print('Aborted by user.') return current_ca = client.projects_locations_certificateAuthorities.Get( messages. PrivatecaProjectsLocationsCertificateAuthoritiesGetRequest( name=ca_ref.RelativeName())) resource_args.CheckExpectedCAType( messages.CertificateAuthority.TypeValueValuesEnum.SUBORDINATE, current_ca) operation = client.projects_locations_certificateAuthorities.ScheduleDelete( messages. PrivatecaProjectsLocationsCertificateAuthoritiesScheduleDeleteRequest( name=ca_ref.RelativeName(), scheduleDeleteCertificateAuthorityRequest=messages. ScheduleDeleteCertificateAuthorityRequest( ignoreActiveCertificates=args.ignore_active_certificates, requestId=request_utils.GenerateRequestId()))) ca_response = operations.Await( operation, 'Scheduling Subordinate CA for deletion') ca = operations.GetMessageFromResponse(ca_response, messages.CertificateAuthority) formatted_deletion_time = times.ParseDateTime( ca.deleteTime).astimezone(tz.tzutc()).strftime('%Y-%m-%dT%H:%MZ') log.status.Print( 'Scheduled Subordinate CA [{}] for deletion at {}.'.format( ca_ref.RelativeName(), formatted_deletion_time))
def _SignCsr(self, issuer_ref, csr, lifetime): """Issues a certificate under the given issuer with the given settings.""" certificate_id = 'subordinate-{}'.format( certificate_utils.GenerateCertId()) certificate_name = '{}/certificates/{}'.format( issuer_ref.RelativeName(), certificate_id) cert_request = self.messages.PrivatecaProjectsLocationsCertificateAuthoritiesCertificatesCreateRequest( certificateId=certificate_id, parent=issuer_ref.RelativeName(), requestId=request_utils.GenerateRequestId(), certificate=self.messages.Certificate(name=certificate_name, lifetime=lifetime, pemCsr=csr)) operation = self.client.projects_locations_certificateAuthorities_certificates.Create( cert_request) cert_response = operations.Await(operation, 'Signing CA cert.') return operations.GetMessageFromResponse(cert_response, self.messages.Certificate)
def Run(self, args): cert_ref = args.CONCEPTS.certificate.Parse() if cert_ref: cert_name = cert_ref.RelativeName() else: # Check to make sure the certificate was not partially provided. self.CheckCompleteResourceFlag(args, [ 'certificate', 'certificate_issuer', 'certificate_issuer_location' ]) ca_ref = args.CONCEPTS.issuer.Parse() if not ca_ref: # Check to make sure the certificate authority was not partially # provided. self.CheckCompleteResourceFlag(args, ['issuer', 'issuer_location']) raise exceptions.Invalid.ArgumentException( '--issuer', 'Expected a value for the issuer.') cert_name = certificate_utils.GetCertificateBySerialNum( ca_ref, args.serial_number).name reason = flags.ParseRevocationChoiceToEnum(args.reason) client = privateca_base.GetClientInstance() messages = privateca_base.GetMessagesModule() operation = client.projects_locations_certificateAuthorities_certificates.Revoke( messages. PrivatecaProjectsLocationsCertificateAuthoritiesCertificatesRevokeRequest( name=cert_name, revokeCertificateRequest=messages.RevokeCertificateRequest( reason=reason))) response = operations.Await(operation, 'Revoking Certificate.') certificate = operations.GetMessageFromResponse( response, messages.Certificate) revoke_time = times.ParseDateTime( certificate.revocationDetails.revocationTime) log.Print('Revoked certificate at {}.'.format( times.FormatDateTime(revoke_time, tzinfo=times.LOCAL)))
def Run(self, args): client = privateca_base.GetClientInstance('v1') messages = privateca_base.GetMessagesModule('v1') cert_template_ref = args.CONCEPTS.certificate_template.Parse() template_name = cert_template_ref.RelativeName() current_cert_template = client.projects_locations_certificateTemplates.Get( messages.PrivatecaProjectsLocationsCertificateTemplatesGetRequest( name=template_name)) cert_template_to_update, update_mask = self._UpdateCertificateTemplateFromArgs( args, current_cert_template.labels) # Confirm that the result of this update is intended to be identity # reflection, if applicable. flags_v1.ValidateIdentityConstraints( args, existing_copy_subj=current_cert_template.identityConstraints. allowSubjectPassthrough, existing_copy_sans=current_cert_template.identityConstraints. allowSubjectAltNamesPassthrough, for_update=True) operation = client.projects_locations_certificateTemplates.Patch( messages. PrivatecaProjectsLocationsCertificateTemplatesPatchRequest( name=template_name, certificateTemplate=cert_template_to_update, updateMask=','.join(update_mask), requestId=request_utils.GenerateRequestId())) cert_template_response = operations.Await( operation, 'Updating Certificate Template.', api_version='v1') cert_template = operations.GetMessageFromResponse( cert_template_response, messages.CertificateTemplate) log.status.Print('Updated Certificate Template [{}].'.format( cert_template.name))
def Run(self, args): client = privateca_base.GetClientInstance(api_version='v1') messages = privateca_base.GetMessagesModule(api_version='v1') ca_ref = args.CONCEPTS.certificate_authority.Parse() ca_name = ca_ref.RelativeName() if args.skip_grace_period: prompt_message = ( 'You are about to delete Certificate Authority [{}] as ' 'soon as possible without a 30-day grace period where ' 'undeletion would have been allowed. If you proceed, there ' 'will be no way to recover this CA.').format( ca_ref.RelativeName()) else: prompt_message = ( 'You are about to delete Certificate Authority [{}]').format( ca_ref.RelativeName()) if not console_io.PromptContinue(message=prompt_message, default=True): log.status.Print('Aborted by user.') return current_ca = client.projects_locations_caPools_certificateAuthorities.Get( messages. PrivatecaProjectsLocationsCaPoolsCertificateAuthoritiesGetRequest( name=ca_name)) resource_args.CheckExpectedCAType( messages.CertificateAuthority.TypeValueValuesEnum.SUBORDINATE, current_ca, version='v1') operation = client.projects_locations_caPools_certificateAuthorities.Delete( messages. PrivatecaProjectsLocationsCaPoolsCertificateAuthoritiesDeleteRequest( name=ca_name, ignoreActiveCertificates=args.ignore_active_certificates, skipGracePeriod=args.skip_grace_period, requestId=request_utils.GenerateRequestId())) try: ca_response = operations.Await(operation, 'Deleting Subordinate CA', api_version='v1') except waiter.OperationError as e: # API error message refers to the proto field name which is slightly # different from the gcloud flag name. raise operations.OperationError( six.text_type(e).replace( '`ignore_active_certificates` parameter', '`--ignore-active-certificates` flag')) ca = operations.GetMessageFromResponse(ca_response, messages.CertificateAuthority) formatted_expire_time = times.ParseDateTime(ca.expireTime).astimezone( tz.tzutc()).strftime('%Y-%m-%dT%H:%MZ') if current_ca.state == messages.CertificateAuthority.StateValueValuesEnum.AWAITING_USER_ACTIVATION: log.status.Print( 'Deleted Subordinate CA [{}]. This CA was never activated and cannot be recovered using `subordinates undelete`.' .format(ca_name)) elif args.skip_grace_period: log.status.Print( 'Deleted Subordinate CA [{}]. CA can not be undeleted.'.format( ca_name)) else: log.status.Print( 'Deleted Subordinate CA [{}]. CA can be undeleted until {}.'. format(ca_name, formatted_expire_time))