次の方法で共有


財務と運用のストレージ アカウントのセキュリティ更新プログラム

この記事では、財務およびオペレーション ストレージ アカウントの最新のセキュリティ強化について説明します。

よくあるご質問

開発者のコンピュータ/顧客がホストする環境で、"有効なストレージの接続文字列のフェッチが無効になっています" というエラーが表示されます。このエラーをどのように修正できますか。

パブリック メソッド Microsoft.Dynamics.Clx.ServicesWrapper.CloudInfrastructure::GetCsuStorageConnectionString() は廃止されました。 詳細は、パブリック API GetCsuStorageConnectionString を介したストレージ アカウントの接続文字列の共有のサポート終了をご覧ください。

フライトが既定で false に設定されている場合、問題は、開発者環境または顧客がホストする環境 (CHE) に変更を配置するときに発生します。 この場合、開発者コンピュータで次のエラーが発生します。

EnableSharingOfValidStorageConnectionString は false です。 有効な記憶域接続文字列のフェッチが無効になりました。

このエラーが表示された場合、次の手順に従います。

  1. Microsoft SQL Server Management Studio (SSMS) で、次のクエリを実行します。

    declare @flightName NVARCHAR(100) = 'EnableSharingOfValidStorageConnectionString';
    IF NOT EXISTS (SELECT TOP 1 1 FROM SysFlighting WHERE flightName = @flightName)
    INSERT INTO SYSFLIGHTING(FLIGHTNAME,ENABLED, FLIGHTSERVICEID,PARTITION)
    SELECT @flightName, 1, 12719367,RECID FROM DBO.[PARTITIONS];
    ELSE
    UPDATE SysFlighting SET enabled = 1, flightServiceId = 12719367 WHERE flightName = @flightName;
    select * from SysFlighting where flightName = 'EnableSharingOfValidStorageConnectionString';
    
  2. CHE で、Application Object Server (AOS) およびバッチ サービスを再起動する必要があります。

ストレージ アカウントへの接続に使用されるマネージド ID はどれですか。

財務と運用環境は、ストレージ アカウントに接続するために使用されるマネージド ID の詳細には関連付けされません。 また、プラットフォーム ランタイムは、管理された ID 情報にアクセスできません。

ID を利用できない場合、プラットフォーム コードはどのようにマネージド ID を使用してストレージ アカウントに接続しますか。

TokenCredential オブジェクトとトークンの実装は、裏で実行されているサービスを使用して定期的に更新されます。

以前は、接続文字列はストレージ アカウントに対するほとんどすべての操作を行うための無制限のアクセスを許可していました。 ロールベースのアクセス制御 (RBAC) とマネージド ID の実装後、どのアクセス許可が現在制限されている、または無効になっていますか。

データ 面内の操作を実行するために必要なすべてのアクセス許可を付与します。 コントロール プレーンのコンテナー、キュー、およびテーブルに関連するアクセス許可も提供されます。 ただし、記憶域アカウントのレベルのアクセス許可とネットワーク関連のアクセス許可の一部は制限されます。

EnableSharingOfValidStorageConnectionString フライトが有効でない場合、CloudInfrastructure.GetCsuStorageConnectionString() はエラーをスローしますか。

はい。 GetCsuStorageConnectionString() API を削除する予定です。 ストレージ アカウントとの対話には、CloudStorageAccountBlobServiceClient、または SharedServiceUnitStorage が返す TableServiceClient オブジェクト を使用することをお勧めします。

SharedServiceUnitStorage で次の API を利用できます:

  • public CloudStorageAccount GetSharedServiceUnitStorageAccount()
  • public TableServiceClient GetSharedServiceTableServiceClient()
  • public BlobServiceClient GetSharedServiceBlobServiceClient()

財務および運用管理の記憶域アカウントの接続文字列にアクセスするにはどのようにしますか。

