共有アクセス署名 (SAS) を使用して、Azure Storage アカウント内のリソースへのアクセスを委任できます。 SAS トークンには、対象となるリソース、付与されるアクセス許可、およびアクセスが許可される間隔が含まれます。 ベスト プラクティスとしては、SAS が侵害された場合に備えて、SAS の期間を制限することが推奨されます。 ストレージ アカウントの SAS 有効期限ポリシーを設定することで、ユーザーがユーザー委任 SAS、サービス SAS、またはアカウント SAS を作成するときに、有効期限の上限 (最大有効期間) を推奨または適用できます。
Shared Access Signature の詳細については、「Shared Access Signatures (SAS) を使用して Azure Storage リソースへの制限付きアクセスを許可する」を参照してください。
重要
Microsoft では、Shared Access Signature を使うシナリオにはユーザー委任 SAS を使うことをお勧めします。 ユーザー委任 SAS は、アカウント キーの代わりに Microsoft Entra 資格情報で保護されており、優れたセキュリティを提供します。
SAS 有効期限ポリシーの概要
ストレージ アカウントに対して SAS 有効期限ポリシーを構成することができます。 SAS 有効期限ポリシーは、ユーザー委任 SAS、サービス SAS、またはアカウント SAS の有効期間の上限を指定します。 上限は、日付/時刻の値として指定されます。これは、日数、時間数、分数、秒の合計です。
SAS の有効間隔を計算するには、署名済み有効期限フィールドの日時値から、署名済み開始フィールドの日時値を引きます。 結果の値が推奨される上限値以下であれば、その SAS は SAS 有効期限ポリシーに準拠しています。
ストレージ アカウントに対して SAS 有効期限ポリシーが有効な場合、すべての SAS に署名済み開始フィールドが必要です。 署名済み開始フィールドが SAS に含まれておらず、Azure Monitor でのログの診断設定を構成している場合、ユーザーが署名済み開始フィールドの値がない SAS を "使用" するたびに、Azure Storage はログの SasExpiryStatus プロパティにメッセージを書き込みます。
SAS 有効期限ポリシーを構成すると、推奨される上限を超える間隔で SAS を作成したユーザーには、推奨される最大間隔と共に警告が表示されます。
SAS 有効期限アクションを定義する
SAS 有効期限ポリシーでは、次の 2 つのアクションがサポートされます。
[既定値] ログ: ポリシー外 SAS で行われた要求は許可されます。 Azure Monitor でのログの診断設定を構成している場合、ユーザーが推奨の期間後に失効する SAS を "使用" するたびに、Azure Storage はログの SasExpiryStatus プロパティにメッセージを書き込みます。 このメッセージは、SAS の有効間隔が推奨される間隔を超えたことを示す内容です。 このオプションは、ワークフローを中断せずにアクセスを監視および監査する場合に推奨されます。
ブロック: ポリシー外 SAS で行われた要求は拒否されます。 これは、組織の要件に合わせてアクセス制御を適用するための最も厳密なオプションです。
ポリシー外 SAS とは、署名された開始がない、または有効期間が上限を超えている SAS です。
まず、現在の SAS トークンの使用状況を確認し、ストレージ アカウントに適切な有効期限ポリシーを設定します。 ログ アクションから 始めて、ポリシー違反の診断ログを監視することをお勧めします。 ブロック アクションを使用して、SAS トークンがストレージ アカウントに設定された有効期限の有効期間に合格した場合、ストレージへのアクセスをブロックする必要があることを確認することを強くお勧めします。
重要
SAS 有効期限アクションは、HDFS エンドポイントまたは保存されたアクセス ポリシーを使用したサービス レベルの共有アクセス署名を介したユーザー委任 SAS ではサポートされていません。
SAS の有効期限ポリシーを構成する
ストレージ アカウントに SAS 有効期限ポリシーを構成すると、各種の SAS (ユーザー委任 SAS、サービス SAS、アカウント SAS) にポリシーが適用されます。 サービス SAS とアカウント SAS の種類はアカウント キーで署名され、ユーザー委任 SAS は Microsoft Entra 資格情報で署名されます。
Note
ユーザー委任 SAS は、Microsoft Entra 資格情報を使用して取得されたユーザー委任キーで署名されます。 ユーザー委任キーには、SAS 有効期限ポリシーの対象ではない独自の有効期限間隔が存在します。 SAS 有効期限ポリシーは、ユーザー委任 SAS にのみ適用され、署名されたユーザー委任キーには適用されません。
SAS の有効期限ポリシーに関係なく、ユーザー委任 SAS の有効期限の最大間隔は 7 日です。 SAS 有効期限ポリシーが 7 日を超える値に設定されている場合、ポリシーはユーザー委任 SAS には影響しません。 ユーザー委任キーの有効期限が切れると、そのキーで署名されたユーザー委任 SAS は無効になり、SAS を使用しようとするとエラーが返されます。
最初にアカウント アクセス キーをローテーションする必要がありますか?
このセクションは、アカウント キーで署名された、サービス SAS とアカウント SAS の種類に適用されます。 SAS の有効期限ポリシーを構成する前に、各アカウント アクセス キーを少なくとも 1 回ローテーションする必要がある場合があります。 ストレージ アカウントの keyCreationTime プロパティが、アカウント アクセス キー (key1 と key2) のいずれかとして null 値を持っている場合は、それらをローテーションする必要があります。 keyCreationTime プロパティが null かどうかを確認するには、「ストレージ アカウントのアカウント アクセス キーの作成時刻を取得する」を参照してください。 SAS の有効期限ポリシーを構成しようとして、最初にキーをローテーションする必要がある場合、その操作は失敗します。
SAS の有効期限ポリシーを構成する方法
SAS の有効期限ポリシーを構成するには、Azure portal、PowerShell、または Azure CLI を使用します。
Azure portal で SAS の有効期限ポリシーを構成するには、次の手順を実行します。
Azure Portal のストレージ アカウントに移動します。
[設定] の下で [構成] を選択します。
Shared Access Signature (SAS) の有効期限ポリシーの設定を見つけて、[有効] に設定します。
Note
設定が淡色表示されている場合は、有効期限ポリシー を設定する前に、両方のアカウント アクセス キーをローテーションすることが必要になる場合があります 。
このストレージ アカウント内のリソースに対して作成される新しい Shared Access Signature の目的の最大間隔に対して、 SAS の有効期限 間隔の上限の下に時間値を指定します。
[省略可能]有効期限アクションを定義します。 既定の ログ アクションは、ユーザーを中断することなく傾向を検出し、アクセスを調査するのに役立ちますが、 ブロック アクションではポリシー外 SAS トークンに対してゼロ トレランスを適用できます。
[保存] を選択して変更を保存します。
ログでポリシー違反を照会する
SAS の有効期限ポリシーが推奨するよりも長い期間有効な SAS の使用をログに記録するには、まず、ログを Azure Log Analytics ワークスペースに送信する診断設定を作成します。 詳細については、「Azure Log Analytics にログを送信する」を参照してください。
次に、Azure Monitor ログ クエリを使用して、ポリシー違反がないかを監視します。 Log Analytics ワークスペースで新しいクエリを作成し、次のクエリ テキストを追加して、 [実行] を押します。
StorageBlobLogs
| where SasExpiryStatus startswith "Policy violated"
| summarize count() by AccountName, SasExpiryStatus
組み込みポリシーを使用してコンプライアンスを監視する
Azure Policy を使用してストレージ アカウントを監視し、サブスクリプション内のストレージ アカウントで SAS 有効期限ポリシーが構成されていることを確認できます。 Azure Storage には、アカウントでこの設定が構成されていることを確認するための組み込みポリシーが用意されています。 組み込みポリシーの詳細については、組み込みポリシー定義の一覧にある「ストレージ アカウントで Shared Access Signature (SAS) ポリシーを構成する必要がある」を参照してください。
リソース スコープの組み込みポリシーを割り当てる
Azure portal で組み込みポリシーを適切なスコープに割り当てるには、次の手順に従います。
Azure portal で [ポリシー] を検索し、Azure Policy ダッシュボードを表示します。
[作成] セクションで [割り当て] を選択します。
[ポリシーの割り当て] を選択します。
[ポリシーの割り当て] ページの [基本] タブの [スコープ] セクションで、ポリシー割り当てのスコープを指定します。 [その他] ボタンを選択して、サブスクリプションとオプションのリソース グループを選択します。
[ポリシー定義] フィールドで、[その他] ボタンを選択し、[検索] フィールドにストレージ アカウント キーを入力します。 [ストレージ アカウント キーが期限切れにならないようにする必要がある] という名前のポリシー定義を選択します。
[確認と作成] を選択して、ポリシー定義を指定したスコープに割り当てます。
キーの有効期限ポリシーに対するコンプライアンスを監視する
キーの有効期限ポリシーに準拠するためにストレージ アカウントを監視するには、次の手順に従います。
Azure Policy ダッシュボードで、ポリシーの割り当てで指定したスコープの組み込みポリシー定義を見つける。
Storage accounts should have shared access signature (SAS) policies configured
ボックスで を検索し、組み込みのポリシーをフィルター処理できます。目的のスコープを持つポリシー名を選択します。
組み込みポリシーの [ポリシーの割り当て] ページで、[コンプライアンスの表示] を選択します。 指定されたサブスクリプションとリソース グループ内のポリシー要件を満たしていないすべてのストレージ アカウントが、コンプライアンス レポートに表示されます。
ストレージ アカウントがコンプライアンスに準拠するように、「SAS の有効期限ポリシーを構成する」の説明に従って、そのアカウントの SAS の有効期限ポリシーを構成します。