Azure IoT Hub를 사용하여 디바이스에서 클라우드로 파일 업로드
이 문서에서는 다음을 수행하는 방법을 보여줍니다.
- IoT Hub의 파일 업로드 기능을 사용하여 Azure IoT 디바이스 및 서비스 SDK를 사용하여 Azure Blob Storage에 파일을 업로드합니다.
- 파일이 성공적으로 업로드되었음을 IoT Hub에 알리고 Azure IoT 서비스 SDK를 사용하여 IoT Hub에서 파일 업로드 알림을 수신하는 백 엔드 서비스를 만듭니다.
일부 시나리오에서는 디바이스가 보내는 데이터를 IoT Hub에서 허용하는 비교적 작은 디바이스-클라우드 메시지에 쉽게 매핑할 수 없습니다. IoT Hub의 파일 업로드 기능을 사용하면 크거나 복잡한 데이터를 클라우드로 이동할 수 있습니다. 예시:
- 비디오
- 이미지가 포함된 대형 파일
- 자주 샘플링되는 진동 데이터
- 특정 형태의 전처리된 데이터
이러한 파일은 일반적으로 Azure Data Factory 또는 Hadoop 스택과 같은 도구를 사용하여 클라우드에서 일괄 처리됩니다. 디바이스에서 파일을 업로드해야 할 때 IoT Hub의 보안 및 안정성을 여전히 사용할 수 있습니다. 이 문서에서 그 방법을 보여줍니다.
이 문서는 이 문서 내에서 참조되는 실행 가능한 SDK 샘플을 보완하기 위한 것입니다.
자세한 내용은 다음을 참조하세요.
Important
X.509 CA(인증 기관) 인증을 사용하는 디바이스의 파일 업로드 기능은 공개 미리 보기로 제공되고 있으며 미리 보기 모드를 사용하도록 설정해야 합니다. Azure Device Provisioning Service와 함께 X.509 지문 인증 또는 X.509 인증서 증명을 사용하는 디바이스에서 일반적으로 사용할 수 있습니다. IoT Hub를 사용하는 X.509 인증에 대해 자세히 알아보려면 지원되는 X.509 인증서를 참조하세요.
필수 조건
IoT Hub. 일부 SDK 호출에는 IoT Hub 기본 연결 문자열이 필요하므로 연결 문자열을 기록해 둡니다.
등록된 디바이스. 일부 SDK 호출에는 디바이스 기본 연결 문자열이 필요하므로 연결 문자열을 기록해 둡니다.
IoT Hub 서비스 연결 권한 - 파일 업로드 알림 메시지를 받으려면 백 엔드 서비스에 서비스 연결 권한이 필요합니다. 기본적으로 모든 IoT Hub는 이 사용 권한을 부여하는 service라는 공유 액세스 정책을 사용하여 만듭니다. 자세한 내용은 IoT Hub에 연결을 참조하세요.
Azure Storage 계정 및 Azure Blob Storage 컨테이너를 연결하여 IoT Hub에서 파일 업로드를 구성합니다. Azure Portal, Azure CLI 또는 Azure PowerShell을 사용하여 구성할 수 있습니다.
개요
이 방법에서는 다음 두 섹션을 포함합니다.
- 디바이스 애플리케이션에서 파일 업로드
- 백 엔드 애플리케이션에서 파일 업로드 알림 받기
디바이스 애플리케이션에서 파일 업로드
이 섹션에서는 .NET용 Azure IoT SDK의 DeviceClient 클래스를 사용하여 디바이스에서 IoT Hub로 파일을 업로드하는 방법을 설명합니다.
디바이스에서 IoT Hub로 파일을 업로드하려면 다음 절차를 따르세요.
- IoT Hub에 연결
- IoT Hub에서 SAS URI 가져오기
- Azure Storage에 파일 업로드
- IoT Hub에 파일 업로드 상태 알림
디바이스를 IoT Hub에 연결
디바이스 앱은 다음 방법을 사용하여 IoT Hub로 인증할 수 있습니다.
- X.509 인증서
- 공유 액세스 키
X.509 인증서를 사용하여 인증
X.509 인증서를 사용하여 디바이스를 IoT Hub에 연결하려면 다음을 수행합니다.
DeviceAuthenticationWithX509Certificate를 사용하여 디바이스 및 인증서 정보를 포함하는 개체를 만듭니다.
DeviceAuthenticationWithX509Certificate
가 두 번째 매개 변수DeviceClient.Create
로 전달됩니다(2단계).DeviceClient.Create를 사용하여 X.509 인증서를 사용하여 디바이스를 IoT Hub에 연결합니다.
이 예제에서는 디바이스 및 인증서 정보가 전달되는 DeviceClient.Create
개체에 auth
DeviceAuthenticationWithX509Certificate
채워집니다.
이 예제에서는 명확성을 위해 인증서 입력 매개 변수 값을 지역 변수로 보여 줍니다. 프로덕션 시스템에서 환경 변수 또는 다른 보안 스토리지 위치에 중요한 입력 매개 변수를 저장합니다. 예를 들어 호스트 이름 환경 변수를 읽는 데 사용합니다 Environment.GetEnvironmentVariable("HOSTNAME")
.
RootCertPath = "~/certificates/certs/sensor-thl-001-device.cert.pem";
Intermediate1CertPath = "~/certificates/certs/sensor-thl-001-device.intermediate1.cert.pem";
Intermediate2CertPath = "~/certificates/certs/sensor-thl-001-device.intermediate2.cert.pem";
DevicePfxPath = "~/certificates/certs/sensor-thl-001-device.cert.pfx";
DevicePfxPassword = "1234";
DeviceName = "MyDevice";
HostName = "xxxxx.azure-devices.net";
var chainCerts = new X509Certificate2Collection();
chainCerts.Add(new X509Certificate2(RootCertPath));
chainCerts.Add(new X509Certificate2(Intermediate1CertPath));
chainCerts.Add(new X509Certificate2(Intermediate2CertPath));
using var deviceCert = new X509Certificate2(DevicePfxPath, DevicePfxPassword);
using var auth = new DeviceAuthenticationWithX509Certificate(DeviceName, deviceCert, chainCerts);
using var deviceClient = DeviceClient.Create(
HostName,
auth,
TransportType.Amqp);
인증서 인증에 대한 자세한 내용은 다음을 참조하세요.
코드 샘플
디바이스 X.509 인증서 인증의 작업 샘플은 다음을 참조하세요.
- X.509 인증서로 연결
- DeviceClientX509AuthenticationE2ETests
- 안내형 프로젝트 - IoT Hub Device Provisioning Service를 사용하여 IoT 디바이스를 안전하고 대규모로 프로비전
공유 액세스 키를 사용하여 인증
CreateFromConnectionString을 호출하여 디바이스에 연결합니다. 디바이스 기본 연결 문자열 전달합니다.
AMQP
는 기본 전송 프로토콜입니다.
static string connectionString = "{device primary connection string}";
deviceClient = DeviceClient.CreateFromConnectionString(connectionString);
IoT Hub에서 SAS URI 가져오기
GetFileUploadSasUriAsync를 호출하여 파일 업로드 세부 정보를 가져옵니다. SAS URI는 다음 단계에서 디바이스에서 Blob Storage로 파일을 업로드하는 데 사용됩니다.
const string filePath = "TestPayload.txt";
using var fileStreamSource = new FileStream(filePath, FileMode.Open);
var fileName = Path.GetFileName(fileStreamSource.Name);
var fileUploadSasUriRequest = new FileUploadSasUriRequest
{
BlobName = fileName
};
FileUploadSasUriResponse sasUri = await _deviceClient.GetFileUploadSasUriAsync(fileUploadSasUriRequest, System.Threading.CancellationToken cancellationToken = default);
Uri uploadUri = sasUri.GetBlobUri();
Azure Storage에 파일 업로드
Azure Storage에 파일을 업로드하려면 다음을 수행합니다.
파일 업로드 URI를 전달하는 blockBlobClient 개체를 만듭니다.
UploadAsync 메서드를 사용하여 BLOB Storage에 파일을 업로드하고 SAS URI를 전달합니다. 필요에 따라 Blob 업로드 옵션 및 취소 토큰 매개 변수를 추가할 수 있습니다.
Azure Blob 클라이언트는 항상 HTTPS를 프로토콜로 사용하여 Azure Storage에 파일을 업로드합니다.
이 예제 BlockBlobClient
에서는 AZURE Storage 블록 Blob 클라이언트를 만들기 위해 SAS URI를 전달하고 파일을 업로드합니다.
var blockBlobClient = new BlockBlobClient(uploadUri);
await blockBlobClient.UploadAsync(fileStreamSource, null, null);
IoT Hub에 파일 업로드 상태 알림
CompleteFileUploadAsync를 사용하여 디바이스 클라이언트가 업로드를 완료했음을 IoT Hub에 알리고 FileUploadCompletionNotification 개체를 전달합니다. 플래그는 IsSuccess
업로드에 성공했는지 여부를 나타냅니다. 알림을 받은 후 IoT Hub는 업로드(SAS URI)와 연결된 리소스를 해제합니다.
파일 업로드 알림을 사용하도록 설정하면 IoT Hub는 파일 업로드 알림에 대해 구성된 백 엔드 서비스에 파일 업로드 알림 메시지를 보냅니다.
var successfulFileUploadCompletionNotification = new FileUploadCompletionNotification
{
// Mandatory. Must be the same value as the correlation id returned in the sas uri response
CorrelationId = sasUri.CorrelationId,
// Mandatory. Will be present when service client receives this file upload notification
IsSuccess = true,
// Optional, user defined status code. Will be present when service client receives this file upload notification
StatusCode = 200,
// Optional, user-defined status description. Will be present when service client receives this file upload notification
StatusDescription = "Success"
};
await _deviceClient.CompleteFileUploadAsync(successfulFileUploadCompletionNotification);
SDK 파일 업로드 샘플
SDK에는 이 파일 업로드 샘플이 포함되어 있습니다.
백 엔드 애플리케이션에서 파일 업로드 알림 받기
IoT Hub에서 파일 업로드 알림 메시지를 수신하는 백 엔드 서비스를 만들 수 있습니다.
ServiceClient 클래스에는 서비스에서 파일 업로드 알림을 받는 데 사용할 수 있는 메서드가 포함되어 있습니다.
서비스 NuGet 패키지 추가
백 엔드 서비스 애플리케이션에는 Microsoft.Azure.Devices NuGet 패키지가 필요합니다.
IoT Hub에 연결
다음 방법을 사용하여 백 엔드 서비스를 IoT Hub에 연결할 수 있습니다.
- 공유 액세스 정책
- Microsoft Entra
Important
이 문서에서는 공유 액세스 서명을 사용하여 서비스에 연결하는 단계를 설명합니다. 이 인증 방법은 테스트와 평가에 편리하지만, Microsoft Entra ID나 관리 ID를 사용하여 서비스를 인증하는 것이 더 안전한 방식입니다. 자세한 내용은 보안 모범 사례 > 클라우드 보안을 참조하세요.
공유 액세스 정책을 사용하여 연결
CreateFromConnectionString을 사용하여 백 엔드 애플리케이션을 디바이스에 연결합니다. 애플리케이션에 서비스 연결 권한이 필요합니다. 이 공유 액세스 정책 연결 문자열 매개 변수fromConnectionString
로 제공합니다. 공유 액세스 정책에 대한 자세한 내용은 공유 액세스 서명을 사용하여 IoT Hub에 대한 액세스 제어를 참조 하세요.
예시:
using Microsoft.Azure.Devices;
static ServiceClient serviceClient;
static string connectionString = "{Shared access policy connection string}";
serviceClient = ServiceClient.CreateFromConnectionString(connectionString);
Microsoft Entra를 사용하여 연결
Microsoft Entra를 사용하는 백 엔드 앱은 IoT Hub에 연결하기 전에 보안 토큰 자격 증명을 성공적으로 인증하고 가져와야 합니다. 이 토큰은 IoT Hub 연결 메서드에 전달됩니다. IoT Hub용 Microsoft Entra를 설정하고 사용하는 방법에 대한 일반적인 내용은 Microsoft Entra ID를 사용하여 IoT Hub에 대한 액세스 제어를 참조하세요.
Microsoft Entra 앱 구성
기본 인증 자격 증명에 대해 구성된 Microsoft Entra 앱을 설정해야 합니다. 앱에는 백 엔드 애플리케이션에서 인증하는 데 사용되는 클라이언트 암호와 같은 매개 변수가 포함되어 있습니다. 사용 가능한 앱 인증 구성은 다음과 같습니다.
- 클라이언트 암호
- 인증서
- 페더레이션 ID 자격 증명
Microsoft Entra 앱은 수행 중인 작업에 따라 특정 역할 권한이 필요할 수 있습니다. 예를 들어 IoT Hub 디바이스 및 모듈 쌍에 대한 읽기 및 쓰기 액세스를 사용하려면 IoT Hub 쌍 기여자가 필요합니다. 자세한 내용은 Azure RBAC 역할 할당을 사용하여 IoT Hub에 대한 액세스 관리를 참조하세요.
Microsoft Entra 앱 설정에 대한 자세한 내용은 빠른 시작: Microsoft ID 플랫폼 애플리케이션 등록을 참조하세요.
DefaultAzureCredential을 사용하여 인증
Microsoft Entra를 사용하여 백 엔드 애플리케이션을 인증하는 가장 쉬운 방법은 DefaultAzureCredential을 사용하는 것이지만 특정 TokenCredential
또는 구문 분석ChainedTokenCredential
된 방법을 포함하여 프로덕션 환경에서 다른 방법을 사용하는 것이 좋습니다. 편의상 이 섹션에서는 인증 사용 DefaultAzureCredential
및 클라이언트 비밀에 대해 설명합니다. 사용 DefaultAzureCredential
의 장단점에 대한 자세한 내용은 DefaultAzureCredential에 대한 사용 지침을 참조 하세요.
DefaultAzureCredential
는 다양한 인증 메커니즘을 지원하고 실행 중인 환경에 따라 적절한 자격 증명 유형을 결정합니다. 작업 자격 증명을 찾을 때까지 여러 자격 증명 형식을 순서대로 사용하려고 시도합니다.
Microsoft Entra에는 다음 NuGet 패키지 및 해당 using
문이 필요합니다.
- Azure.Core
- Azure.Identity
using Azure.Core;
using Azure.Identity;
이 예제에서는 Microsoft Entra 앱 등록 클라이언트 암호, 클라이언트 ID 및 테넌트 ID가 환경 변수에 추가됩니다. 이러한 환경 변수는 애플리케이션을 인증하는 데 사용됩니다 DefaultAzureCredential
. 성공적인 Microsoft Entra 인증의 결과는 IoT Hub 연결 방법으로 전달되는 보안 토큰 자격 증명입니다.
string clientSecretValue = "xxxxxxxxxxxxxxx";
string clientID = "xxxxxxxxxxxxxx";
string tenantID = "xxxxxxxxxxxxx";
Environment.SetEnvironmentVariable("AZURE_CLIENT_SECRET", clientSecretValue);
Environment.SetEnvironmentVariable("AZURE_CLIENT_ID", clientID);
Environment.SetEnvironmentVariable("AZURE_TENANT_ID", tenantID);
TokenCredential tokenCredential = new DefaultAzureCredential();
그러면 결과 TokenCredential 을 Microsoft Entra 자격 증명을 수락하는 모든 SDK 클라이언트에 대한 IoT Hub 메서드에 대한 연결에 전달할 수 있습니다.
이 예제에서는 TokenCredential
ServiceClient 연결 개체를 만들기 위해 전달 ServiceClient.Create
됩니다.
string hostname = "xxxxxxxxxx.azure-devices.net";
using var serviceClient = ServiceClient.Create(hostname, tokenCredential, TransportType.Amqp);
이 예제에서는 TokenCredential
RegistryManager 개체를 만들기 위해 전달 RegistryManager.Create
됩니다.
string hostname = "xxxxxxxxxx.azure-devices.net";
registryManager = RegistryManager.Create(hostname, tokenCredential);
코드 샘플
Microsoft Entra 서비스 인증의 작업 샘플은 역할 기반 인증 샘플을 참조 하세요.
파일 업로드 알림 받기
파일 업로드 알림을 받으려면 다음을 수행합니다.
- CancellationToken을 만듭니다.
- GetFileNotificationReceiver를 호출하여 알림 수신기를 만듭니다.
- ReceiveAsync와 함께 루프를 사용하여 파일 업로드 알림을 기다립니다.
예시:
// Define the cancellation token
CancellationTokenSource source = new CancellationTokenSource();
CancellationToken token = source.Token;
// Create a notification receiver
var notificationReceiver = serviceClient.GetFileNotificationReceiver();
Console.WriteLine("\nReceiving file upload notification from service");
// Check for file upload notifications
while (true)
{
var fileUploadNotification = await notificationReceiver.ReceiveAsync(token);
if (fileUploadNotification == null) continue;
Console.ForegroundColor = ConsoleColor.Yellow;
Console.WriteLine("Received file upload notification: {0}",
string.Join(", ", fileUploadNotification.BlobName));
Console.ResetColor();
await notificationReceiver.CompleteAsync(fileUploadNotification);
}
SDK 파일 업로드 수신기 샘플
SDK에는 이 파일 업로드 수신기 샘플이 포함되어 있습니다.
개요
이 방법에서는 다음 두 섹션을 포함합니다.
- 디바이스 애플리케이션에서 파일 업로드
- 백 엔드 애플리케이션에서 파일 업로드 알림 받기
디바이스 애플리케이션에서 파일 업로드
이 섹션에서는 Java용 Azure IoT SDK의 DeviceClient 클래스를 사용하여 디바이스에서 IoT Hub로 파일을 업로드하는 방법을 설명합니다.
디바이스에서 IoT Hub로 파일을 업로드하려면 다음 절차를 따르세요.
- 디바이스를 IoT Hub에 연결
- IoT Hub에서 SAS URI 가져오기
- Azure Storage에 파일 업로드
- IoT Hub에 파일 업로드 상태 알림 보내기
디바이스를 IoT Hub에 연결
디바이스 앱은 다음 방법을 사용하여 IoT Hub로 인증할 수 있습니다.
- X.509 인증서
- 공유 액세스 키
X.509 인증서를 사용하여 인증
X.509 인증서를 사용하여 디바이스를 IoT Hub에 연결하려면 다음을 수행합니다.
- buildSSLContext를 사용하여 SSLContext 개체를 빌드합니다.
SSLContext
ClientOptions 개체에 정보를 추가합니다.- 정보를 사용하여 DeviceClient를
ClientOptions
호출하여 디바이스-IoT Hub 연결을 만듭니다.
이 예제에서는 명확성을 위해 인증서 입력 매개 변수 값을 지역 변수로 보여 줍니다. 프로덕션 시스템에서 환경 변수 또는 다른 보안 스토리지 위치에 중요한 입력 매개 변수를 저장합니다. 예를 들어 공개 키 인증서 문자열 환경 변수를 읽는 데 사용합니다 Environment.GetEnvironmentVariable("PUBLICKEY")
.
private static final String publicKeyCertificateString =
"-----BEGIN CERTIFICATE-----\n" +
"XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n" +
"XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n" +
"-----END CERTIFICATE-----\n";
//PEM encoded representation of the private key
private static final String privateKeyString =
"-----BEGIN EC PRIVATE KEY-----\n" +
"XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n" +
"XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n" +
"-----END EC PRIVATE KEY-----\n";
SSLContext sslContext = SSLContextBuilder.buildSSLContext(publicKeyCertificateString, privateKeyString);
ClientOptions clientOptions = ClientOptions.builder().sslContext(sslContext).build();
DeviceClient client = new DeviceClient(connString, protocol, clientOptions);
인증서 인증에 대한 자세한 내용은 다음을 참조하세요.
코드 샘플
디바이스 X.509 인증서 인증의 작업 샘플은 다음을 참조하세요.
공유 액세스 키를 사용하여 인증
파일 업로드 작업은 항상 HTTPS를 사용하지만 DeviceClient는 원격 분석, 디바이스 메서드 및 디바이스 쌍과 같은 다른 서비스에 대한 IotHubClientProtocol을 정의할 수 있습니다.
IotHubClientProtocol protocol = IotHubClientProtocol.MQTT;
디바이스 기본 연결 문자열 사용하여 디바이스에 연결하려면 인스턴스화 DeviceClient
합니다.
String connString = "{IoT hub connection string}";
DeviceClient client = new DeviceClient(connString, protocol);
IoT Hub에서 SAS URI 가져오기
getFileUploadSasUri를 호출하여 FileUploadSasUriResponse 개체를 가져옵니다.
FileUploadSasUriResponse
에는 이러한 메서드 및 반환 값이 포함됩니다. 반환 값은 파일 업로드 메서드에 전달할 수 있습니다.
메서드 | 반환 값 |
---|---|
getCorrelationId() |
상관 관계 ID |
getContainerName() |
컨테이너 이름 |
getBlobName() |
Blob 이름 |
getBlobUri() |
Blob URI |
예시:
FileUploadSasUriResponse sasUriResponse = client.getFileUploadSasUri(new FileUploadSasUriRequest(file.getName()));
System.out.println("Successfully got SAS URI from IoT hub");
System.out.println("Correlation Id: " + sasUriResponse.getCorrelationId());
System.out.println("Container name: " + sasUriResponse.getContainerName());
System.out.println("Blob name: " + sasUriResponse.getBlobName());
System.out.println("Blob Uri: " + sasUriResponse.getBlobUri());
Azure Storage에 파일 업로드
BlobClient 개체를 만들려면 BlobClientBuilder.buildclient에 Blob URI 엔드포인트를 전달합니다.
BlobClient blobClient =
new BlobClientBuilder()
.endpoint(sasUriResponse.getBlobUri().toString())
.buildClient();
uploadFromFile을 호출하여 Blob Storage에 파일을 업로드합니다.
String fullFileName = "Path of the file to upload";
blobClient.uploadFromFile(fullFileName);
IoT Hub에 파일 업로드 상태 알림 보내기
파일 업로드 시도 후 IoT Hub에 업로드 상태 알림을 보냅니다.
FileUploadCompletionNotification 개체를 만듭니다. correlationId
파일 업로드 성공 상태를 전달합니다isSuccess
. 파일 업로드에 isSuccess
true
성공 false
했을 때 그렇지 않은 경우 값을 전달합니다.
FileUploadCompletionNotification
는 파일 업로드가 실패하는 경우에도 호출되어야 합니다. IoT Hub에는 지정된 시간에 활성화할 수 있는 고정된 수의 SAS URI가 있습니다. 파일 업로드가 완료되면 다른 SAS URI를 생성할 수 있도록 SAS URI를 해제해야 합니다. 이 API를 통해 SAS URI를 해제하지 않으면 결국 SAS URI가 IoT Hub에 상주하도록 구성된 기간에 따라 자체적으로 해제됩니다.
이 예제에서는 성공적인 상태를 전달합니다.
FileUploadCompletionNotification completionNotification = new FileUploadCompletionNotification(sasUriResponse.getCorrelationId(), true);
client.completeFileUpload(completionNotification);
클라이언트 닫기
리소스를 client
해제합니다.
client.closeNow();
백 엔드 애플리케이션 만들기
이 섹션에서는 백 엔드 애플리케이션에서 파일 업로드 알림을 받는 방법을 설명합니다.
ServiceClient 클래스에는 서비스에서 파일 업로드 알림을 받는 데 사용할 수 있는 메서드가 포함되어 있습니다.
Import 문 추가
Azure IoT Java SDK 및 예외 처리기를 사용하려면 다음 import 문을 추가합니다.
import com.microsoft.azure.sdk.iot.service.*;
import java.io.IOException;
import java.net.URISyntaxException;
IoT Hub에 연결
다음 방법을 사용하여 백 엔드 서비스를 IoT Hub에 연결할 수 있습니다.
- 공유 액세스 정책
- Microsoft Entra
Important
이 문서에서는 공유 액세스 서명을 사용하여 서비스에 연결하는 단계를 설명합니다. 이 인증 방법은 테스트와 평가에 편리하지만, Microsoft Entra ID나 관리 ID를 사용하여 서비스를 인증하는 것이 더 안전한 방식입니다. 자세한 내용은 보안 모범 사례 > 클라우드 보안을 참조하세요.
공유 액세스 정책을 사용하여 연결
연결 프로토콜 정의
IotHubServiceClientProtocol을 사용하여 서비스 클라이언트가 IoT Hub와 통신하는 데 사용하는 애플리케이션 계층 프로토콜을 정의합니다.
IotHubServiceClientProtocol
은 AMQPS
또는 AMQPS_WS
열거형만 허용합니다.
private static final IotHubServiceClientProtocol protocol =
IotHubServiceClientProtocol.AMQPS;
ServiceClient 개체 만들기
IoT 허브 연결 문자열과 프로토콜을 제공하는 ServiceClient 개체를 만듭니다.
디바이스의 파일을 IoT Hub에 업로드하려면 서비스에 서비스 연결 권한이 필요합니다. 기본적으로 모든 IoT Hub는 이 사용 권한을 부여하는 service라는 공유 액세스 정책을 사용하여 만듭니다.
생성자에 대한 ServiceClient
매개 변수로 서비스 공유 액세스 정책을 제공합니다. 공유 액세스 정책에 대한 자세한 내용은 공유 액세스 서명을 사용하여 IoT Hub에 대한 액세스 제어를 참조 하세요.
String iotHubConnectionString = "HostName=xxxxx.azure-devices.net;SharedAccessKeyName=service;SharedAccessKey=xxxxxxxxxxxxxxxxxxxxxxxx";
private static final ServiceClient serviceClient (iotHubConnectionString, protocol);
애플리케이션과 IoT Hub 간의 연결 열기
AMQP 발신자 연결을 엽니다 . 이 방법은 애플리케이션과 IoT Hub 간의 연결을 만듭니다.
serviceClient.open();
Microsoft Entra를 사용하여 연결
Microsoft Entra를 사용하는 백 엔드 앱은 IoT Hub에 연결하기 전에 보안 토큰 자격 증명을 성공적으로 인증하고 가져와야 합니다. 이 토큰은 IoT Hub 연결 메서드에 전달됩니다. IoT Hub용 Microsoft Entra를 설정하고 사용하는 방법에 대한 일반적인 내용은 Microsoft Entra ID를 사용하여 IoT Hub에 대한 액세스 제어를 참조하세요.
Java SDK 인증에 대한 개요는 Java 및 Azure ID를 사용한 Azure 인증을 참조 하세요.
간단히 하기 위해 이 섹션에서는 클라이언트 암호를 사용하는 인증을 설명하는 데 중점을 둡니다.
Microsoft Entra 앱 구성
기본 인증 자격 증명에 대해 구성된 Microsoft Entra 앱을 설정해야 합니다. 앱에는 백 엔드 애플리케이션에서 인증하는 데 사용되는 클라이언트 암호와 같은 매개 변수가 포함되어 있습니다. 사용 가능한 앱 인증 구성은 다음과 같습니다.
- 클라이언트 암호
- 인증서
- 페더레이션 ID 자격 증명
Microsoft Entra 앱은 수행 중인 작업에 따라 특정 역할 권한이 필요할 수 있습니다. 예를 들어 IoT Hub 디바이스 및 모듈 쌍에 대한 읽기 및 쓰기 액세스를 사용하려면 IoT Hub 쌍 기여자가 필요합니다. 자세한 내용은 Azure RBAC 역할 할당을 사용하여 IoT Hub에 대한 액세스 관리를 참조하세요.
Microsoft Entra 앱 설정에 대한 자세한 내용은 빠른 시작: Microsoft ID 플랫폼 애플리케이션 등록을 참조하세요.
DefaultAzureCredential을 사용하여 인증
Microsoft Entra를 사용하여 백 엔드 애플리케이션을 인증하는 가장 쉬운 방법은 DefaultAzureCredential을 사용하는 것이지만 특정 TokenCredential
또는 구문 분석ChainedTokenCredential
된 방법을 포함하여 프로덕션 환경에서 다른 방법을 사용하는 것이 좋습니다.
사용DefaultAzureCredential
의 장단점에 대한 자세한 내용은 Java용 Azure ID 클라이언트 라이브러리의 자격 증명 체인을 참조하세요.
DefaultAzureCredential 은 다양한 인증 메커니즘을 지원하고 실행 중인 환경에 따라 적절한 자격 증명 유형을 결정합니다. 작업 자격 증명을 찾을 때까지 여러 자격 증명 형식을 순서대로 사용하려고 시도합니다.
DefaultAzureCredentialBuilder를 사용하여 Microsoft Entra 앱 자격 증명을 인증할 수 있습니다. 클라이언트 비밀 tenantID, clientID 및 클라이언트 비밀 값과 같은 연결 매개 변수를 환경 변수로 저장합니다. TokenCredential
만들어지면 ServiceClient 또는 다른 작성기에서 '자격 증명' 매개 변수로 전달합니다.
이 예제에서는 DefaultAzureCredentialBuilder
DefaultAzureCredential에 설명된 목록에서 연결을 인증하려고 시도합니다. 성공적인 Microsoft Entra 인증의 결과는 ServiceClient와 같은 생성자에 전달되는 보안 토큰 자격 증명입니다.
TokenCredential defaultAzureCredential = new DefaultAzureCredentialBuilder().build();
ClientSecretCredentialBuilder를 사용하여 인증
ClientSecretCredentialBuilder를 사용하여 클라이언트 비밀 정보를 사용하여 자격 증명을 만들 수 있습니다. 성공하면 이 메서드는 ServiceClient 또는 다른 작성기에서 '자격 증명' 매개 변수로 전달할 수 있는 TokenCredential을 반환합니다.
이 예제에서는 Microsoft Entra 앱 등록 클라이언트 암호, 클라이언트 ID 및 테넌트 ID 값이 환경 변수에 추가되었습니다. 이러한 환경 변수는 자격 증명을 빌드하는 데 사용됩니다 ClientSecretCredentialBuilder
.
string clientSecretValue = System.getenv("AZURE_CLIENT_SECRET");
string clientID = System.getenv("AZURE_CLIENT_ID");
string tenantID = System.getenv("AZURE_TENANT_ID");
TokenCredential credential =
new ClientSecretCredentialBuilder()
.tenantId(tenantID)
.clientId(clientID)
.clientSecret(clientSecretValue)
.build();
기타 인증 클래스
Java SDK에는 Microsoft Entra를 사용하여 백 엔드 앱을 인증하는 다음 클래스도 포함되어 있습니다.
- AuthorizationCodeCredential
- AzureCliCredential
- AzureDeveloperCliCredential
- AzurePipelinesCredential
- ChainedTokenCredential
- ClientAssertionCredential
- ClientCertificateCredential
- DeviceCodeCredential
- EnvironmentCredential
- InteractiveBrowserCredential
- ManagedIdentityCredential
- OnBehalfOfCredential
코드 샘플
Microsoft Entra 서비스 인증의 작업 샘플은 역할 기반 인증 샘플을 참조 하세요.
파일 업로드 상태 확인
파일 업로드 상태를 확인하려면 다음을 수행합니다.
- getFileUploadNotificationReceiver 개체를 만듭니다.
- Open을 사용하여 IoT Hub에 연결합니다.
- 수신을 호출하여 파일 업로드 상태를 확인합니다. 이 메서드는 fileUploadNotification 개체를 반환합니다. 업로드 알림이 수신되면 fileUploadNotification 메서드를 사용하여 업로드 상태 필드를 볼 수 있습니다.
예시:
FileUploadNotificationReceiver receiver = serviceClient.getFileUploadNotificationReceiver();
receiver.open();
FileUploadNotification fileUploadNotification = receiver.receive(2000);
if (fileUploadNotification != null)
{
System.out.println("File Upload notification received");
System.out.println("Device Id : " + fileUploadNotification.getDeviceId());
System.out.println("Blob Uri: " + fileUploadNotification.getBlobUri());
System.out.println("Blob Name: " + fileUploadNotification.getBlobName());
System.out.println("Last Updated : " + fileUploadNotification.getLastUpdatedTimeDate());
System.out.println("Blob Size (Bytes): " + fileUploadNotification.getBlobSizeInBytes());
System.out.println("Enqueued Time: " + fileUploadNotification.getEnqueuedTimeUtcDate());
}
else
{
System.out.println("No file upload notification");
}
// Close the receiver object
receiver.close();
SDK 파일 업로드 샘플
두 개의 Java 파일 업로드 샘플이 있습니다.
패키지 설치
관련된 코드를 호출하기 전에 azure-iot-device 라이브러리를 설치해야 합니다.
pip install azure-iot-device
azure.storage.blob 패키지는 파일 업로드를 수행하는 데 사용됩니다.
pip install azure.storage.blob
디바이스 애플리케이션에서 파일 업로드
이 섹션에서는 Python용 Azure IoT SDK에서 IoTHubDeviceClient 클래스를 사용하여 디바이스에서 IoT Hub로 파일을 업로드하는 방법을 설명합니다.
라이브러리 가져오기
import os
from azure.iot.device import IoTHubDeviceClient
from azure.core.exceptions import AzureError
from azure.storage.blob import BlobClient
디바이스를 IoT Hub에 연결
디바이스 앱은 다음 방법을 사용하여 IoT Hub로 인증할 수 있습니다.
- X.509 인증서
- 공유 액세스 키
X.509 인증서를 사용하여 인증
X.509 인증서를 사용하여 디바이스를 IoT Hub에 연결하려면 다음을 수행합니다.
이 예제에서는 명확성을 위해 인증서 입력 매개 변수 값을 지역 변수로 보여 줍니다. 프로덕션 시스템에서 환경 변수 또는 다른 보안 스토리지 위치에 중요한 입력 매개 변수를 저장합니다. 예를 들어 호스트 이름 환경 변수를 읽는 데 사용합니다 os.getenv("HOSTNAME")
.
# The Azure IoT hub name
hostname = "xxxxx.azure-devices.net"
# The device that has been created on the portal using X509 CA signing or self-signing capabilities
device_id = "MyDevice"
# The X.509 certificate file name
cert_file = "~/certificates/certs/sensor-thl-001-device.cert.pfx"
key_file = "~/certificates/certs/sensor-thl-001-device.cert.key"
# The optional certificate pass phrase
pass_phrase = "1234"
x509 = X509(
cert_file,
key_file,
pass_phrase,
)
# The client object is used to interact with your Azure IoT hub.
device_client = IoTHubDeviceClient.create_from_x509_certificate(
hostname=hostname, device_id=device_id, x509=x509
)
# Connect to IoT Hub
await device_client.connect()
인증서 인증에 대한 자세한 내용은 다음을 참조하세요.
코드 샘플
디바이스 X.509 인증서 인증의 작업 샘플은 비동기 허브 시나리오에서 파일 이름이 x509로 끝나는 예제를 참조하세요.
공유 액세스 키를 사용하여 인증
디바이스를 IoT Hub에 연결하려면 다음을 수행합니다.
예시:
# Add your IoT hub primary connection string
CONNECTION_STRING = "{Device primary connection string}"
device_client = IoTHubDeviceClient.create_from_connection_string(CONNECTION_STRING)
# Connect the client
device_client.connect()
Blob Storage 정보 가져오기
get_storage_info_for_blob 호출하여 연결된 Azure Storage 계정에 대한 정보를 IoT Hub에서 가져옵니다. 이 정보에는 호스트 이름, 컨테이너 이름, blob 이름 및 SAS 토큰이 포함됩니다. 메서드는 get_storage_info_for_blob
메서드에 correlation_id
notify_blob_upload_status
사용되는 메서드도 반환합니다. 작업 correlation_id
중인 Blob을 표시하는 IoT Hub의 방법입니다.
# Get the storage info for the blob
PATH_TO_FILE = "{Full path to local file}"
blob_name = os.path.basename(PATH_TO_FILE)
blob_info = device_client.get_storage_info_for_blob(blob_name)
Blob Storage에 파일 업로드
Blob Storage에 파일을 업로드하려면 다음을 수행합니다.
- from_blob_url 사용하여 Blob URL에서 BlobClient 개체를 만듭니 다.
- upload_blob 호출하여 Blob Storage에 파일을 업로드합니다.
이 예제에서는 blob_info
구조를 구문 분석하여 BlobClient를 초기화하는 데 사용하는 URL을 만듭니다. 그런 다음 Blob Storage에 파일을 업로드하도록 호출 upload_blob
합니다.
try:
sas_url = "https://{}/{}/{}{}".format(
blob_info["hostName"],
blob_info["containerName"],
blob_info["blobName"],
blob_info["sasToken"]
)
print("\nUploading file: {} to Azure Storage as blob: {} in container {}\n".format(file_name, blob_info["blobName"], blob_info["containerName"]))
# Upload the specified file
with BlobClient.from_blob_url(sas_url) as blob_client:
with open(file_name, "rb") as f:
result = blob_client.upload_blob(f, overwrite=True)
return (True, result)
except FileNotFoundError as ex:
# catch file not found and add an HTTP status code to return in notification to IoT hub
ex.status_code = 404
return (False, ex)
except AzureError as ex:
# catch Azure errors that might result from the upload operation
return (False, ex)
IoT Hub에 업로드 상태 알림
notify_blob_upload_status 사용하여 Blob Storage 작업의 상태를 IoT Hub에 알립니다. 메서드에서 correlation_id
가져온 값을 전달합니다 get_storage_info_for_blob
. correlation_id
IoT Hub에서 파일 업로드 작업의 상태에 대한 알림을 수신 대기할 수 있는 모든 서비스에 알리는 데 사용됩니다.
이 예제에서는 IoT Hub에 파일 업로드 성공에 대해 알 수 있습니다.
device_client.notify_blob_upload_status(storage_info["correlationId"], True, 200, "OK: {}".format(PATH_TO_FILE)
디바이스 클라이언트 종료
클라이언트를 종료합니다. 이 메서드가 호출되면 클라이언트 호출을 추가로 시도하면 ClientError가 발생합니다.
device_client.shutdown()
SDK 파일 업로드 샘플
SDK에는 다음 두 개의 파일 업로드 샘플이 포함되어 있습니다.
개요
이 문서에서는 Node.js Azure IoT SDK를 사용하여 파일을 업로드하는 디바이스 앱을 만들고 백 엔드 서비스 애플리케이션이 파일 업로드 알림을 수신하는 방법을 설명합니다.
디바이스 애플리케이션 만들기
이 섹션에서는 Node.js 위해 Azure IoT SDK의 azure-iot-device 패키지를 사용하여 디바이스 에서 IoT Hub로 파일을 업로드하는 방법을 설명합니다.
SDK 패키지 설치
이 명령을 실행하여 개발 머신에 azure-iot-device 디바이스 SDK, azure-iot-device-mqtt 및 @azure/storage-blob 패키지를 설치합니다.
npm install azure-iot-device azure-iot-device-mqtt @azure/storage-blob --save
azure-iot-device 패키지에는 IoT 디바이스와 인터페이스하는 개체가 포함되어 있습니다.
디바이스에서 IoT Hub로 파일을 업로드하려면 다음 절차를 따르세요.
- 디바이스를 IoT Hub에 연결
- IoT Hub에서 Blob SAS(공유 액세스 서명) 토큰 가져오기
- Azure Storage에 파일 업로드
- IoT Hub에 파일 업로드 상태 알림 보내기
모듈 만들기
설치된 패키지를 사용하여 클라이언트, 프로토콜, 오류 및 경로 모듈을 만듭니다.
const Protocol = require('azure-iot-device-mqtt').Mqtt;
const errors = require('azure-iot-common').errors;
const path = require('path');
디바이스를 IoT Hub에 연결
디바이스 앱은 다음 방법을 사용하여 IoT Hub로 인증할 수 있습니다.
- X.509 인증서
- 공유 액세스 키
X.509 인증서를 사용하여 인증
X.509 인증서는 디바이스-IoT Hub 연결 전송에 연결됩니다.
X.509 인증서를 사용하여 디바이스-IoT Hub 연결을 구성하려면 다음을 수행합니다.
- fromConnectionString을 호출하여 디바이스 연결 문자열 및 전송 유형을 추가합니다. 디바이스 연결 문자열 추가하여
x509=true
인증서가 추가DeviceClientOptions
되었음을 나타냅니다. 예:HostName=xxxxx.azure-devices.net;DeviceId=Device-1;SharedAccessKey=xxxxxxxxxxxxx;x509=true
- 인증서 세부 정보를 사용하여 JSON 변수를 구성하고 DeviceClientOptions에 전달합니다.
- setOptions를 호출하여 클라이언트 전송에 X.509 인증서 및 키(및 선택적으로 암호)를 추가합니다.
- 디바이스에서 IoT Hub로의 연결을 열려면 열기를 호출합니다.
이 예제에서는 JSON 변수 내의 인증서 구성 정보를 보여줍니다. 인증 구성 options
이 전달되고 setOptions
연결을 사용하여 open
열립니다.
var options = {
cert: myX509Certificate,
key: myX509Key,
passphrase: passphrase,
http: {
receivePolicy: {
interval: 10
}
}
}
client.setOptions(options, callback);
client.open(connectCallback);
인증서 인증에 대한 자세한 내용은 다음을 참조하세요.
코드 샘플
디바이스 X.509 인증서 인증의 작업 샘플은 간단한 샘플 디바이스 X.509를 참조하세요.
공유 액세스 키를 사용하여 인증
전송 프로토콜 선택
Client
개체는 다음 프로토콜을 지원합니다.
Amqp
Http
-Http
를 사용할 때Client
인스턴스는 IoT Hub의 메시지를 자주(최소 25분마다) 확인합니다.Mqtt
MqttWs
AmqpWs
개발 머신에 필요한 전송 프로토콜을 설치합니다.
예를 들어 이 명령은 Amqp
프로토콜을 설치합니다.
npm install azure-iot-device-amqp --save
MQTT, AMQP, HTTPS 지원 간 차이점에 대한 자세한 내용은 클라우드-디바이스 통신 지침 및 통신 프로토콜 선택을 참조하세요.
클라이언트 개체 만들기
Client
설치된 패키지를 사용하여 개체를 만듭니다.
예시:
const Client = require('azure-iot-device').Client;
프로토콜 개체 만들기
Protocol
설치된 전송 패키지를 사용하여 개체를 만듭니다.
이 예제에서는 AMQP 프로토콜을 할당합니다.
const Protocol = require('azure-iot-device-amqp').Amqp;
디바이스 연결 문자열 및 전송 프로토콜 추가
ConnectionString을 호출하여 디바이스 연결 매개 변수를 제공합니다.
- connStr - 디바이스 연결 문자열.
- transportCtor - 전송 프로토콜입니다.
이 예제에서는 Amqp
전송 프로토콜을 사용합니다.
const deviceConnectionString = "{IoT hub device connection string}"
const Protocol = require('azure-iot-device-mqtt').Amqp;
let client = Client.fromConnectionString(deviceConnectionString, Protocol);
IoT Hub에 대한 연결 열기
열린 메서드를 사용하여 IoT 디바이스와 IoT Hub 간의 연결을 엽니다.
예시:
client.open(function(err) {
if (err) {
console.error('error connecting to hub: ' + err);
process.exit(1);
}
})
IoT Hub에서 SAS 토큰 가져오기
getBlobSharedAccessSignature를 사용하여 IoT Hub에서 연결된 스토리지 계정 SAS 토큰을 가져옵니다.
예시:
// make sure you set these environment variables prior to running the sample.
const localFilePath = process.env.PATH_TO_FILE;
const storageBlobName = path.basename(localFilePath);
const blobInfo = await client.getBlobSharedAccessSignature(storageBlobName);
if (!blobInfo) {
throw new errors.ArgumentError('Invalid upload parameters');
}
IoT Hub에 파일 업로드
디바이스에서 IoT Hub로 파일을 업로드하려면 다음을 수행합니다.
- 스트림 파이프라인 만들기
- Blob URL 생성
- Blob Storage에 파일 업로드를 위한 BlockBlobClient 만들기
- uploadFile을 호출하여 Blob Storage에 파일 업로드
- notifyBlobUploadStatus를 호출하여 업로드가 성공했거나 실패했음을 IoT Hub에 알립니다.
예시:
// Open the pipeline
const pipeline = newPipeline(new AnonymousCredential(), {
retryOptions: { maxTries: 4 },
telemetry: { value: 'HighLevelSample V1.0.0' }, // Customized telemetry string
keepAliveOptions: { enable: false }
});
// Construct the blob URL
const { hostName, containerName, blobName, sasToken } = blobInfo;
const blobUrl = `https://${hostName}/${containerName}/${blobName}${sasToken}`;
// Create the BlockBlobClient for file upload to Blob Storage
const blobClient = new BlockBlobClient(blobUrl, pipeline);
// Setup blank status notification arguments to be filled in on success/failure
let isSuccess;
let statusCode;
let statusDescription;
const uploadStatus = await blobClient.uploadFile(localFilePath);
console.log('uploadStreamToBlockBlob success');
try {
const uploadStatus = await blobClient.uploadFile(localFilePath);
console.log('uploadStreamToBlockBlob success');
// Save successful status notification arguments
isSuccess = true;
statusCode = uploadStatus._response.status;
statusDescription = uploadStatus._response.bodyAsText;
// Notify IoT hub of upload to blob status (success)
console.log('notifyBlobUploadStatus success');
}
catch (err) {
isSuccess = false;
statusCode = err.code;
statusDescription = err.message;
console.log('notifyBlobUploadStatus failed');
console.log(err);
}
// Send file upload status notification to IoT hub
await client.notifyBlobUploadStatus(blobInfo.correlationId, isSuccess, statusCode, statusDescription);
Blob Storage에 로컬 파일 업로드
컴퓨터에서 Blob Storage에 로컬 파일을 업로드할 수 있습니다.
const deviceClient = Client.fromConnectionString(deviceConnectionString, Protocol);
uploadToBlob(localFilePath, deviceClient)
.catch((err) => {
console.log(err);
})
.finally(() => {
process.exit();
});
SDK 파일 업로드 샘플
SDK에는 Blob 고급 샘플에 대한 업로드가 포함되어 있습니다.
백 엔드 애플리케이션 만들기
이 섹션에서는 백 엔드 애플리케이션에서 파일 업로드 알림을 받는 방법을 설명합니다.
ServiceClient 클래스에는 서비스에서 파일 업로드 알림을 받는 데 사용할 수 있는 메서드가 포함되어 있습니다.
서비스 SDK 패키지 설치
이 명령을 실행하여 개발 머신에 azure-iothub를 설치합니다.
npm install azure-iothub --save
IoT Hub에 연결
다음 방법을 사용하여 백 엔드 서비스를 IoT Hub에 연결할 수 있습니다.
- 공유 액세스 정책
- Microsoft Entra
Important
이 문서에서는 공유 액세스 서명을 사용하여 서비스에 연결하는 단계를 설명합니다. 이 인증 방법은 테스트와 평가에 편리하지만, Microsoft Entra ID나 관리 ID를 사용하여 서비스를 인증하는 것이 더 안전한 방식입니다. 자세한 내용은 보안 모범 사례 > 클라우드 보안을 참조하세요.
공유 액세스 정책을 사용하여 연결
fromConnectionString을 사용하여 IoT Hub에 연결합니다.
디바이스에서 파일을 업로드하려면 서비스에 서비스 연결 권한이 필요합니다. 기본적으로 모든 IoT Hub는 이 사용 권한을 부여하는 service라는 공유 액세스 정책을 사용하여 만듭니다.
매개 변수CreateFromConnectionString
로 서비스 공유 액세스 정책 연결 문자열 제공합니다. 공유 액세스 정책에 대한 자세한 내용은 공유 액세스 서명을 사용하여 IoT Hub에 대한 액세스 제어를 참조 하세요.
var Client = require('azure-iothub').Client;
var connectionString = '{IoT hub shared access policy connection string}';
var client = Client.fromConnectionString(connectionString);
Microsoft Entra를 사용하여 연결
Microsoft Entra를 사용하는 백 엔드 앱은 IoT Hub에 연결하기 전에 보안 토큰 자격 증명을 성공적으로 인증하고 가져와야 합니다. 이 토큰은 IoT Hub 연결 메서드에 전달됩니다. IoT Hub용 Microsoft Entra를 설정하고 사용하는 방법에 대한 일반적인 내용은 Microsoft Entra ID를 사용하여 IoT Hub에 대한 액세스 제어를 참조하세요.
Node.js SDK 인증에 대한 개요는 다음을 참조하세요.
Microsoft Entra 앱 구성
기본 인증 자격 증명에 대해 구성된 Microsoft Entra 앱을 설정해야 합니다. 앱에는 백 엔드 애플리케이션에서 인증하는 데 사용되는 클라이언트 암호와 같은 매개 변수가 포함되어 있습니다. 사용 가능한 앱 인증 구성은 다음과 같습니다.
- 클라이언트 암호
- 인증서
- 페더레이션 ID 자격 증명
Microsoft Entra 앱은 수행 중인 작업에 따라 특정 역할 권한이 필요할 수 있습니다. 예를 들어 IoT Hub 디바이스 및 모듈 쌍에 대한 읽기 및 쓰기 액세스를 사용하려면 IoT Hub 쌍 기여자가 필요합니다. 자세한 내용은 Azure RBAC 역할 할당을 사용하여 IoT Hub에 대한 액세스 관리를 참조하세요.
Microsoft Entra 앱 설정에 대한 자세한 내용은 빠른 시작: Microsoft ID 플랫폼 애플리케이션 등록을 참조하세요.
DefaultAzureCredential을 사용하여 인증
Microsoft Entra를 사용하여 백 엔드 애플리케이션을 인증하는 가장 쉬운 방법은 DefaultAzureCredential을 사용하는 것이지만 특정 TokenCredential
또는 구문 분석ChainedTokenCredential
된 방법을 포함하여 프로덕션 환경에서 다른 방법을 사용하는 것이 좋습니다. 편의상 이 섹션에서는 인증 사용 DefaultAzureCredential
및 클라이언트 비밀에 대해 설명합니다.
사용 DefaultAzureCredential
의 장단점에 대한 자세한 내용은 JavaScript용 Azure ID 클라이언트 라이브러리의 자격 증명 체인을 참조 하세요.
DefaultAzureCredential 은 다양한 인증 메커니즘을 지원하고 실행 중인 환경에 따라 적절한 자격 증명 유형을 결정합니다. 작업 자격 증명을 찾을 때까지 여러 자격 증명 형식을 순서대로 사용하려고 시도합니다.
Microsoft Entra에는 다음 패키지가 필요합니다.
npm install --save @azure/identity
이 예제에서는 Microsoft Entra 앱 등록 클라이언트 암호, 클라이언트 ID 및 테넌트 ID가 환경 변수에 추가되었습니다. 이러한 환경 변수는 애플리케이션을 인증하는 데 사용됩니다 DefaultAzureCredential
. 성공적인 Microsoft Entra 인증의 결과는 IoT Hub 연결 방법으로 전달되는 보안 토큰 자격 증명입니다.
import { DefaultAzureCredential } from "@azure/identity";
// Azure SDK clients accept the credential as a parameter
const credential = new DefaultAzureCredential();
그러면 결과 자격 증명 토큰을 fromTokenCredential로 전달하여 Microsoft Entra 자격 증명을 수락하는 모든 SDK 클라이언트에 대해 IoT Hub에 연결할 수 있습니다.
fromTokenCredential
에는 다음 두 개의 매개 변수가 필요합니다.
- Azure 서비스 URL - Azure 서비스 URL은 접두사 없이
https://
형식{Your Entra domain URL}.azure-devices.net
이어야 합니다. 예들 들어MyAzureDomain.azure-devices.net
입니다. - Azure 자격 증명 토큰
이 예제에서는 .를 사용하여 DefaultAzureCredential
Azure 자격 증명을 가져옵니다. 그런 다음 Azure 도메인 URL 및 자격 증명을 제공하여 Registry.fromTokenCredential
IoT Hub에 대한 연결을 만듭니다.
const { DefaultAzureCredential } = require("@azure/identity");
let Registry = require('azure-iothub').Registry;
// Define the client secret values
clientSecretValue = 'xxxxxxxxxxxxxxx'
clientID = 'xxxxxxxxxxxxxx'
tenantID = 'xxxxxxxxxxxxx'
// Set environment variables
process.env['AZURE_CLIENT_SECRET'] = clientSecretValue;
process.env['AZURE_CLIENT_ID'] = clientID;
process.env['AZURE_TENANT_ID'] = tenantID;
// Acquire a credential object
const credential = new DefaultAzureCredential()
// Create an instance of the IoTHub registry
hostName = 'MyAzureDomain.azure-devices.net';
let registry = Registry.fromTokenCredential(hostName,credential);
코드 샘플
Microsoft Entra 서비스 인증의 작업 샘플은 Azure ID 예제를 참조 하세요.
파일 업로드 알림 콜백 수신기 만들기
파일 업로드 알림 콜백 수신기를 만들려면 다음을 수행합니다.
- getFileNotificationReceiver를 호출 합니다. 알림 메시지를 받을 때 호출되는 파일 업로드 콜백 메서드의 이름을 제공합니다.
- 콜백 메서드에서 파일 업로드 알림을 처리합니다.
이 예제에서는 알림 콜백 수신기를 receiveFileUploadNotification
설정합니다. 수신자가 파일 업로드 상태 정보를 해석하고 상태 메시지를 콘솔에 출력합니다.
//Set up the receiveFileUploadNotification notification message callback receiver
serviceClient.getFileNotificationReceiver(function receiveFileUploadNotification(err, receiver){
if (err) {
console.error('error getting the file notification receiver: ' + err.toString());
} else {
receiver.on('message', function (msg) {
console.log('File upload from device:')
console.log(msg.getData().toString('utf-8'));
receiver.complete(msg, function (err) {
if (err) {
console.error('Could not finish the upload: ' + err.message);
} else {
console.log('Upload complete');
}
});
});
}
SDK 파일 업로드 알림 샘플
SDK에는 파일 업로드 샘플이 포함되어 있습니다.