CloudInfrastructure.GetCsuStorageConnectionString() などの接続文字列にアクセスできるすべての API を削除する予定です。 接続文字列の処理を取得する別の方法がある場合でも、これらのメソッドを無効にするための他の制限が設定されています。

将来、マネージド ID ベースの統合を有効にすると、対話型 AOS、バッチ AOS、DIXF (Data Import/Export Framework) サービスなど、財務と運用プロセスの外部で API を通じて共有される接続文字列を使用して、ストレージ アカウントに接続を適用することはできなくなります。

記憶域アカウント レベルではアカウント アクセス キーを無効にしています。アカウント アクセス キーを使用するアクセスは機能しません。

マネージド ID ベースの統合が有効になっているときに、環境で CloudIntorstructure.GetCsuStorageConnectionConnection() を呼び出すと何が起こりますか。

管理対象IDベースの統合が有効な場合、無効な接続文字列が返されます。

無効な接続文字列を使用した場合、AOS プロセス領域内にアクセスすると既存のすべての構造は引き続き動作します。 例外は、GetSharedAccessSignatureなど、アクセス キーと厳しく結合された構造です。

たとえば、次のコードは引き続きこのまま動作します。

String connectionString = CloudInfrastructure.GetCsuStorageConnectionString();
CloudStorageAccount storageAccount = CloudStorageAccount.Parse(connectionString);
CloudBlobClient blobClient = cloudStorageAccount.CreateCloudBlobClient();
CloudBlobContainer blobContainer = blobClient.GetContainerReference(containerName);

コードと AOS プロセス領域内で使用される無効な接続文字列は、どのように動作を続けますか。

これは、ストレージ ソフトウェア開発キット (SDK) が行う発信 HTTPS 要求を中断し、Azure Blob Storage がこれらの要求をクライアントが有効な接続文字列を使用してそれらを作成したかのように扱われます。 この中断により、マネージド ID ベースの統合が原因で返された無効な接続文字列を使用した場合でも、操作が予期した通り処理されます。

GetSharedAccessSignature() が失敗しても他のコンストラクトは引き続き動作する理由を詳しく説明してください。

Blob、コンテナ、キュー、または他のストレージ リソースで GetSharedAccessSignature()を呼び出すと、Shared Access Signature (SAS) URL またはトークンが SDK 内で生成され、URL に格納されたアカウント キーを使用して SharedAccessCredential で URL に署名します。

無効なアカウント キーを使用して CloudStorageAccount や他の関連オブジェクトが構築された場合、その無効なキーは SAS URL に署名するために使用されます。 トークン/URL は正常に生成できますが、署名が無効であるため、その使用を試みるとストレージ アカウントへの接続に失敗し、"403 (禁止)" エラーがスローされます。

マネージド ID ベースの統合が一方の環境で有効になっていて、他方の環境では有効になっていないため、SAS URL パターンが異なる可能性があります。 マネージド ID を使用してストレージ アカウントに接続すると、接続文字列を使用して生成される SAS トークンまたは URL の代わりにユーザーが委任した SAS URL が生成されます。

WindowsAzure.Storage v9.3.3 を使用してユーザーが委任した SAS URL を生成できますか。

いいえ、この機能をサポートしていないため、WindowsAzure.Storage v9.3.3 を使用してユーザーが委任した SAS URL を生成することはできません。

WindowsAzure.Storage v12 またはそれ以降を使用して生成されたユーザーが委任した SAS URL は、WindowsAzure.Storage v9.3.3 を使用して書かれたコードベースと一緒に動作しますか。

はい、Azure.Storage v12 を使用して生成されたユーザーが委任した SAS URL は、WindowsAzure.Storage v9.3.3 のコンストラクトで動作します。 内部ワークフローおよびさまざまなテスト コードを使用して、同じ方法で検証されます。

メモ

SAS URL またはトークンを手動で解析しない場合でも (sest など新しいトークンに変わるかもしれないさまざまなトークンを検索)、URL パターンが異なるため心配いりません。

