Next-Gen WAF での API の使用

Next-Gen WAF とは、以下のいずれかの API を使用してやり取りできます。

API対象ユーザー
Next-Gen WAF APINext-Gen WAF コンソールへのアクセス権がある場合は、この API をご利用ください。
Fastly Next-Gen WAF APIFastly コンソール内の Next-Gen WAF にアクセスできる場合は、この API をご利用ください。
  1. Next-Gen WAF API
  2. Fastly Next-Gen WAF API

Next-Gen WAF API の使用

Next-Gen WAF コンソールへのアクセス権がある場合は、Next-Gen WAF API を使用して Next-Gen WAF を操作できます。

ヒント: 私たちは Terraform プロバイダーを提供しています。

API アクセストークンについて

適切な権限を持つユーザーであれば誰でも、個人用の API アクセストークンを作成して使用することで API に接続できます。メールアドレスとアクセストークンを使用して、API に対する認証を行います。

Corp Manage メニューから API Access Tokens を選択すると、API Access Tokens ページが表示されます。API Access Tokens ページから、企業の全トークンを一覧表示するテーブルを表示し、検索バーを使用してトークンの作成者や名前でテーブルをフィルタリングできます。このテーブルには、以下の列が含まれます。

  • Created by: トークンを作成した人の名前。

  • Token Name: トークンのフレンドリー名。

  • Logged IP: リクエストの IP アドレス。

  • User Agent: リクエストのユーザーエージェント。

  • Timestamp: トークンが使用された日付。

  • Status: トークンのステータス。

  • Expires: トークンの有効期限日。

デフォルトでは、誰でも API アクセストークンを作成して使用できます。ただし、所有者は API アクセストークンの作成および使用を特定のユーザーに制限することもできます。すべてのプランで、1人あたり最大5件のアクセストークンを作成可能です。

API アクセストークンの管理

API アクセストークンを管理する際は、以下の手順に従います。

API アクセストークンの作成

  1. Next-Gen WAF コンソールにログインします。
  2. [My Profile (マイプロフィール)] メニューから、[API access tokens (API アクセストークン)] を選択します。

  3. [Add API access token (API アクセストークンを追加)] をクリックします。

  4. [Token name] フィールドに、アクセストークンを識別する名前を入力します。

    警告 : トークン名に特殊文字 (例 : -@!%) を使用しないでください。特殊文字を使用すると、400 Bad Request HTTP ステータスコードエラーが送信される場合があります。

  5. [Create API access token (API アクセストークンを作成)] をクリックします。

  6. ご自身で再確認できるよう、トークンを安全な場所に記録します。

    重要 : トークンが表示されるのは、この時のみです。トークンを記録して安全に保存してください。セキュリティ上の理由から、コンソールには表示されません。

  7. [Continue] をクリックして、トークンの作成を完了します。

API アクセストークンの作成および使用権限の制限

所有者は、API アクセストークンの作成および使用を制限できます。制限の適用後、所有者は特定のユーザーに API アクセストークンを作成して使用する権限を手動で付与できます。

制限が有効化される前に作成された API アクセスのトークンは削除されません。しかし、既存のトークンを持つユーザーには API アクセストークンを使用する権限を与える必要があります。ユーザーが API アクセストークンを使用する許可を再度与えられるまで、トークンは無効な状態のままになります。ユーザーに権限が付与された後、コンソールはその権限を今後も記憶します。

所有者が API アクセストークンの制限を有効にする手順は以下のとおりです。

  1. Next-Gen WAF コンソールにログインします。
  2. [Corp Manage (企業管理)] メニューから、[User Authentication (ユーザー認証)] を選択します。

  3. [API access tokens (API アクセストークン)] セクションに移動します。

  4. [Access token permissions (アクセストークンの権限)] フィールドで、[Restrict access by user (ユーザーごとにアクセスを制限する)] オプションを選択します。この設定と制限内容についての警告メッセージが表示されます。

  5. [Continue (続行)] をクリックして続行します。

  6. [Update API access tokens (API アクセストークンを更新)] をクリックして、変更を保存します。

API アクセストークンの作成および使用権限の付与

API アクセストークンの作成および使用が制限されている場合、所有者のみが他のユーザーに API アクセストークンの作成を許可できます。

重要: API アクセストークンの使用を制限した後、所有者本人も API アクセストークンを作成および使用する権限を自身に付与する必要があります。

  1. Next-Gen WAF コンソールにログインします。
  2. [Corp Manage (企業管理)] メニューから、[Corp Users (企業ユーザー)]を選択します。

  3. 権限を付与するユーザーをクリックします。

  4. [Edit corp user (企業ユーザーの編集)] をクリックします。

  5. [Authentication] セクションで、[Allow this user to create API access tokens (このユーザーが API アクセストークンを作成することを許可する)] チェックボックスをオンにします。

  6. [Update user (ユーザーの更新)] をクリックします。

API アクセストークンの削除

  1. Next-Gen WAF コンソールにログインします。
  2. [My Profile (マイプロフィール)] メニューから、[API access tokens (API アクセストークン)] を選択します。

  3. 削除したいトークンの右側にある [Delete (削除)] をクリックします。

  4. Delete をクリックして、トークンの削除を確定します。

個人用 API トークンの表示

