クイックスタート: Azure SDK for .NET を使って Azure Managed CCF リソースを作成する
Azure Managed CCF (Managed CCF) は、機密性の高いアプリケーションをデプロイするための、高度なセキュリティで保護された新しいサービスです。 Managed CCF の詳細と使用例については、「Azure Managed Confidential Consortium Framework について」を参照してください。
このクイックスタートでは、.NET クライアント管理ライブラリを使って Managed CCF リソースを作成する方法について説明します。
Azure サブスクリプションをお持ちでない場合は、開始する前に Azure 無料アカウントを作成してください。
API リファレンスのドキュメント | ライブラリのソース コード | パッケージ (NuGet)
前提条件
- Azure サブスクリプション - 無料アカウントを作成します。
- Azure SDK for .NET でサポートされている .NET バージョン。
- Windows または Linux を実行しているコンピューターでの OpenSSL。
セットアップ
新しい .NET コンソール アプリを作成する
コマンド シェルで、次のコマンドを実行して、
managedccf-app
という名前のプロジェクトを作成します。dotnet new console --name managedccf-app
新しく作成した managedccf-app ディレクトリに移動し、次のコマンドを実行してプロジェクトをビルドします。
dotnet build
ビルドの出力に警告やエラーが含まれないようにする必要があります。
Build succeeded. 0 Warning(s) 0 Error(s)
パッケージをインストールする
NuGet を使って、.NET 用 Azure Managed CCF クライアント ライブラリをインストールします。
dotnet add package Azure.ResourceManager.ConfidentialLedger --version 1.1.0-beta.2
このクイックスタートでは、Azure Identity 用 Azure SDK クライアント ライブラリもインストールする必要があります。
dotnet add package Azure.Identity
リソース グループを作成する
リソース グループとは、Azure リソースのデプロイと管理に使用する論理コンテナーです。 Azure PowerShell の New-AzResourceGroup コマンドレットを使って、myResourceGroup という名前のリソース グループを southcentralus の場所に作成します。
New-AzResourceGroup -Name "myResourceGroup" -Location "SouthCentralUS"
リソース プロバイダーの登録
リソースを作成する前に、Azure Managed CCF リソースの種類をサブスクリプションに登録する必要があります。
az feature registration create --namespace Microsoft.ConfidentialLedger --name ManagedCCF
az provider register --namespace Microsoft.ConfidentialLedger
メンバーの作成
メンバーのキーの組を生成します。 下記のコマンドが完了すると、メンバーの公開キーが member0_cert.pem
に保存され、秘密キーが member0_privk.pem
に保存されます。
openssl ecparam -out "member0_privk.pem" -name "secp384r1" -genkey
openssl req -new -key "member0_privk.pem" -x509 -nodes -days 365 -out "member0_cert.pem" -"sha384" -subj=/CN="member0"
.NET アプリケーションを作成する
管理プレーン クライアント ライブラリを使う
Azure SDK for .NET (azure/arm-confidentialledger) を使うと、Managed CCF リソースに対する操作 (作成と削除、サブスクリプションに関連付けられたリソースの一覧表示、特定のリソースの詳細表示など) を行うことができます。 次のコードを使うと、Managed CCF リソースのプロパティを作成して表示できます。
Program.cs の先頭に次のディレクティブを追加します。
using System;
using System.Collections.Generic;
using System.Threading.Tasks;
using Azure;
using Azure.Core;
using Azure.Identity;
using Azure.ResourceManager;
using Azure.ResourceManager.ConfidentialLedger;
using Azure.ResourceManager.ConfidentialLedger.Models;
using Azure.ResourceManager.Resources;
クライアントの認証と作成
このクイックスタートでは、ログイン ユーザーを使って Azure Managed CCF に対する認証を行います。ローカル開発ではこれが推奨される方法です。 この例では、Azure ID ライブラリの "DefaultAzureCredential()" クラスを使っています。環境や使うオプションが変わっても、同じコードを使って ID を提供することができます。
// get your azure access token, for more details of how Azure SDK get your access token, please refer to https://learn.microsoft.com/en-us/dotnet/azure/sdk/authentication?tabs=command-line
TokenCredential cred = new DefaultAzureCredential();
Azure Resource Manager クライアントを作成し、トークン資格情報を使って認証します。
// authenticate your client
ArmClient client = new ArmClient(cred);
Managed CCF リソースを作成する
// this example assumes you already have this ResourceGroupResource created on azure
// for more information of creating ResourceGroupResource, please refer to the document of ResourceGroupResource
string subscriptionId = "0000000-0000-0000-0000-000000000001";
string resourceGroupName = "myResourceGroup";
ResourceIdentifier resourceGroupResourceId = ResourceGroupResource.CreateResourceIdentifier(subscriptionId, resourceGroupName);
ResourceGroupResource resourceGroupResource = client.GetResourceGroupResource(resourceGroupResourceId);
// get the collection of this ManagedCcfResource
ManagedCcfCollection collection = resourceGroupResource.GetManagedCcfs();
// invoke the operation
string appName = "confidentialbillingapp";
ManagedCcfData data = new ManagedCcfData(new AzureLocation("SouthCentralUS"))
{
Properties = new ManagedCcfProperties()
{
MemberIdentityCertificates =
{
new ConfidentialLedgerMemberIdentityCertificate()
{
Certificate = "-----BEGIN CERTIFICATE-----MIIBsjCCATigA...LjYAGDSGi7NJnSkA-----END CERTIFICATE-----",
Encryptionkey = "",
Tags = BinaryData.FromObjectAsJson(new Dictionary<string, object>()
{
["additionalProps1"] = "additional properties"
}),
}
},
DeploymentType = new ConfidentialLedgerDeploymentType()
{
LanguageRuntime = ConfidentialLedgerLanguageRuntime.JS,
AppSourceUri = new Uri(""),
},
NodeCount = 3,
},
Tags =
{
["additionalProps1"] = "additional properties",
},
};
ArmOperation<ManagedCcfResource> lro = await collection.CreateOrUpdateAsync(WaitUntil.Completed, appName, data);
ManagedCcfResource result = lro.Value;
// the variable result is a resource, you could call other operations on this instance as well
// but just for demo, we get its data from this resource instance
ManagedCcfData resourceData = result.Data;
// for demo we just print out the id
Console.WriteLine($"Succeeded on id: {resourceData.Id}");
Managed CCF リソースのプロパティを表示する
次のコードを使うと、Managed CCF リソースを取得し、そのプロパティを出力できます。
// this example assumes you already have this ResourceGroupResource created on azure
// for more information of creating ResourceGroupResource, please refer to the document of ResourceGroupResource
string subscriptionId = "0000000-0000-0000-0000-000000000001";
string resourceGroupName = "myResourceGroup";
ResourceIdentifier resourceGroupResourceId = ResourceGroupResource.CreateResourceIdentifier(subscriptionId, resourceGroupName);
ResourceGroupResource resourceGroupResource = client.GetResourceGroupResource(resourceGroupResourceId);
// get the collection of this ManagedCcfResource
ManagedCcfCollection collection = resourceGroupResource.GetManagedCcfs();
// invoke the operation
string appName = "confidentialbillingapp";
ManagedCcfResource result = await collection.GetAsync(appName);
// the variable result is a resource, you could call other operations on this instance as well
// but just for demo, we get its data from this resource instance
ManagedCcfData resourceData = result.Data;
// for demo we just print out the id
Console.WriteLine($"Succeeded on id: {resourceData.Id}");
リソース グループ内の Managed CCF リソースを一覧表示する
次のコードを使うと、リソース グループ内の Managed CCF リソースを取得できます。
// this example assumes you already have this ResourceGroupResource created on azure
// for more information of creating ResourceGroupResource, please refer to the document of ResourceGroupResource
string subscriptionId = "0000000-0000-0000-0000-000000000001";
string resourceGroupName = "myResourceGroup";
ResourceIdentifier resourceGroupResourceId = ResourceGroupResource.CreateResourceIdentifier(subscriptionId, resourceGroupName);
ResourceGroupResource resourceGroupResource = client.GetResourceGroupResource(resourceGroupResourceId);
// get the collection of this ManagedCcfResource
ManagedCcfCollection collection = resourceGroupResource.GetManagedCcfs();
// invoke the operation and iterate over the result
await foreach (ManagedCcfResource item in collection.GetAllAsync())
{
// the variable item is a resource, you could call other operations on this instance as well
// but just for demo, we get its data from this resource instance
ManagedCcfData resourceData = item.Data;
// for demo we just print out the id
Console.WriteLine($"Succeeded on id: {resourceData.Id}");
}
Console.WriteLine($"Succeeded");
サブスクリプション内の Managed CCF リソースを一覧表示する
次のコードを使うと、サブスクリプション内の Managed CCF リソースを取得できます。
// this example assumes you already have this SubscriptionResource created on azure
// for more information of creating SubscriptionResource, please refer to the document of SubscriptionResource
string subscriptionId = "0000000-0000-0000-0000-000000000001";
ResourceIdentifier subscriptionResourceId = SubscriptionResource.CreateResourceIdentifier(subscriptionId);
SubscriptionResource subscriptionResource = client.GetSubscriptionResource(subscriptionResourceId);
// invoke the operation and iterate over the result
await foreach (ManagedCcfResource item in subscriptionResource.GetManagedCcfsAsync())
{
// the variable item is a resource, you could call other operations on this instance as well
// but just for demo, we get its data from this resource instance
ManagedCcfData resourceData = item.Data;
// for demo we just print out the id
Console.WriteLine($"Succeeded on id: {resourceData.Id}");
}
Console.WriteLine($"Succeeded");
リソースをクリーンアップする
他の Managed CCF の記事には、このクイックスタートに基づいているものがあります。 後続のクイック スタートおよびチュートリアルを引き続き実行する場合は、これらのリソースをそのまま残しておくことをお勧めします。
それ以外の場合は、この記事で作成したリソースの操作が完了したら、Azure CLI の az group delete コマンドを使って、リソース グループとそれに含まれるすべてのリソースを削除します。
az group delete --resource-group myResourceGroup
次のステップ
このクイックスタートでは、Azure Python SDK for Confidential Ledger を使って Managed CCF リソースを作成しました。 Azure Managed CCF の詳細と、これをアプリケーションと統合する方法については、続けて以下の記事を参照してください。