次の方法で共有


CA5375: アカウントの Shared Access Signature を使用しないでください

プロパティ
ルール ID CA5375
Title アカウントの Shared Access Signature を使用しないでください
[カテゴリ] Security
修正が中断か中断なしであるか なし
.NET 8 では既定で有効 いいえ

原因

Microsoft.WindowsAzure.Storage 名前空間の下で GetSharedAccessSignature メソッドを使用して、アカウントの Shared Access Signature (SAS) を生成しています。

規則の説明

アカウントの SAS では、サービス SAS で許可されていない BLOB コンテナー、テーブル、キューおよびファイル共有の読み取り、書き込みおよび削除操作へのアクセスを委任できます。 ただし、コンテナーレベルのポリシーをサポートしておらず、付与されるアクセス許可に対する柔軟性と制御力は高くありません。 可能であれば、きめ細かなアクセス制御を行うため、サービス SAS を使用します。 詳細については、Shared Access Signature (SAS) を使用したアクセスの委任に関するページを参照してください。

違反の修正方法

詳細に設定されたアクセス制御とコンテナーレベルのアクセス ポリシーには、アカウント SAS の代わりにサービス SAS を使用します。

どのようなときに警告を抑制するか

すべてのリソースのアクセス許可が可能な限り制限されている場合は、この規則を抑制しても問題ありません。

警告を抑制する

単一の違反を抑制するだけの場合は、ソース ファイルにプリプロセッサ ディレクティブを追加して無効にしてから、規則をもう一度有効にします。

#pragma warning disable CA5375
// The code that's violating the rule is on this line.
#pragma warning restore CA5375

ファイル、フォルダー、またはプロジェクトの規則を無効にするには、構成ファイルでその重要度を none に設定します。

[*.{cs,vb}]
dotnet_diagnostic.CA5375.severity = none

詳細については、「コード分析の警告を抑制する方法」を参照してください。

疑似コードの例

違反

現在のところ、次の擬似コード サンプルでは、この規則により検出されたパターンを示しています。

using System;
using Microsoft.WindowsAzure.Storage;

class ExampleClass
{
    public void ExampleMethod(SharedAccessAccountPolicy policy)
    {
        CloudStorageAccount cloudStorageAccount = new CloudStorageAccount();
        cloudStorageAccount.GetSharedAccessSignature(policy);
    }
}

解決策

アカウント SAS ではなく、サービス SAS を使用します。

using System;
using Microsoft.WindowsAzure.Storage;
using Microsoft.WindowsAzure.Storage.File;

class ExampleClass
{
    public void ExampleMethod(StorageCredentials storageCredentials, SharedAccessFilePolicy policy, SharedAccessFileHeaders headers, string groupPolicyIdentifier, IPAddressOrRange ipAddressOrRange)
    {
        CloudFile cloudFile = new CloudFile(storageCredentials);
        SharedAccessProtocol protocols = SharedAccessProtocol.HttpsOnly;
        cloudFile.GetSharedAccessSignature(policy, headers, groupPolicyIdentifier, protocols, ipAddressOrRange);
    }
}

CA5376: SharedAccessProtocol HttpsOnly を使用します

CA5377: コンテナー レベルのアクセス ポリシーを使用します