サービス プリンシパルは、非対話型認証を必要とするアプリケーションと自動化されたシナリオに対して AzCopy 操作を承認する安全な方法を提供します。 この認証方法は、マネージド ID を使用できない Azure の外部で実行されている継続的インテグレーションおよび継続的デプロイ パイプライン、スケジュールされたタスク、アプリケーションに最適です。
この記事では、クライアント シークレットまたは証明書でサービス プリンシパルを使用して AzCopy を認証する方法について説明します。 環境変数、AzCopy ログイン コマンド、または既存の Azure CLI または Azure PowerShell セッションを利用して認証を構成する方法について説明します。
注
サービス プリンシパルはクロスプラットフォーム シナリオに柔軟性を提供しますが、セキュリティを強化し、資格情報管理を簡素化するために、Azure リソースで実行するときにマネージド ID を使用することをお勧めします。 AzCopy へのアクセスを承認するその他の方法については、「 AzCopy の承認」を参照してください。
ロールの割り当てを確認する
サービス プリンシパルに、目的の操作に必要な Azure ロールがあることを確認します。
ダウンロード操作には、 ストレージ BLOB データ リーダー (Blob Storage) または ストレージ ファイル データ特権リーダー (Azure Files) を使用します。
アップロード操作では、 ストレージ BLOB データ共同作成者 または ストレージ BLOB データ所有者 (Blob Storage) または ストレージ ファイル データ特権共同作成者 (Azure Files) を使用します。
ロールの割り当て手順については、「 BLOB データ (Blob Storage) へのアクセス用に Azure ロールを割り当てる 」または Azure portal (Azure Files) でファイル データへのアクセスを承認する方法を選択 する方法を参照してください。
注
ロールの割り当てが反映されるまでに最大 5 分かかることがあります。
階層型名前空間を持つアカウント内の BLOB を転送する場合は、ターゲット コンテナーまたはディレクトリのアクセス制御リスト (ACL) にセキュリティ プリンシパルを追加する場合、これらのロールのいずれかをセキュリティ プリンシパルに割り当てる必要はありません。 ACL では、ご自分のセキュリティ プリンシパルには、ターゲット ディレクトリの書き込みアクセス許可と、コンテナーおよび各親ディレクトリの実行アクセス許可が必要になります。 詳細については、「Azure Data Lake Storage のアクセス制御モデル」を参照してください。
環境変数を使用して承認する
アクセスを承認するには、メモリ内環境変数を設定します。 次に、任意の AzCopy コマンドを実行します。 AzCopy は、操作を完了するために必要な認証トークンを取得します。 操作が完了すると、トークンがメモリから消えます。
AzCopy は、ユーザーが指定した資格情報を使って OAuth トークンを取得します。 または、AzCopy は、Azure CLI または Azure PowerShell のアクティブなセッションの OAuth トークンを使うこともできます。
このオプションは、特にオンプレミスで実行する場合に、ユーザーの操作なしで実行されるスクリプト内で AzCopy を使用する場合に最適です。 Azure で実行されている VM で AzCopy を実行する場合、マネージド サービス ID を管理しやすくなります。 詳細については、この記事の 「マネージド ID を使用して AzCopy へのアクセスを承認する」 セクションを参照してください。
注意事項
Microsoft では、使用可能な最も安全な認証フローを使用することをお勧めします。 この手順で説明する認証フローでは、アプリケーションに非常に高い信頼が必要であり、他のフローに存在しないリスクが伴います。 このフローは、マネージド ID など、より安全な他のフローが実行できない場合にのみ使用します。
アカウントにサインインするには、クライアント シークレットを使用するか、サービス プリンシパルのアプリ登録に関連付けられている証明書のパスワードを使用します。
サービス プリンシパルの作成について詳しくは、「方法: リソースにアクセスできる Microsoft Entra アプリケーションとサービス プリンシパルをポータルで作成する」をご覧ください。
サービス プリンシパル全般の詳細については、「Microsoft Entra ID のアプリケーション オブジェクトとサービス プリンシパル オブジェクト」を参照してください
クライアント シークレットを使用して、サービス プリンシパル承認する
次のコマンドを入力し、Enter キーを押します。
export AZCOPY_AUTO_LOGIN_TYPE=SPN
export AZCOPY_SPA_APPLICATION_ID=<application-id>
export AZCOPY_SPA_CLIENT_SECRET=<client-secret>
export AZCOPY_TENANT_ID=<tenant-id>
<application-id> プレースホルダーを、ご自分のサービス プリンシパルのアプリ登録のアプリケーション ID に置き換えます。
<tenant-id> プレースホルダーを、ストレージ アカウントが属する組織のテナント ID に置き換えます。 アプリケーション ID とテナント ID を見つけるには、「 アプリケーションにサインインする」を参照してください。
<client-secret> プレースホルダーをクライアント シークレットに置き換えます。 クライアント シークレットを取得するには、「 新しいクライアント シークレットを作成する」を参照してください。
注
プロンプトを使用して、ユーザーからパスワードを収集することを検討してください。 このようにすると、パスワードはコマンド履歴に表示されません。
次に、azcopy コマンド (azcopy list https://contoso.blob.core.windows.net など) を実行します。
証明書を使用してサービス プリンシパルを承認する
承認に独自の資格情報を使用する場合は、アプリの登録に証明書をアップロードし、その証明書を使用してサインインできます。 証明書をアップロードする方法については、「認証の 設定」を参照してください。
証明書をアプリ登録にアップロードするだけでなく、AzCopy が実行されているコンピューターまたは VM に保存された証明書のコピーも必要です。 この証明書のコピーは、.PFX または .PEM 形式で、秘密キーが含まれている必要があります。 秘密キーはパスワードで保護する必要があります。 Windows を使用していて、ご使用の証明書が証明書ストア内にのみ存在する場合は、必ず、その証明書 (秘密キーを含む) を PFX ファイルにエクスポートしてください。 ガイダンスについては、「Export-PfxCertificate」を参照してください。
次のコマンドを入力し、Enter キーを押します。
export AZCOPY_AUTO_LOGIN_TYPE=SPN
export AZCOPY_SPA_APPLICATION_ID=<application-id>
export AZCOPY_SPA_CERT_PATH=<path-to-certificate-file>
export AZCOPY_SPA_CERT_PASSWORD=<certificate-password>
export AZCOPY_TENANT_ID=<tenant-id>
<application-id> プレースホルダーを、ご自分のサービス プリンシパルのアプリ登録のアプリケーション ID に置き換えます。
<tenant-id> プレースホルダーを、ストレージ アカウントが属する組織のテナント ID に置き換えます。 アプリケーション ID とテナント ID を見つけるには、「 アプリケーションにサインインする」を参照してください。
<path-to-certificate-file> プレースホルダーを、証明書ファイルの相対または完全修飾パスに置き換えます。 AzCopy は、この証明書のパスを保存しますが、証明書のコピーは保存しません。そのため、必ず所定の場所にその証明書を保持してください。
<certificate-password> プレースホルダーを証明書のパスワードに置き換えます。
注
プロンプトを使用して、ユーザーからパスワードを収集することを検討してください。 このようにすると、パスワードはコマンド履歴に表示されません。
次に、azcopy コマンド (azcopy list https://contoso.blob.core.windows.net など) を実行します。
AzCopy login コマンドを使用して承認する
メモリ内変数を使用する代わりに、azcopy login コマンドを使用してアクセスを承認できます。
azcopy login コマンドによって OAuth トークンが取得され、そのトークンがシステムのシークレット ストアに配置されます。 オペレーティング システムに Linux キーリングなどのシークレット ストアがない場合は、トークンを配置する場所がないため、azcopy login コマンドは機能しません。
サービス プリンシパルを承認する
スクリプトを実行する前に、サービス プリンシパルの資格情報を AzCopy に提供できるように、少なくとも 1 回は対話形式でサインインする必要があります。 AzCopy は、これらの資格情報をセキュリティで保護された暗号化されたファイルに格納するため、スクリプトでその機密情報を提供する必要はありません。
アカウントにサインインするには、クライアント シークレットを使用するか、サービス プリンシパルのアプリ登録に関連付けられている証明書のパスワードを使用します。
サービス プリンシパルの作成について詳しくは、「方法: リソースにアクセスできる Microsoft Entra アプリケーションとサービス プリンシパルをポータルで作成する」をご覧ください。
注意事項
Microsoft では、使用可能な最も安全な認証フローを使用することをお勧めします。 この手順で説明する認証フローでは、アプリケーションに非常に高い信頼が必要であり、他のフローに存在しないリスクが伴います。 このフローは、マネージド ID など、より安全な他のフローが実行できない場合にのみ使用します。
クライアント シークレットを使用して、サービス プリンシパル承認する
まず、AZCOPY_SPA_CLIENT_SECRET 環境変数を、ご自分のサービス プリンシパルのアプリ登録のクライアント シークレットに設定します。 クライアント シークレットを取得するには、「 新しいクライアント シークレットを作成する」を参照してください。
注
この値は、必ず、ご使用のオペレーティング システムの環境変数の設定ではなく、ご使用のコマンド プロンプトから設定します。 そうすることで、この値を現在のセッションでのみ使用できるようになります。
この例では、これを PowerShell で実行する方法を示しています。
$env:AZCOPY_SPA_CLIENT_SECRET="$(Read-Host -prompt "Enter key")"
注
この例で示すように、プロンプトを使用することを検討してください。 そうすると、ご自分のパスワードがご使用のコンソールのコマンド履歴に表示されません。
次に、以下のコマンドを入力し、Enter キーを押します。
azcopy login --service-principal --application-id application-id --tenant-id=tenant-id
application-id プレースホルダーを、ご自分のサービス プリンシパルのアプリ登録のアプリケーション ID に置き換えます。
<tenant-id> プレースホルダーを、ストレージ アカウントが属する組織のテナント ID に置き換えます。 アプリケーション ID とテナント ID を見つけるには、「 アプリケーションにサインインする」を参照してください。
証明書を使用してサービス プリンシパルを承認する
承認に独自の資格情報を使用する場合は、アプリの登録に証明書をアップロードし、その証明書を使用してサインインできます。 証明書をアップロードする方法については、「認証の 設定」を参照してください。
証明書をアプリ登録にアップロードするだけでなく、AzCopy が実行されているコンピューターまたは VM に保存された証明書のコピーも必要です。 この証明書のコピーは、.PFX または .PEM 形式で、秘密キーが含まれている必要があります。 秘密キーはパスワードで保護する必要があります。 Windows を使用していて、ご使用の証明書が証明書ストア内にのみ存在する場合は、必ず、その証明書 (秘密キーを含む) を PFX ファイルにエクスポートしてください。 ガイダンスについては、「Export-PfxCertificate」を参照してください。
次に、AZCOPY_SPA_CERT_PASSWORD 環境変数を、証明書のパスワードに設定します。
注
この値は、必ず、ご使用のオペレーティング システムの環境変数の設定ではなく、ご使用のコマンド プロンプトから設定します。 そうすることで、この値を現在のセッションでのみ使用できるようになります。
この例では、このタスクを PowerShell で実行する方法を示しています。
$env:AZCOPY_SPA_CERT_PASSWORD="$(Read-Host -prompt "Enter key")"
次に、以下のコマンドを入力し、Enter キーを押します。
azcopy login --service-principal --application-id application-id --certificate-path <path-to-certificate-file> --tenant-id=<tenant-id>
application-id プレースホルダーを、ご自分のサービス プリンシパルのアプリ登録のアプリケーション ID に置き換えます。
tenant-id プレースホルダーを、ストレージ アカウントが属する組織のテナント ID に置き換えます。 アプリケーション ID とテナント ID を見つけるには、「 アプリケーションにサインインする」を参照してください。
<path-to-certificate-file> プレースホルダーを、証明書ファイルの相対または完全修飾パスに置き換えます。 AzCopy は、この証明書のパスを保存しますが、証明書のコピーは保存しません。そのため、必ず所定の場所にその証明書を保持してください。
注
この例で示すように、プロンプトを使用することを検討してください。 そうすると、ご自分のパスワードがご使用のコンソールのコマンド履歴に表示されません。
Azure CLI を使用して認可を行う
Azure CLI を使用してサインインすると、Azure CLI は、AzCopy が操作の承認に使用する OAuth トークンを取得します。
AzCopy がそのトークンを使用できるようにするには、次のコマンドを入力して Enter キーを押します。
Azure CLI を使用してサインインする方法の詳細については、「Azure CLI を 使用してサービス プリンシパルを使用して Azure にサインインする」を参照してください。
Azure PowerShell を使用して認可を行う
Azure PowerShell を使用してサインインすると、Azure PowerShell は、AzCopy が操作の承認に使用する OAuth トークンを取得します。
AzCopy がそのトークンを使用できるようにするには、次のコマンドを入力して Enter キーを押します。
$Env:AZCOPY_AUTO_LOGIN_TYPE="PSCRED"
$Env:AZCOPY_TENANT_ID="<tenant-id>"
Azure PowerShell でサインインする方法の詳細については、「 サービス プリンシパルを使用したログイン」を参照してください。
次のステップ
AzCopy の詳細については、「 AzCopy の概要」を参照してください。
質問、問題、または一般的なフィードバックがある場合は、 GitHub で送信してください。