[PYTHON] [AWS IoT] Supprimer les certificats qui ne sont pas associés à des objets

Objectif

Dans AWS IoT, supprimez le certificat qui n'est pas associé à l'objet. Pour lorsque vous avez créé un grand nombre de certificats inutiles.

classe

import boto3

class CertKiller():

    def __init__(self):
        #Instancier une classe qui exploite AWS IoT
        self.client = boto3.client('iot')
        
        return

    
    def delete_not_attached_cert_all(self):
        '''
Supprimer les certificats qui ne sont pas associés à des objets
        '''
        #Obtenir une liste d'informations sur les certificats
        list_cert = self.get_list_cert()

        #Supprimer les certificats qui ne sont pas associés à des objets
        for cert in list_cert:
            self.__delete_not_attached_cert(cert)

        return


    def get_list_cert(self):
        '''
Obtenir une liste d'informations sur les certificats
        '''
        list_cert = self.client.list_certificates(pageSize=100)['certificates']

        return list_cert 


    def __delete_not_attached_cert(self, cert):
        '''
Supprimer si le certificat n'était attaché à aucun objet
        '''
        #Obtenir des informations sur le certificat
        cert_arn = cert['certificateArn']
        cert_id = cert['certificateId']

        #Obtenez une liste de choses avec un certificat joint
        thing_attached_cert = self.client.list_principal_things(principal=cert_arn)['things']
        print(cert_arn, thing_attached_cert)

        #Supprimer si le certificat n'était attaché à aucun objet
        if len(thing_attached_cert) == 0:
            self.__delete_cert(cert_arn, cert_id)
        else:
            pass

        return


    def __delete_cert(self, cert_arn, cert_id):
        '''
Supprimer le certificat
        '''    
        #Doit être désactivé avant la suppression
        self.client.update_certificate(certificateId=cert_id, newStatus='INACTIVE')

        #La stratégie doit être détachée avant la suppression
        self.__detach_all_policy(cert_arn, cert_id)

        #Effacer
        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):
        '''
Détachez toutes les stratégies attachées au certificat
        '''    
        #Obtenir une liste des politiques attachées au certificat
        list_policy = self.client.list_attached_policies(target=cert_arn)['policies']

        #Détacher
        for policy in list_policy:
            policy_name = policy['policyName']
            self.client.detach_policy(policyName=policy_name, target=cert_arn)

        return

Courir

cert_killer = CertKiller()
cert_killer.delete_not_attached_cert_all()

Remarques

Impressions

Je suis un très débutant, alors j'apprécierais que vous puissiez souligner ou commenter même les plus petites choses.

référence

Boto 3 Documentation

Recommended Posts

[AWS IoT] Supprimer les certificats qui ne sont pas associés à des objets
Téléchargez et gérez les packages qui ne sont pas dans conda sur anaconda.org
Aux personnes qui «recrutent mais ne recrutent pas»
10 erreurs Python communes aux débutants
[Note] Termes difficiles à retenir