背景
Azure OpenAI 関連の申請で、不正使用監視の停止申請がある
これをすることで、監視を止めることが出来る。
Azure OpenAI Limited Access Review:
Modified Abuse Monitoring
で、会社において、使ってる人に設定のスクリーンショットだせって話がきた。
面倒なので、script を用意したってだけ
OpenAI 関連の申請は以下に詳しい
出力イメージ
サブスクリプション名 | サブスクリプションID | リソースグループ名 | リソース名 | 状況 (不正使用監視詳細) | ContentLogging |
---|---|---|---|---|---|
Visual Studio Professional サブスクリプション | {subscription ID} | {resource group name} | {resource name} | 不正使用監視 by MS |
Power Shell スクリプト
前提
- az cli が動く
- az account list が対象
- az logout/login などでキャッシュ更新しておいたほうがよい
- 権限がある場合のみ
- 結果は、$output_file に指定した、
results_ContentLogging.md
へ
ContentLogging チェック用
# 出力ファイル
$output_file = "results_ContentLogging.md"
# 出力ファイルの存在をチェックし、存在しない場合は新規作成
if (-Not (Test-Path -Path $output_file)) {
# ファイルが存在しない場合、新しく作成
New-Item -Path $output_file -ItemType File
} else {
# ファイルが存在する場合、内容をクリア
Set-Content -Path $output_file -Value $null
}
# 現在のサブスクリプションIDを取得して保存
$initialSubscriptionId = az account show --query "id" -o tsv
# ヘッダー行を追加
Add-Content -Path $output_file -Value "| サブスクリプション名 | サブスクリプションID | リソースグループ名 | リソース名 | 状況 ([不正使用監視詳細](https://jpaiblog.github.io/blog/2023/04/21/RequestAccess-to-AzureOpenAIService/)) | ContentLogging |"
Add-Content -Path $output_file -Value "| --- | --- | --- | --- | --- | --- |"
# 全サブスクリプションを取得し、名前とIDのペアリストを取得
$subscriptions = az account list --query "[].{Name:name, Id:id}" -o tsv
foreach ($subscription in $subscriptions) {
$subscriptionDetails = $subscription -split "`t"
$subscriptionName = $subscriptionDetails[0]
$subscriptionId = $subscriptionDetails[1]
try {
# サブスクリプションを設定
$null = az account set --subscription $subscriptionId 2>&1
if ($LASTEXITCODE -ne 0) {
$errorMsg = "サブスクリプションの設定中にエラーが発生しました (エラーコード: $LASTEXITCODE)"
Write-Host $errorMsg
Add-Content -Path $output_file -Value "| $subscriptionName | $subscriptionId | - | - | アクセス権が不足しています | N/A |"
continue
}
Write-Host "サブスクリプションを確認中: $subscriptionName ($subscriptionId)"
# OpenAIサービスリソースのリストを取得 (kindが"OpenAI"のリソースのみ)
$resources = az cognitiveservices account list --query "[?kind=='OpenAI'].{Name:name, ResourceGroup:resourceGroup}" -o tsv 2>&1
if ($LASTEXITCODE -ne 0) {
$errorMsg = "OpenAIリソースの取得中にエラーが発生しました (エラーコード: $LASTEXITCODE)"
Write-Host $errorMsg
Add-Content -Path $output_file -Value "| $subscriptionName | $subscriptionId | - | - | アクセス権が不足しています | N/A |"
continue
}
if (-not $resources) {
Write-Host "対象のサブスクリプションには OpenAI リソースがありません: $subscriptionId"
Add-Content -Path $output_file -Value "| $subscriptionName | $subscriptionId | - | - | OpenAI リソースがありません | N/A |"
} else {
# 各リソースについて確認
foreach ($resource in $resources) {
$resourceDetails = $resource -split "`t"
$resourceName = $resourceDetails[0]
$resourceGroup = $resourceDetails[1]
Write-Host "リソースを確認中: $resourceName (リソースグループ: $resourceGroup)"
# ContentLoggingの確認
$loggingStatus = az cognitiveservices account show --resource-group $resourceGroup --name $resourceName --query "properties.capabilities[?name=='ContentLogging'].value" -o tsv 2>&1
if ($LASTEXITCODE -ne 0) {
Write-Host "ContentLoggingの確認中にエラーが発生しました。リソース: $resourceName (リソースグループ: $resourceGroup)"
Add-Content -Path $output_file -Value "| $subscriptionName | $subscriptionId | $resourceGroup | $resourceName | ContentLogging エラー (コード: $LASTEXITCODE) | N/A |"
continue
}
if ($loggingStatus -eq "") {
$loggingStatus = "未設定"
}
$status = if ($loggingStatus -eq "false") { "不正使用監視 無効化" } else { "不正使用監視 by MS" }
Add-Content -Path $output_file -Value "| $subscriptionName | $subscriptionId | $resourceGroup | $resourceName | $status | $loggingStatus |"
}
}
} catch {
$errorMsg = "例外が発生しました。サブスクリプション $subscriptionId でのエラー: $_"
Write-Host $errorMsg
Add-Content -Path $output_file -Value "| $subscriptionName | $subscriptionId | - | - | エラー: $_ | N/A |"
}
}
# サブスクリプションを初期状態に戻す
$null = az account set --subscription $initialSubscriptionId
Write-Host "ContentLogging が有効または未設定のサブスクリプションとそのリソースは $output_file に保存されました。"
あとがき
そういえば、provisoned になってないか?も見れるようにしたいなぁ