[PYTHON] [AWS IoT] Löschen Sie Zertifikate, die nicht an Dinge angehängt sind

Zweck

Löschen Sie in AWS IoT das Zertifikat, das nicht an das Objekt angehängt ist. Wenn Sie eine große Anzahl unnötiger Zertifikate erstellt haben.

Klasse

import boto3

class CertKiller():

    def __init__(self):
        #Instanziieren Sie eine Klasse, die AWS IoT betreibt
        self.client = boto3.client('iot')
        
        return

    
    def delete_not_attached_cert_all(self):
        '''
Löschen Sie Zertifikate, die nicht an Dinge angehängt sind
        '''
        #Holen Sie sich eine Liste der Zertifikatinformationen
        list_cert = self.get_list_cert()

        #Löschen Sie Zertifikate, die nicht an Dinge angehängt sind
        for cert in list_cert:
            self.__delete_not_attached_cert(cert)

        return


    def get_list_cert(self):
        '''
Holen Sie sich eine Liste der Zertifikatinformationen
        '''
        list_cert = self.client.list_certificates(pageSize=100)['certificates']

        return list_cert 


    def __delete_not_attached_cert(self, cert):
        '''
Löschen, wenn das Zertifikat keinem Objekt zugeordnet war
        '''
        #Zertifikatinformationen abrufen
        cert_arn = cert['certificateArn']
        cert_id = cert['certificateId']

        #Holen Sie sich eine Liste der Dinge mit einem Zertifikat beigefügt
        thing_attached_cert = self.client.list_principal_things(principal=cert_arn)['things']
        print(cert_arn, thing_attached_cert)

        #Löschen, wenn das Zertifikat keinem Objekt zugeordnet war
        if len(thing_attached_cert) == 0:
            self.__delete_cert(cert_arn, cert_id)
        else:
            pass

        return


    def __delete_cert(self, cert_arn, cert_id):
        '''
Zertifikat löschen
        '''    
        #Muss vor dem Löschen deaktiviert werden
        self.client.update_certificate(certificateId=cert_id, newStatus='INACTIVE')

        #Die Richtlinie muss vor dem Löschen getrennt werden
        self.__detach_all_policy(cert_arn, cert_id)

        #Löschen
        self.client.delete_certificate(certificateId=cert_id, forceDelete=False)
        print('{} has been deleted.'.format(cert_arn))

        return


    def __detach_all_policy(self, cert_arn, cert_id):
        '''
Trennen Sie alle an das Zertifikat angehängten Richtlinien
        '''    
        #Rufen Sie eine Liste der an das Zertifikat angehängten Richtlinien ab
        list_policy = self.client.list_attached_policies(target=cert_arn)['policies']

        #Ablösen
        for policy in list_policy:
            policy_name = policy['policyName']
            self.client.detach_policy(policyName=policy_name, target=cert_arn)

        return

Lauf

cert_killer = CertKiller()
cert_killer.delete_not_attached_cert_all()

Bemerkungen

Impressionen

Ich bin ein sehr Anfänger, daher würde ich es begrüßen, wenn Sie auch die kleinsten Dinge hervorheben und kommentieren könnten.

Referenz

Boto 3 Documentation

Recommended Posts

[AWS IoT] Löschen Sie Zertifikate, die nicht an Dinge angehängt sind
Laden Sie Pakete, die sich nicht in Conda befinden, auf anaconda.org hoch und verwalten Sie sie
An Menschen, die "rekrutieren, aber nicht rekrutieren"
10 Python-Fehler, die Anfängern häufig sind
[Hinweis] Begriffe, die schwer zu merken sind