APIキーのアクセスを1つのプロジェクトに制限する方法
1つのプロジェクトの請求書をサーバーで照合する専用キーを作成します。プロジェクト、読み取り権限、必要なAPIセクションを選び、IPと有効期限を設定して、アクセス範囲を確認しましょう。
更新日:
APIキーは、1つのCryptanioプロジェクトに紐付けることができます。ここでは、オンラインストアの請求書を読み取り、同じアカウントの他のプロジェクトのデータにはアクセスしない注文照合処理を例にします。この処理には専用のキーが必要です。プロジェクトとの紐付けがデータの範囲を定め、権限とAPIセクションが許可される操作を定めます。
キーの名前や、自分のアプリケーションに記載したプロジェクト番号だけではアクセスは制限されません。制限はキーのポリシーに保存する必要があります。このアクセスは公開API v1に適用されます。キーは管理画面にログインするためのパスワードではありません。
1. プロジェクトと権限を準備する
アカウントの所有者または管理者の権限と、「支払い」サービスを利用する既存の有効なプロジェクトが必要です。まず、その名前と用途を正しく把握していることを確認してください。間違ったプロジェクトを選ぶと、キー自体は有効でも、アクセス範囲が目的と異なる場合があります。
「APIキー」を開きます。「API キーを作成します」フォームの「ラベル」に、例えば「ストアの注文照合」と入力します。専用の名前を付けるとサーバーの処理を区別しやすくなりますが、実際の保護は次のフィールドで設定します。
2. モードと対象のプロジェクトを選ぶ
実際の請求書を読み取るには、「モード」フィールドで「本番」を選びます。キーは、サーバーが要求するデータのモードと一致している必要があります。
「プロジェクト」フィールドで、「すべてのプロジェクト」ではなく対象のプロジェクトを選びます。管理画面には、選んだプロジェクトのサービスに制限されることを示す案内が表示されます。プロジェクトとの紐付けとサービスへのアクセス権は同時に適用されます。キー自体がサービスを有効にしたり、機能を拡張したりすることはありません。
3. 請求書の読み取りだけを許可する
「アクセス」フィールドで「読んでください」を選びます。「API セクション」では「請求書」を残し、その処理に不要な項目のチェックを外します。通常の請求書の状態照合に、アドレス、webhook、シミュレーションを管理する権限は不要です。
別のサーバーで請求書を作成する必要がある場合は、該当するセクションと「読み書きします」の権限が必要です。照合処理の権限をむやみに広げず、用途が明確な別のキーを割り当ててください。書き込み権限は選択したセクション内に適用されるもので、API全体を開放するものではありません。
4. IPと有効期限を設定する
「許可されたIPアドレス」に、サーバーの送信元となる公開IPまたは必要なCIDR範囲を、1行に1つずつ入力します。必要なのは購入者のIPではなく、リクエストがAPIに届くときの送信元アドレスです。ホスティングやプロキシを利用している場合は、実際の送信元アドレスを確認してください。
空欄にすると、すべてのIPが許可されます。サーバーが複数の送信元アドレスを使う場合は、それらを設定に反映してください。そうしないと、正しいキーでも検証に通らないことがあります。IP制限はプロジェクトとセクションの選択を補完するもので、代わりにはなりません。
必要に応じて「有効期限」を設定します。選択した日付は、UTCでその日が終わるまで有効です。連携を稼働させる期間に合わせてください。キーの期限切れは、顧客が支払っていないことを示すものではありません。
5. キーを作成してシークレットを保管する
「キーを作成します」を押し、管理画面でセキュリティ確認を求められた場合は完了します。表示されたウィンドウからシークレットをコピーし、照合処理を実行するサーバーに保存してください。クライアント側のJavaScript、決済リンク、購入者とのやり取り、公開ログに含めないでください。
ウィンドウを閉じた後、一覧からシークレットを復元できるとは考えないでください。一覧にはキーの短縮表記しか表示されません。「バウンダリー」、プロジェクト、利用可能なセクション、有効期限、状態を確認します。開発者にアクセスを渡す必要がある場合は、適切な安全な保管場所を使い、説明文と一緒にキーを公開しないでください。
6. 許可されるアクセスと禁止されるアクセスを確認する
許可されたIPのサーバーから、そのプロジェクトの既知の請求書を読み取ります。以下はAPIカタログの読み取り例です。自分の請求書IDと作成したキーを使用してください。
#!/usr/bin/env bash
set -euo pipefail
: "${CRYPTANIO_RESOURCE_ID:?Set CRYPTANIO_RESOURCE_ID}"
: "${CRYPTANIO_API_KEY:?Set CRYPTANIO_API_KEY}"
urlencode() {
local LC_ALL=C text="$1" char index
for ((index=0; index<${#text}; index++)); do
char="${text:index:1}"
case "$char" in [a-zA-Z0-9.~_-]) printf '%s' "$char" ;; *) printf '%%%02X' "'$char" ;; esac
done
}
response_file="$(mktemp)"
trap 'rm -f "$response_file"' EXIT
transfer_status=0
http_status="$(curl \
--silent --show-error --max-time 30 --request GET \
--header "Authorization: Bearer $CRYPTANIO_API_KEY" \
--header 'Accept: application/json' \
"https://api.cryptanio.com/v1/invoices/$(urlencode "$CRYPTANIO_RESOURCE_ID")" \
--output "$response_file" --write-out '%{http_code}')" || transfer_status=$?
if [[ "$http_status" == 2?? ]]; then
cat "$response_file"
exit "$transfer_status"
fi
printf 'HTTP %s\n' "$http_status" >&2
cat "$response_file" >&2
exit 1
次に、自分が所有する別のプロジェクトの既知の請求書でアクセス範囲を確認します。そのデータが返されてはいけません。一覧も、選択したプロジェクト内に限定されている必要があります。このキーでは「請求書」セクションが有効であっても、請求書の作成や変更は禁止されています。その後の照合の組み立て方は、APIで支払いを確認するガイドで説明しています。
リクエストに失敗した場合は、プロジェクト、モード、IP、有効期限、権限を確認します。1回のアクセスエラーだけで未払いと判断したり、制限されたキーをアカウント全体のキーに置き換えたりしないでください。支払いは請求書の状態に基づいて判断します。
後からアクセス権を調整する方法
既存のキーで「アクセス」を押し、プロジェクト、セクション、IP、有効期限を変更して、「アクセスを保存します」を選びます。モードはキーの作成時に選択します。「回転」はシークレットを変更し、以前のシークレットを直ちに無効化します。「リボケ」はキーの使用を停止します。照合処理が止まらないよう、キーを変更する前にサーバー側クライアントの更新を準備してください。