자습서: SiteWise Edge 게이트웨이에서 자산 모델 목록 가져오기 - AWS IoT SiteWise

기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.

자습서: SiteWise Edge 게이트웨이에서 자산 모델 목록 가져오기

사용 가능한 AWS IoT SiteWise API의 하위 집합을 엣지별 API와 함께 사용하여 엣지의 자산 모델 및 해당 자산과 상호 작용할 수 있습니다. 이 자습서에서는 에지 게이트웨이에 대한 임시 자격 증명을 얻고 AWS IoT SiteWise 에지 게이트웨이의 자산 모델 목록을 가져오는 방법을 안내합니다 SiteWise .

사전 조건

이 자습서의 단계에서는 다양한 도구를 사용할 수 있습니다. 이러한 도구를 사용하려면 해당 필수 조건이 설치되어 있어야 합니다.

이 튜토리얼을 완료하려면 다음이 필요합니다.

1단계: SiteWise 에지 게이트웨이 서비스 서명 인증서 받기

SiteWise 에지 게이트웨이에서 사용할 수 있는 API에 TLS 연결을 설정하려면 신뢰할 수 있는 인증서가 필요합니다. OpenSSL 또는 AWS OpsHub for를 사용하여 이 인증서를 생성할 수 있습니다. AWS IoT SiteWise

OpenSSL
참고

이 명령을 실행하려면 OpenSSL이 설치되어 있어야 합니다.

터미널을 열고 다음 명령을 실행하여 SiteWise Edge 게이트웨이에서 서명된 인증서를 가져옵니다. SiteWise 에지 게이트웨이의 <sitewise_gateway_ip> IP로 바꾸십시오.

openssl s_client -connect <sitewise_gateway_ip>:443 </dev/null 2>/dev/null | openssl x509 -outform PEM > GatewayCert.pem
AWS OpsHub for AWS IoT SiteWise

AWS IoT SiteWise에 대해 AWS OpsHub를 사용할 수 있습니다. 자세한 설명은 SiteWise 에지 게이트웨이 관리 섹션을 참조하세요.

이 자습서에서는 다운로드한 SiteWise Edge 게이트웨이 인증서의 절대 경로를 사용합니다. 다음 명령을 실행하여 인증서의 전체 경로를 내보내고 <absolute_path_to_certificate>를 인증서 경로로 대체합니다.

export PATH_TO_CERTIFICATE='<absolute_path_to_certificate>'

2단계: SiteWise 에지 게이트웨이 호스트 이름 가져오기

참고

이 명령을 실행하려면 OpenSSL이 설치되어 있어야 합니다.

자습서를 완료하려면 SiteWise 에지 게이트웨이의 호스트 이름이 필요합니다. 에지 게이트웨이의 호스트 이름을 가져오려면 SiteWise 에지 게이트웨이의 <sitewise_gateway_ip> IP로 대체하여 다음을 실행합니다. SiteWise

openssl s_client -connect <sitewise_gateway_ip>:443 </dev/null 2>/dev/null | grep -Po 'CN = \K.*'| head -1

다음 명령을 실행하여 나중에 사용할 수 있도록 호스트 이름을 내보내고 에지 게이트웨이의 호스트 이름으로 <your_edge_gateway_hostname> 대체합니다 SiteWise .

export GATEWAY_HOSTNAME='<your_edge_gateway_hostname>'

3단계: 에지 게이트웨이의 임시 자격 SiteWise 증명 가져오기

이제 서명된 인증서와 SiteWise 에지 게이트웨이의 호스트 이름을 얻었으므로 게이트웨이에서 API를 실행할 수 있도록 임시 자격 증명을 가져와야 합니다. API를 사용하여 에지 게이트웨이를 통해 AWS OpsHub AWS IoT SiteWise 또는 SiteWise Edge 게이트웨이에서 직접 이러한 자격 증명을 가져올 수 있습니다.

중요

자격 증명은 4시간마다 만료되므로 에지 게이트웨이에서 API를 사용하기 직전에 자격 증명을 받아야 합니다 SiteWise . 보안 인증을 4시간 이상 캐시하지 마십시오.

를 사용하여 임시 자격 증명을 받으십시오. AWS OpsHubAWS IoT SiteWise

참고

