Java 用 Azure ライブラリを使った認証Authenticate with the Azure libraries for Java

接続文字列を使ってサービスに接続するConnect to services with connection strings

この記事では、Java 用 Azure ライブラリを使用して認証する方法について説明します。This article shows how to authenticate with the Azure libraries for Java. ほとんどの Azure サービス ライブラリでは、接続文字列またはセキュリティ キーが認証に使用されます。Most Azure service libraries use a connection string or secure key for authentication. たとえば SQL Database では、JDBC 接続文字列にユーザー名とパスワードの情報が格納されます。For example, SQL Database includes username and password information in the JDBC connection string:

String url = "jdbc:sqlserver://myazuredb.database.windows.net:1433;" + 
        "database=testjavadb;" + 
        "user=myazdbuser;" +
        "password=myazdbpass;" +
        "encrypt=true;hostNameInCertificate=*.database.windows.net;loginTimeout=30;";
        Connection conn = DriverManager.getConnection(url);

Azure Storage でのアプリケーションの承認には、ストレージ キーが使用されます。Azure Storage uses a storage key to authorize the application:

final String storageConnection = "DefaultEndpointsProtocol=https;"
        + "AccountName=" + storageName 
        + ";AccountKey=" + storageKey
        + ";EndpointSuffix=core.windows.net";

他の Azure サービス (Azure Cosmos DBRedis CacheService Bus など) に対する認証には、サービスの接続文字列が使用されます。Service connection strings are used to authenticate to other Azure services like Azure Cosmos DB, Redis Cache, and Service Bus. この接続文字列は、Azure Portal または CLI を使って取得できます。You can get the connection strings using the Azure portal or the CLI. また、コード内から Azure Management Libraries for Java を使用し、リソースを照会することによって接続文字列を作成することもできます。You can also use the Azure management libraries for Java to query resources to build connection strings in your code.

たとえば次のコードでは、管理ライブラリを使ってストレージ アカウントの接続文字列を作成しています。For example, this code uses the management libraries to create a storage account connection string:

// create a new storage account
StorageAccount storage = azure.storageAccounts().getByResourceGroup("myResourceGroup","myStorageAccount");

// create a storage container to hold the file
List<StorageAccountKey> keys = storage.getKeys();
final String storageConnection = "DefaultEndpointsProtocol=https;"
        + "AccountName=" + storage.name()
        + ";AccountKey=" + keys.get(0).value()
        + ";EndpointSuffix=core.windows.net";

その他のライブラリでは、サービス プリンシパルを使ってアプリケーションを実行し、許可された資格情報で動作することをアプリケーションに承認する必要があります。Other libraries require your application to run with a service principal authorizing the application to run with granted credentials. この構成は、以下に示した管理ライブラリのオブジェクト ベースの認証ステップと似ています。This configuration is similar to the object-based authentication steps for the management library listed below.

Azure Management Libraries for Java を使って認証するAuthenticate with the Azure management libraries for Java

Java 管理ライブラリを使ってリソースの作成と管理を行うときに、Azure に対してアプリケーションを認証する方法としては 2 つの選択肢があります。Two options are available to authenticate your application with Azure when using the Java management libraries to create and manage resources.

ApplicationTokenCredentials オブジェクトを使った認証Authenticate with an ApplicationTokenCredentials object

コード内で ApplicationTokenCredentials のインスタンスを作成し、最上位の Azure オブジェクトにサービス プリンシパルの資格情報を渡します。Create an instance of ApplicationTokenCredentials to supply the service principal credentials to the top-level Azure object from inside your code.

import com.microsoft.azure.credentials.ApplicationTokenCredentials;
import com.microsoft.azure.AzureEnvironment;

// ...

ApplicationTokenCredentials credentials = new ApplicationTokenCredentials(client, 
        tenant,
        key, 
        AzureEnvironment.AZURE);
        
Azure azure = Azure
        .configure()
        .withLogLevel(LogLevel.NONE)
        .authenticate(credentials)
        .withDefaultSubscription();

clienttenantkey は、ファイル ベースの認証で使うサービス プリンシパルと同じ値です。The client, tenant and key are the same service principal values used with file-based authentication. AzureEnvironment.AZURE の値は、Azure パブリック クラウドに対する資格情報を作成するものです。The AzureEnvironment.AZURE value creates credentials against the Azure public cloud. 別のクラウド (AzureEnvironment.AZURE_GERMANY など) にアクセスする必要がある場合は、異なる値に変更してください。Change this to a different value if you need to access another cloud (for example, AzureEnvironment.AZURE_GERMANY).

サービス プリンシパルの値は、環境変数から読み取るか、シークレット管理ストア (Key Vault など) から読み取ります。Read the service principal values from environment variables or a secret management store like Key Vault. バージョン コントロール履歴で意図せず資格情報が漏えいするのを防ぐため、これらの値をコード内でクリア テキスト文字列として設定することは避けてください。Avoid setting these values as cleartext strings in your code to prevent accidentally exposing credentials in your version control history.

ファイル ベースの認証 (プレビュー)File based authentication (Preview)

最も簡単な認証方法は、Azure サービス プリンシパルの資格情報を含んだプロパティ ファイルを次の形式で作成することです。The simplest way to authenticate is to create a properties file that contains credentials for an Azure service principal using the following format:

# sample management library properties file
subscription=########-####-####-####-############
client=########-####-####-####-############
key=XXXXXXXXXXXXXXXX
tenant=########-####-####-####-############
managementURI=https\://management.core.windows.net/
baseURL=https\://management.azure.com/
authURL=https\://login.windows.net/
graphURL=https\://graph.windows.net/
  • subscription: Azure CLI 2.0 の az account show から得られる id 値を使用します。subscription: use the id value from az account show in the Azure CLI 2.0.
  • client: アプリケーションを実行するために作成したサービス プリンシパルの出力から得られる appId 値を使用します。client: use the appId value from the output taken from a service principal created to run the application. アプリのサービス プリンシパルがない場合は、Azure CLI 2.0 で作成してください。If you don't have a service principal for your app, create one with the Azure CLI 2.0.
  • key: サービス プリンシパル作成 CLI の出力から得られる password 値を使用します。key: use the password value from the service principal create CLI output
  • tenant: サービス プリンシパル作成 CLI の出力から得られる tenant 値を使用します。tenant: use the tenant value from the service principal create CLI output

このファイルは、コードで読み取ることができるシステム上の安全な場所に保存してください。Save this file in a secure location on your system where your code can read it. ご利用のシェルから、このファイルの完全なパスを保持する環境変数を設定します。Set an environment variable with the full path to the file in your shell:

export AZURE_AUTH_LOCATION=/Users/raisa/azureauth.properties

ライブラリを使用するための起点となる Azure オブジェクトを作成します。Create the entry point Azure object to start working with the libraries. プロパティ ファイルの場所は、環境変数から読み取ります。Read the location of the properties file through the environment variable.

// pull in the location of the authentication properties file from the environment 
final File credFile = new File(System.getenv("AZURE_AUTH_LOCATION"));

Azure azure = Azure
        .configure()
        .withLogLevel(LogLevel.NONE)
        .authenticate(credFile)
        .withDefaultSubscription();