REST API

組み込みの REST API インターフェースは、RESTful Web サービスを視覚化する方法を提供します。API 資料は Swagger を使用して作成されています。この資料を使用すると API 操作をテストしてすぐに結果を確認できるので、アプリケーションをより迅速にスキャンできます。

始める前に

注: 要求率の制限: 1 分あたり最大 500 のリクエストを作成できます (スライドウィンドウ)。この制限は、認証済みのユーザーごと、および認証されていない要求の一意の IP アドレスごとに個別にカウントされます。この制限を超えると、AppScan は、429 ステータスコードを返し、「リクエストが多すぎます」という応答メッセージが表示されます。

このタスクについて

以下に例示するアプリケーション・インベントリーのインポート手順に従って、対話式フレームワークの使用方法を学習します。この例では、/api/v4/Apps/ImportFile REST API を使用しています。

手順

  1. Swagger のページに移動し、後で参照できるようにブックマークします。
  2. HCL ID を使用して Swagger にログインします。
    1. 「アカウント」 API を展開し、POST api/v4/Account/ApiKeyLogin をクリックして、操作の詳細を展開します。
      API キーを使用したログインを表示する POST API
    2. "string" パラメーターを API キー ID と API キー・シークレットに置き換えます。引用符はそのまま保持します。
    3. 「実行」をクリックします。
    4. 「Response Body」から "Token" 値をコピーします。トークンを表示する応答本文
    5. Swagger インターフェースの上部にある「Access token」フィールドにその値を貼り付けます。
      今後は、すべての API 呼び出しにそのトークンが自動的に適用されます。
  3. 資産グループを、次の手順で作成します。
    1. Asset Groups API を展開し、「POST /api/v4/AssetGroups」をクリックします。
    2. "string" パラメーターに資産グループの名前と説明を指定します。引用符はそのまま保持します。資産グループ API の作成
    3. 「実行」をクリックします。
    4. 「Response Body」セクションで ID をメモします。次の API でその ID を使用する必要があります。
      応答本文から ID をコピーします
  4. アプリケーション・インベントリー・ファイルを、次の手順でインポートします。
    1. Applications API を展開し、「POST /api/v4/Apps/ImportFile」をクリックします。
      「Implementation」セクションには、ファイルに組み込む属性のタイプを把握するためにダウンロードできるサンプル・ファイルがあります。
    2. ステップ 3d の assetGroupId「パラメーター」セクションの Value フィールドに入力します。
    3. uploadedFile セクションの「参照」をクリックして、インポートするアプリケーションの CSV ファイルを見つけます。
    4. 「実行」をクリックします。
      次のように正常にインポートされたことが示されます:成功したアプリケーションのインポート

REST API を使用した結果を含む、スキャン・ファイルのインポート
AppScan on Cloud でスキャンを実行することなく、結果を含むスキャン・ファイルをインポートするには、次の手順に従います。
  1. API: api/v4/Account/ApiKeyLogin を使用して Swagger にログインしていることを確認してください。
  2. API: api/v4/FileUpload を使用してスキャン・ファイルをアップロードし、後で「ファイル ID」を保存します。例えば、次のようになります。

    "FileId": "274bd3a7-a231-41d0-80f6-d22d684af50d"

  3. 「スキャン」 API を展開し、「POST /api/v4/Scans/Dast」をクリックします。スキャンを実行することなく、レポートだけ生成するには、次のパラメーターを更新します。
    1. ScanOrTemplateFileId:: 手順 2 でコピーした 「ファイル ID」 を更新します。

      "ScanOrTemplateFileId": "274bd3a7-a231-41d0-80f6-d22d684af50d"

    2. TestOperation: これは次のようにセットします。 ReportOnly

      "TestOperation": "ReportOnly"

    注: API POST/api/v4/SCANS/DAST を実行するため、AppID、ScanName とその他の必須パラメーターがマップされていることを確認してください。

直接 API キーを使用して認証します

API キー ID とシークレットをカスタム HTTP ヘッダーに送信して、API リクエストを認証します。Direct API Key メソッドは、キーをセッショントークンに交換する手順を省きます。これにより、トークンのライフサイクルや有効期限を管理する必要がなくなるため、自動化スクリプトと CI/CD 統合が簡素化されます。主な利点は次のとおりです。

  • シンプルな自動化:「ログイン」、「トークンを取得」、または「トークンを更新」のロジックを記述する必要はありません。
  • ステートレス様のエクスペリエンス: すべての要求でキーを送信します。システムはバックグラウンドでセッションを管理します。
  • 複雑さの軽減:セッション状態の維持が困難な単純なスクリプトや、1 回限りのタスク、統合に最適です。

技術仕様:

この機能を使用するには、HTTP 要求に次のヘッダーを含めます。

  • ヘッダー名: X-Api-Key
  • ヘッダー値の形式: この値は、キー ID とキーシークレットをコロン (:) で区切って指定する必要があります。KeyID:KeySecret
  • 例: 資格情報が次の場合:
    • Key ID: b0977ee5-c9df-0c8a-5909-184c690cbfa5
    • Key Secret: UnKUn7HupAX9MFviJqYHRy6w7Fk50anSlheQJxQhTiux
      ヘッダーは以下の形式でなければなりません。
      X-Api-Key: b0977ee5-c9df-0c8a-5909-184c690cbfa5:UnKUn7HupAX9MFviJqYHRy6w7Fk50anSlheQJxQhTiux
実装例:
  1. cURL
    curl -X GET "https://cloud.appscan.com/api/v4/Scans" \
                                        -H "Accept: application/json" \
                                        -H "X-Api-Key: <Your_Key_ID>:<Your_Key_Secret>"
  2. Python (リクエストライブラリー)
    import requests
                                            
                                            url = "https://cloud.appscan.com/api/v4/Scans"
                                            key_id = "your_key_id"
                                            key_secret = "your_key_secret"
                                            
                                            # Construct the header value
                                            header_value = f"{key_id}:{key_secret}"
                                            
                                            headers = {
                                            "Accept": "application/json",
                                            "X-Api-Key": header_value
                                            }
                                            
                                            response = requests.get(url, headers=headers)
                                            
                                            if response.status_code == 200:
                                            print("Success:", response.json())
                                            else:
                                            print("Error:", response.status_code, response.text)
                                        
セキュリティーと動作に関する注:
  • 有効期限と最新表示: システムでは、パフォーマンスのため、30 分間セッションを維持しますが、追跡する必要はありません。セッションが期限切れになると、キーが再検証され、新しいセッションが自動的に作成されます。

  • 失効: AppScan ポータルで API キーを削除すると、アクセスは ただちに取り消されます。そのキーを使用するアクティブなセッションはすべて終了し、後続の要求は 401 エラーを返します。

  • 許可: このメソッドで認証されたリクエストは、API キーを所有するユーザーアカウントと同じ権限を継承します。

トラブルシューティング:
  • 401 エラー: キー ID とシークレットが正しいこと、およびキーが取り消されたり削除されていないことを確認します。

  • フォーマットエラー: キー ID、コロン、およびキーシークレットの間にスペースがないことを確認します (ID:Secret、Not ID: Secret など)。