AWS IoT SiteWise 애플리케이션용 AWS OpsHub을 사용하여 임시 보안 인증을 받으려면 다음과 같이 하십시오.

  1. 애플리케이션에 로그인합니다.

  2. 설정을 선택합니다.

  3. 인증에서 보안 인증 복사를 선택합니다.

  4. 환경에 맞는 옵션을 확장하고 복사를 선택합니다.

  5. 나중에 사용할 수 있도록 보안 인증을 저장합니다.

SiteWise 에지 게이트웨이 API를 사용하여 임시 자격 증명을 받으세요.

SiteWise Edge gateway API를 사용하여 임시 자격 증명을 가져오려면 Python 스크립트 또는 curl을 사용할 수 있습니다. 먼저 SiteWise Edge 게이트웨이의 사용자 이름과 암호가 있어야 합니다. SiteWise 에지 게이트웨이는 SigV4 인증 및 권한 부여를 사용합니다. 사용자 추가에 대한 자세한 내용은 LDAP 또는 Linux 사용자 풀을 참조하십시오. 이러한 자격 증명은 다음 단계에서 API를 사용하는 데 필요한 SiteWise 에지 게이트웨이의 로컬 자격 증명을 가져오는 데 사용됩니다. AWS IoT SiteWise

Python
참고

urllib3Python3이 설치되어 있어야 합니다.

Python을 사용하여 보안 인증을 가져오려면
  1. get_credentials.py라는 파일을 생성하고 다음 코드를 그 안에 복사합니다.

    ''' The following demonstrates how to get the credentials from the SiteWise Edge gateway. You will need to add local users or connect your system to LDAP/AD https://docs.aws.amazon.com/iot-sitewise/latest/userguide/manage-gateways-ggv2.html#create-user-pool Example usage: python3 get_credentials.py -e https://<gateway_hostname> -c <path_to_certificate> -u '<gateway_username>' -p '<gateway_password>' -m '<method>' ''' import urllib3 import json import urllib.parse import sys import os import getopt """ This function retrieves the AWS IoT SiteWise Edge gateway credentials. """ def get_credentials(endpoint,certificatePath, user, password, method): http = urllib3.PoolManager(cert_reqs='CERT_REQUIRED', ca_certs= certificatePath) encoded_body = json.dumps({ "username": user, "password": password, "authMechanism": method, }) url = urllib.parse.urljoin(endpoint, "/authenticate") response = http.request('POST', url, headers={'Content-Type': 'application/json'}, body=encoded_body) if response.status != 200: raise Exception(f'Failed to authenticate! Response status {response.status}') auth_data = json.loads(response.data.decode('utf-8')) accessKeyId = auth_data["accessKeyId"] secretAccessKey = auth_data["secretAccessKey"] sessionToken = auth_data["sessionToken"] region = "edge" return accessKeyId, secretAccessKey, sessionToken, region def print_help(): print('Usage:') print(f'{os.path.basename(__file__)} -e <endpoint> -c <path/to/certificate> -u <user> -p <password> -m <method> -a <alias>') print('') print('-e, --endpoint edge gateway endpoint. Usually the Edge gateway hostname.') print('-c, --cert_path path to downloaded gateway certificate') print('-u, --user Edge user') print('-p, --password Edge password') print('-m, --method (Optional) Authentication method (linux, winnt, ldap), default is linux') sys.exit() def parse_args(argv): endpoint = "" certificatePath = None user = None password = None method = "linux" try: opts, args = getopt.getopt(argv, "he:c:u:p:m:", ["endpoint=","cert_path=", "user=", "password=", "method="]) except getopt.GetoptError: print_help() for opt, arg in opts: if opt == '-h': print_help() elif opt in ("-e", "--endpoint"): endpoint = arg elif opt in ("-u", "--user"): user = arg elif opt in ("-p", "--password"): password = arg elif opt in ("-m", "--method"): method = arg.lower() elif opt in ("-c", "--cert_path"): certificatePath = arg if method not in ['ldap', 'linux', 'winnt']: print("not valid method parameter, required are ldap, linux, winnt") print_help() if (user == None or password == None): print("To authenticate against edge user, password have to be passed together, and the region has to be set to 'edge'") print_help() if(endpoint == ""): print("You must provide a valid and reachable gateway hostname") print_help() return endpoint,certificatePath, user, password, method def main(argv): # get the command line args endpoint, certificatePath, user, password, method = parse_args(argv) accessKeyId, secretAccessKey, sessionToken, region=get_credentials(endpoint, certificatePath, user, password, method) print("Copy and paste the following credentials into the shell, they are valid for 4 hours:") print(f"export AWS_ACCESS_KEY_ID={accessKeyId}") print(f"export AWS_SECRET_ACCESS_KEY={secretAccessKey}") print(f"export AWS_SESSION_TOKEN={sessionToken}") print(f"export AWS_REGION={region}") print() if __name__ == "__main__": main(sys.argv[1:])
  2. 터미널에서 get_credentials.py를 실행하여 <gateway_username><gateway_password>를 생성한 보안 인증으로 교체합니다.

    python3 get_credentials.py -e https://$GATEWAY_HOSTNAME -c $PATH_TO_CERTIFICATE -u '<gateway_username>' -p '<gateway_password>' -m 'linux'