使用されるマネージド ID が以前のライブラリと互換性がない場合、どのような既知の問題が存在しますか。

  • マネージド ID で使用するライブラリに関係なく、GetSharedAccessSignature() を使用して URL を生成することはできません。
  • ユーザーが委任した URL を生成するには、Azure.Storage.Blobs SDK (v12 以降) を使用する必要があります。
  • 現在、ユーザーが委任した SAS URL をテーブルおよびキューに対して生成することはできません。 Azure Storage チームは、それらのリソースのサポートをロール アウトします。 一般提供日 (GA) の日付は2025年3月です。 この機能を使用するには、SDK をアップグレードする必要があります。
  • ユーザーが委任した SAS URL は、7 日間を超える期間に対しては生成されません。 この制限はハード 制限であり、制限を拡張する予定はありません。
  • コンテナー レベルの属性を変更したり、コンテナーの存在を確認したりするために、コンテナー レベルでユーザーが委任した SAS を生成することはできません。

この変更は、財務と運用アプリ (AOS/Interactive AOS など) からのカスタマー マネージド ストレージ アカウントへの接続に影響しますか。

影響はありません。 また、これらのライブラリからの要求は妨害されません。

プラットフォーム コードで使用できるコードまたはライブラリの使用に関して、何かガイドがありますか。

Microsoft.Dynamics.Clx.ServicesWrapper.Infrastructure.Interceptor 名前空間で公開されているクラスやメソッドの使用は避けてください。これらは内部使用のみを目的としており、変更される可能性があります。

許可されたアクセスだけが行われたことを確認するためのログはありますか。 接続文字列を非推奨にした後も、これらのログは利用可能ですか。

匿名アクセスと管理者キー ベースの認証 (接続文字列など) を無効にすると、アクセスは [ユーザーが委任した] SAS URL または OAuth (マネージド ID を介して) でのみ可能になります。 使用される認証のタイプを追跡するには、メトリック (ログではなく) を使用できます。 現在、これらのメトリックは内部使用専用であり、それらを共有したり公開する予定はありません。

新しい方法は接続文字列よりも安全ですか。 その場合、方法は? その方法をどのようにより安全にしますか。

はい。この方法では、接続文字列を使用するよりも安全にストレージ アカウントに接続できます。 セキュリティニーズは、次に示すさまざまな方法で対処する必要があります。

  • ストレージ アカウントへの匿名アクセスを無効にします。
  • パブリックAPIを介した接続文字列の共有を防止します。
  • 接続文字列を介したストレージ アカウントへのアクセスをオフにします。
  • 新しい (プラットフォーム コードで実装された) サポートされているバージョンのみをサポートするように、ストレージ SDK をプラットフォーム リポジトリでアップグレードします。
  • これらの変更は、開発、ロールアウト、またはディスカッションの異なるステージで行います。

アクセス文字列または置換に関して、定期的に変更を行う必要がありますか。

アカウント アクセス キーとも呼ばれる接続文字列から移動し、アカウント アクセス キーの変更は不要です。

LBD顧客が、Dynamics 365 Finance (LBD) からクラウドに移行するプロセスがあります。 現在、財務と運用の添付ファイル用に、お客様に SAS トークンを提供しています。 これは変更によって影響を受けますか。 その場合、顧客が添付ファイルを移行するのに役立つ方法が必要ですか。

うまくできます。 [マネージド ID] が有効の場合、ユーザーが委任した URL を使用して、顧客と共有できる URL を生成できます。 ただし、ユーザーが委任した URL は最大 7 日間有効です。 Azure Storage は、有効期間が長い URL の生成をサポートしていません。

ストレージ アカウント アクセス キーを無効にすると、以前に作成された URL は動作を停止するのですか。

はい。アカウント アクセス キーが無効な場合は、7 日間が TimeToLive の最大値 (URL の有効期間) なので、以前に作成された SAS URL は動作を停止します。 そのため、SAS URL は期限切れとなり 7 日後に機能しなくなります。