이쿠의 슬기로운 개발생활

함께 성장하기 위한 보안 개발자 EverNote 내용 공유

클라우드/Azure

Azure API 사용 (Python)

이쿠우우 2020. 9. 1. 18:27
반응형

1. Azure API 라이브러리 download 방법

준비 : python2 or 3 설정 완료

1.1. (pip 설치) 사이트에서 get-pip.py 다운

site :  https://bootstrap.pypa.io/

 

1.2. cmd 창에서 명령어 실행

python get-pip.py 

설치 완료 되면 

%python_home%\Scipts 폴더에 pip 확인가능

 

1.3. cmd 창에서 명령어 실행

pip install azure-storage-blob

pip install azure-mgmt-storage

pip install azure-mgmt-compute

pip install azure-mgmt-resource

pip install azure-mgmt-network

설치 완료 되면 

%python_home%\Lib\site-packages 폴더에서 확인가능

 

1.4. 라이브러리 설치 확인

pip show azure-storage-blob

pip show azure-mgmt-storage

 

 


 

2. Azure Key, URL 가져오기

[ Azure API 를 사용하기 위해서 4가지의 키가 필요함 ]

  • SUBSCRIPTION_ID = 'user id'
  • client_id = 'application-id',
  • secret = 'authentication-key',
  • tenant = 'tenant-id'

아래에서 해당 4가지 키에 해당하는 값을 생성하는 과정을 설명.

 

2.1. 앱등록

2.1.1. Azure Active Directory 이동

이동 방법 1 : 검색창에 Azure Active Directory 으로 찾기

이동 방법 2 : Azure 홈의 서비스 항목에 있는지 확인

 

2.1.2. 앱 등록으로 이동

2.1.3. 새등록 클릭

2.1.4. 지원되는 계정 유형 : 이 조직 디렉터리의 계정만(기본 디렉터리만 - 단일 테넌트)

선택 후 등록 완료

 

 

 

2.2. 역할 할당 추가

2.2.1. 구독으로 이동

이동 방법 1 : 검색창에 구독으로 찾기

이동 방법 2 : Azure 홈의 서비스 항목에 있는지 확인

 

2.2.2. 해당 항목에서 구독 ID 확인

 

SUBSCRIPTION_ID = 'user id' 에 해당하는 값 

상위 빨간 부분임

 

2.2.3. 구독 이름 클릭

예제에서는 무료 체험을 클릭

 

2.2.4. 좌측 항목에서 액세스 제어(IAM) 클릭

 

2.2.5. 우측 역할 할당 추가

 

2.2.6. 역할 할당 추가 완료 후 저장

역할 : 소유자 (admin 과 동일한 의미)

다음에 대한 엑세스 할당 : : Auzre AD 사용자, 그룹 또는 서비스 보안 주체

선택 : 상위 앱등록에서 생성한 앱 이름을 넣어줌

 

 

 

2.3. 확인

2.3.1. Azure Active Directory 이동

이동 방법 1 : 검색창에 Azure Active Directory 으로 찾기

이동 방법 2 : Azure 홈의 서비스 항목에 있는지 확인

2.3.2. 값 확인

client_id = '상위 그림의 애플리케이션(클라이언트) ID 에 해당함',

secret = 'authentication-key',

tenant = '상위의 디렉터리(테넌트) ID 에 해당함'

 

아직 Secret ID 를 생성해야함

 

 

2.4. Secret Key 생성법

2.4.1. Azure Active Directory 이동

이동 방법 1 : 검색창에 Azure Active Directory 으로 찾기

이동 방법 2 : Azure 홈의 서비스 항목에 있는지 확인

 

2.4.2. 왼쪽의 인증서 및 암호 클릭

 

2.4.3. 클라이언트 암호희 새 클라이언트 암호 클릭

 

2.4.4. 생성 후 추가

secret = 'authentication-key',

Secret key 값 확인

 

 

 

4가지 key 생성 완료.

 

 


 

 

 

파이썬 예제코드

from azure.common.credentials import ServicePrincipalCredentials

from azure.mgmt.resource import ResourceManagementClient

from azure.mgmt.compute import ComputeManagementClient

from azure.mgmt.network import NetworkManagementClient

from azure.mgmt.compute.models import DiskCreateOption

 

 

 

 

SUBSCRIPTION_ID = 'key(찾는 방식은 상위 설명 참고)'

ClientId = 'key(찾는 방식은 상위 설명 참고)'

SecretId = 'key(찾는 방식은 상위 설명 참고)'

TenantID = 'key(찾는 방식은 상위 설명 참고)'

 

 

