3
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

背景

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 になってないか?も見れるようにしたいなぁ

3
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?