curl
참고

curl이 설치되어 있어야 합니다.

curl을 사용하여 보안 인증을 가져오려면
  1. <gateway_username> 및 <gateway_password>를 생성한 자격 증명으로 교체하여 터미널에서 다음 명령을 실행합니다.

    curl --cacert $PATH_TO_CERTIFICATE --location \ -X POST https://$GATEWAY_HOSTNAME:443/authenticate \ --header 'Content-Type: application/json' \ --data-raw '{ "username": "<gateway_username>", "password": "<gateway_password>", "authMechanism": "linux" }'

    응답은 다음과 같아야 합니다.

    { "username": "sweuser", "accessKeyId": "<accessKeyId>", "secretAccessKey": "<secretAccessKey>", "sessionToken": "<sessionToken>", "sessionExpiryTime": "2022-11-17T04:51:40.927095Z", "authMechanism": "linux", "role": "edge-user" }
  2. 터미널에서 다음 명령을 실행합니다.

    export AWS_ACCESS_KEY_ID=<accessKeyId> export AWS_SECRET_ACCESS_KEY=<secretAccessKey> export AWS_SESSION_TOKEN=<sessionToken> export AWS_REGION=edge

4단계: SiteWise 에지 게이트웨이의 자산 모델 목록 가져오기

이제 서명된 인증서, SiteWise 에지 게이트웨이 호스트 이름, 에지 게이트웨이의 임시 자격 증명이 준비되었으므로 ListAssetModels API를 사용하여 SiteWise SiteWise 에지 게이트웨이의 자산 모델 목록을 가져올 수 있습니다.

Python
참고

Python3, Boto3가 설치되어 있어야 합니다. BotoCore

Python을 사용하여 자산 모델 목록을 가져오려면
  1. list_asset_model.py라는 파일을 만들고 그 안에 다음 코드를 복사합니다.

    import json import boto3 import botocore import os # create the client using the credentials client = boto3.client("iotsitewise", endpoint_url= "https://"+ os.getenv("GATEWAY_HOSTNAME"), region_name=os.getenv("AWS_REGION"), aws_access_key_id=os.getenv("AWS_ACCESS_KEY_ID"), aws_secret_access_key=os.getenv("AWS_SECRET_ACCESS_KEY"), aws_session_token=os.getenv("AWS_SESSION_TOKEN"), verify=os.getenv("PATH_TO_CERTIFICATE"), config=botocore.config.Config(inject_host_prefix=False)) # call the api using local credentials response = client.list_asset_models() print(response)
  2. 터미널에서 list_asset_model.py를 실행합니다.

    python3 list_asset_model.py
curl
참고

curl이 설치되어 있어야 합니다.

curl을 사용하여 자산 모델 목록을 가져오려면

터미널에서 다음 명령을 실행합니다.

curl \ --request GET https://$GATEWAY_HOSTNAME:443/asset-models \ --cacert $PATH_TO_CERTIFICATE \ --aws-sigv4 "aws:amz:edge:iotsitewise" \ --user "$AWS_ACCESS_KEY_ID:$AWS_SECRET_ACCESS_KEY" \ -H "x-amz-security-token:$AWS_SESSION_TOKEN"

응답은 다음과 같아야 합니다.

{ "assetModelSummaries": [ { "arn": "arn:aws:iotsitewise:{region}:{account-id}:asset-model/{asset-model-id}", "creationDate": 1.669245291E9, "description": "This is a small example asset model", "id": "{asset-model-id}", "lastUpdateDate": 1.669249038E9, "name": "Some Metrics Model", "status": { "error": null, "state": "ACTIVE" } }, . . . ], "nextToken": null }