def Azure_VM(num):

    

    credentials = ServicePrincipalCredentials(

        client_id = ClientId,

        secret = SecretId,

        tenant = TenantID

    )

   

    compute_client = ComputeManagementClient(credentials, SUBSCRIPTION_ID)

    

    ## Azure VM Instances List ##

    if num == 0:    

        print('[Azure VM Instances List]')

        vm_list = compute_client.virtual_machines.list_all()

    

        VmCount= 0

        for vm in vm_list:

            VmCount += 1

            arrayV = vm.id.split("/")

            vm_id = arrayV[2]

            resource_group = arrayV[4]

            vm_name = arrayV[-1]

            

            statuses = compute_client.virtual_machines.instance_view(resource_group, vm_name).statuses

            status = len(statuses) >= 2 and statuses[1]

            arrayS = status.code.split("/")

 

 

        print("[{0}] VM_Name=({1}), VM_ID=({2}), state=({3})".format(VmCount, vm_name, vm_id, arrayS[1]))

        #end for

    #end if

 

 

    ## Azure VM Instances Start ##

    if num == 1:    

        print('[Azure VM all Start]')

        vm_list = compute_client.virtual_machines.list_all()

    

        for vm in vm_list:

            arrayV = vm.id.split("/")

            vm_id = arrayV[2]

            resource_group = arrayV[4]

            vm_name = arrayV[-1]

            

            statuses = compute_client.virtual_machines.instance_view(resource_group, vm_name).statuses

            status = len(statuses) >= 2 and statuses[1]

            arrayS = status.code.split("/")

            if arrayS[1] == 'stopped' or arrayS[1] == 'deallocated':

                compute_client.virtual_machines.start(resource_group, vm_name)

                print("VM_Name=({0}), VM_ID=({1}) is START ".format(vm_name, vm_id))

        #end for

    #end if

 

 

 

    ## Azure VM Instances STOP ##

    if num == 2:    

        print('[Azure VM all Stop]')

        vm_list = compute_client.virtual_machines.list_all()

    

        for vm in vm_list:

            arrayV = vm.id.split("/")

            vm_id = arrayV[2]

            resource_group = arrayV[4]

            vm_name = arrayV[-1]

            

            statuses = compute_client.virtual_machines.instance_view(resource_group, vm_name).statuses

            status = len(statuses) >= 2 and statuses[1]

            arrayS = status.code.split("/")

            if arrayS[1] == 'running':

                compute_client.virtual_machines.power_off(resource_group, vm_name)

                print("VM_Name=({0}), VM_ID=({1}) is STOP ".format(vm_name, vm_id))

        #end for

    #end if

 

 

 

    ## Azure VM Instances Deallocate ##

    if num == 3:    

        print('[Azure VM all Deallocate]')

        vm_list = compute_client.virtual_machines.list_all()

    

        for vm in vm_list:

            arrayV = vm.id.split("/")

            vm_id = arrayV[2]

            resource_group = arrayV[4]

            vm_name = arrayV[-1]

            

            statuses = compute_client.virtual_machines.instance_view(resource_group, vm_name).statuses

            status = len(statuses) >= 2 and statuses[1]

            arrayS = status.code.split("/")

            if arrayS[1] == 'running':

                compute_client.virtual_machines.deallocate(resource_group, vm_name)

                print("VM_Name=({0}), VM_ID=({1}) is Deallocate ".format(vm_name, vm_id))

 

        #end for

    #end if

 

 

 

#end def Azure_VM

 

 

 

 

if __name__=="__main__" :

    

    while True:

        InputGet = input('cli> ')

        if 'q' == InputGet :

            break

        if '0' == InputGet :

            Azure_VM(0)

        if '1' == InputGet :

            Azure_VM(1)

        if '2' == InputGet :

            Azure_VM(2)

        if '3' == InputGet :

            Azure_VM(3)

 

 

 


제 글을 복사할 시 출처를 명시해주세요.
글에 오타, 오류가 있다면 댓글로 알려주세요! 바로 수정하겠습니다!


 

 

 

 

참고

[ Azure python 라이브러리 download ]

https://docs.microsoft.com/ko-kr/azure/developer/python/azure-sdk-install

 

[ Azure Python ]

https://docs.microsoft.com/ko-kr/azure/api-management/import-and-publish

https://docs.microsoft.com/ko-kr/azure/azure-functions/functions-reference-python

 

[ SDK 참고 ]

https://docs.microsoft.com/ko-kr/azure/virtual-machines/windows/python

 

[VM list, start, stop 예제 ]

https://azure.github.io/azure-sdk-for-python/

https://docs.microsoft.com/ko-kr/python/api/overview/azure/authorization?view=azure-python

 

[ key 인증 참고 ]

https://docs.microsoft.com/ko-kr/azure/key-vault/keys/quick-create-python

https://docs.microsoft.com/ko-kr/azure/active-directory/develop/howto-create-service-principal-portal

 

VM list 조회 참고

https://stackoverflow.com/questions/58925397/how-could-i-list-azure-virtual-machines-using-python

 

 

 

 

 

 

 

 

 

 

반응형