Список вызовов конечных точек API Google с помощью SDK - PullRequest
0 голосов
/ 11 марта 2020

Ранее мы сгенерировали список конечных точек API Google, используемых SDK, с помощью поиска исходного репо. Теперь, когда это кажется недоступным, кто-нибудь еще нашел способ получить такой список? Мы должны иметь возможность внести эти конечные точки в белый список нашего корпоративного брандмауэра / прокси-сервера.

Спасибо!

1 Ответ

4 голосов
/ 11 марта 2020

ЧАСТЬ 1

Если ваша цель - внести URL-адреса в белый список для вашего брандмауэра, URL *.googleapis.com покроет 99% всего, что вам нужно. Осталось всего несколько конечных точек:

bookstore.endpoints.endpoints-portal-demo.cloud.goog
cloudvolumesgcp-api.netapp.com
echo-api.endpoints.endpoints-portal-demo.cloud.goog
elasticsearch-service.gcpmarketplace.elastic.co
gcp.redisenterprise.com
payg-prod.gcpmarketplace.confluent.cloud
prod.cloud.datastax.com

PART 2

Перечислите конечные точки API Google, которые available для вашего проекта, с помощью этой команды:

gcloud services list --available --format json | jq -r ".[].config.name"

https://cloud.google.com/sdk/gcloud/reference/services/list

Обратитесь к ЧАСТИ 5 для скрипта PowerShell, который создает аналогичный список.

ЧАСТЬ 3

Обработка Discovery Document, предоставляющего машиночитаемую информацию:

Служба обнаружения API Google

curl https://www.googleapis.com/discovery/v1/apis | jq -r ".items[].discoveryRestUrl"

После получения списка документов обнаружения обработайте каждый документ и извлеките ключ rootUrl.

curl https://youtubereporting.googleapis.com/$discovery/rest?version=v1 | jq -r ".rootUrl"

PART 4 ​​

Сценарий PowerShell для обработки документа обнаружения и создания списка конечных точек API:

Скопируйте этот код в файл с именем list_google_apis.ps1. Выполните команду следующим образом:

powershell ".\list_google_apis.ps1 | Sort-Object -Unique | Out-File -Encoding ASCII -FilePath apilist.txt"

Будут отображаться некоторые ошибки, так как некоторые URL-адреса документа обнаружения приводят к 404 (НЕ НАЙДЕННЫМ) ошибкам.

$url_discovery = "https://www.googleapis.com/discovery/v1/apis"

$params = @{
    Uri = $url_discovery
    ContentType = 'application/json'
}

$r = Invoke-RestMethod @params

foreach($item in $r.items) {
    $url = $item.discoveryRestUrl

    try {
        $p = @{
            Uri = $url
            ContentType = 'application/json'
        }

        $doc = Invoke-RestMethod @p

        $doc.rootUrl
    } catch {
        Write-Host "Failed:" $url -ForegroundColor Red
    }
}

ЧАСТЬ 5

Сценарий PowerShell, который я написал некоторое время назад, который производит аналогичный вывод gcloud services list.

Документация для API:

https://cloud.google.com/service-usage/docs/reference/rest/v1/services/list

<#
.SYNOPSIS
    This program displays a list of Google Cloud services

.DESCRIPTION
    Google Service Management allows service producers to publish their services on
    Google Cloud Platform so that they can be discovered and used by service consumers.

.NOTES
    This program requires the Google Cloud SDK CLI is installed and set up.
    https://cloud.google.com/sdk/docs/quickstarts

.LINK
    PowerShell Invoke-RestMethod
    https://docs.microsoft.com/en-us/powershell/module/microsoft.powershell.utility/invoke-restmethod?view=powershell-5.1
    Google Cloud CLI print-access-token Documentation
    https://cloud.google.com/sdk/gcloud/reference/auth/print-access-token
    Google Cloud API Documentation
    https://cloud.google.com/service-infrastructure/docs/service-management/reference/rest
    https://cloud.google.com/service-usage/docs/reference/rest/v1/services
    https://cloud.google.com/service-infrastructure/docs/service-management/reference/rest/v1/services/list
#>

function Get-AccessToken {
    # Get an OAuth Access Token
    $accessToken=gcloud auth print-access-token

    return $accessToken
}

function Display-ServiceTable {
    Param([array][Parameter(Position = 0, Mandatory = $true)] $serviceList)

    if ($serviceList.Count -lt 1) {
        Write-Output "No services were found"
        return
    }

    # Display as a table
    $serviceList.serviceConfig | Select name, title | Format-Table -Wrap | more
}

function Get-ServiceList {
    Param([string][Parameter(Position = 0, Mandatory = $true)] $accessToken)

    # Build the url
    # https://cloud.google.com/service-infrastructure/docs/service-management/reference/rest/v1/services/list
    $url="https://servicemanagement.googleapis.com/v1/services"

    # Build the Invoke-RestMethod parameters
    # https://docs.microsoft.com/en-us/powershell/module/microsoft.powershell.utility/invoke-restmethod?view=powershell-5.1
    $params = @{
        Headers = @{
            Authorization = "Bearer " + $accessToken
        }
        Method = 'Get'
        ContentType = "application/json"
    }

    # Create an array to store the API output which is an array of services
    $services = @()

    # Google APIs page the output
    $nextPageToken = $null

    do {
        if ($nextPageToken -eq $null)
        {
            $uri = $url
        } else {
            $uri = $url + "?pageToken=$nextPageToken"
        }

        try {
            # Get the list of services
            $output = Invoke-RestMethod @params -Uri $uri
        } catch {
            Write-Host "Error: REST API failed." -ForegroundColor Red
            Write-Host "URL: $url" -ForegroundColor Red
            Write-Host $_.Exception.Message -ForegroundColor Red

            return $services
        }

        # Debug: Display as JSON
        # $output | ConvertTo-Json

        # Append services to list
        $services += $output.services

        $nextPageToken = $output.nextPageToken
    } while ($nextPageToken -ne $null)

    return $services
}

############################################################
# Main Program
############################################################

$accessToken = Get-AccessToken

$serviceList = Get-ServiceList $accessToken

Display-ServiceTable $serviceList

Инструмент командной строки JQ

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...