所有者[Corp Manage (企業管理)] メニューに移動して [API access tokens (API アクセストークン)] を選択すると、企業全体の全アクセストークンのテーブルを表示できます。このテーブルには、各トークンのステータス (有効、期限切れ、所有者による無効化)、作成者、使用された IP、有効期限などが記載されています。

企業全体の API アクセストークン設定の管理

企業全体の API アクセストークン設定を管理する際は、次の手順に従います。

トークンの自動有効期限切れの設定

所有者は、一定期間経過後に API アクセストークンが自動的に有効期限切れになるよう設定できます。

  1. Next-Gen WAF コンソールにログインします。
  2. [Corp Manage (企業管理)] メニューから、[User Authentication (ユーザー認証)] を選択します。

  3. [API access tokens (API アクセストークン)] セクションに移動します。

  4. [Access token expiration (アクセストークンの有効期限)] で、[Custom expiration (カスタム有効期限)] オプションを選択します。

  5. デフォルトの期間を選択するか、[Custom (カスタム)] を選択して特定のカスタム期間を設定します。

    有効期限は、有効期限ポリシーの開始日ではなく、トークン自体の作成日に基づいて設定されます。たとえば、作成から60日間経過したトークンについて30日間の有効期限ポリシーを設定した場合、トークンは即座に有効期限切れになります。この場合も、後に有効期限を90日に切り替えると、トークンの有効期限は切れなくなります。

  6. [Update API access tokens (API アクセストークンを更新)] をクリックします。

IP による API アクセストークンの使用制限

所有者は、API アクセストークンの使用を特定の IP アドレスに制限できます。

  1. Next-Gen WAF コンソールにログインします。
  2. [Corp Manage (企業管理)] メニューから、[User Authentication (ユーザー認証)] を選択します。

  3. [API access tokens (API アクセストークン)] セクションに移動します。

  4. [Restrict usage by IP (optional) (IPアドレスごとに使用を制限する (オプション)] フィールドに、トークンの使用を制限する IP アドレスと IP アドレス範囲を入力します。各 IP アドレスを新しい行に入力します。

  5. [Update API access tokens (API アクセストークンを更新)] をクリックします。

個人用 API アクセストークンの使用

Golang

package main
import (
"encoding/json"
"fmt"
"io/ioutil"
"log"
"net/http"
"os"
"time"
)
var (
// Defines the API endpoint
endpoint = "https://dashboard.signalsciences.net/api/v0"
email = os.Getenv("SIGSCI_EMAIL")
token = os.Getenv("SIGSCI_TOKEN")
)
// Corp is a Signal Sciences corp (also known as account)
type Corp struct {
Name string
DisplayName string
SmallIconURI string
Created time.Time
SiteLimit int
Sites struct {
URI string
}
AuthType string
MFAEncorced bool
}
// CorpResponse is the response from the Signal Sciences API
// containing the corp (account) data.
type CorpResponse struct {
Data []Corp
}
func main() {
// No need for timestamps or anything
log.SetFlags(0)
// Get corps
req, err := http.NewRequest("GET", endpoint+"/corps", nil)
if err != nil {
log.Fatal(err)
}
// Set headers
req.Header.Set("x-api-user", email)
req.Header.Set("x-api-token", token)
req.Header.Set("Content-Type", "application/json")
req.Header.Add("User-Agent", "SigSci Go-Example")
// Make request
var transport http.RoundTripper = &http.Transport{}
response, err := transport.RoundTrip(req)
if err != nil {
log.Fatal(fmt.Sprintf("Error connecting to API: %v", err))
}
defer response.Body.Close()
payload, err := ioutil.ReadAll(response.Body)
if err != nil {
log.Fatal(fmt.Sprintf("Unable to read API response: %v", err))
}
if response.StatusCode != http.StatusOK {
log.Fatal(fmt.Sprintf("API request failed, status: %d, resp: %s", response.StatusCode, payload))
}
var corpResp CorpResponse
err = json.Unmarshal(payload, &corpResp)
if err != nil {
log.Fatal(err)
}
// Print out corp (account) data
fmt.Printf("%+v\n", corpResp.Data)
}

Python

import requests, os
# Initial setup
endpoint = 'https://dashboard.signalsciences.net/api/v0'
email = os.environ.get('SIGSCI_EMAIL')
token = os.environ.get('SIGSCI_TOKEN')
# Fetch list of corps (accounts)
headers = {
'Content-type': 'application/json',
'x-api-user': email,
'x-api-token': token
}
corps = requests.get(endpoint + '/corps', headers=headers)
print (corps.text)

Ruby

require 'net/http'
require 'json'
# Initial setup
endpoint = "https://dashboard.signalsciences.net/api/v0"
email = ENV['SIGSCI_EMAIL']
token = ENV['SIGSCI_TOKEN']
# Fetch list of corps (accounts)
corps_uri = URI(endpoint + "/corps")
http = Net::HTTP.new(corps_uri.host, corps_uri.port)
http.use_ssl = true
request = Net::HTTP::Get.new(corps_uri.request_uri)
request["x-api-user"] = email
request["x-api-token"] = token
request["Content-Type"] = "application/json"
response = http.request(request)
puts response.body

Shell

$ curl -H "x-api-user:$SIGSCI_EMAIL" -H "x-api-token:$ACCESS_TOKEN" -H "Content-Type: application/json" https://dashboard.signalsciences.net/api/v0/corps