Slide 1

Slide 1 text

All rights reserved by Postman Inc Postman と API セキュリティ 川崎庸市 Postman株式会社

Slide 2

Slide 2 text

テクノロジー・エバンジェリスト Postman株式会社 川崎 庸市 / Yoichi Kawasaki @yokawasa @postman_japan

Slide 3

Slide 3 text

アジェンダ ● API 開発で気を付けるポイント ● Postman の機能 ○ 認証・認可設定のハードルを下げるしくみ ○ 柔軟なテストのしくみ ○ 継続的に API を安全に保つ ○ 機密情報を安全に扱う機能 ○ 一貫性のあるルールを適用 @postman_japan

Slide 4

Slide 4 text

Web APIテストで確認すること APIテストは、インターフェースの品質、信頼性、セキュリティを確保するために行います 機能要件 ● APIコントラクトテスト: APIがコントラクト通り の仕様で実装されているか ● 機能テスト: APIが期待通りの振る舞いであ るかどうか 非機能要件 ● セキュリティテスト: APIを通じたやりとりが セキュアか ● パフォーマンステスト: APIのパフォーマンス に問題がないか @postman_japan

Slide 5

Slide 5 text

API 開発で気を付ける ポイント @postman_japan

Slide 6

Slide 6 text

シフトレフト ● できるだけAPIライフサイクルの早い段階で実施するようにしましょう。早期にバグや問題を発見し、修正 コストを削減できます ● セキュリティ、パフォーマンス面のような非機能要件のテストおいては、 APIライフサイクルの後ろの フェーズで実施される例が多く見られるが、このような非機能要件に関する問題は致命的な事が多い @postman_japan 定義 設計 開発 テスト デプロイ 監視 観測 配布 check check 致命的な 問題発見 デザイン変更 APIライフサイクルにおける後半フェーズで問題が発見されたイメージ

Slide 7

Slide 7 text

一貫した API テストの実施を ● 開発完了時だけではなく、あらゆる段階でテストを実施し、可能な限り迅速に問題を発見でき るようにしましょう ● 運用フェーズにおいてもログやメトリクスの検証を定期的に実施しましょう @postman_japan

Slide 8

Slide 8 text

認可は開発者が意識してテストしないと難しい 認可の不備によるリスクは非常に大きく OWASP API Security Top 10 2023でも次のような認可の不備を取 り上げています @postman_japan リソースごとの認可 ● API12023  Broken Object Level Authorization (オブジェクトレベルの認可の不備 ) ● API32023  Broken Object Property Level Authorization (オブジェクトプロパティトレベルの認可の不備 ) 機能ごとの認可 ● API52023  Broken Function Level Authorization (機能レベルの認可の不備 ) オブジェクトレベルの認可の不備 BOLAのイメージ 機能レベルの認可の不備 BFLAのイメージ

Slide 9

Slide 9 text

Postman の機能 @postman_japan

Slide 10

Slide 10 text

認証・認可設定のハードルを下げるしくみ API リクエストの認証・認可設定ヘルパー @postman_japan 認可タブをクリック 認可タイプごとの設定 豊富なbuilt-in機能

Slide 11

Slide 11 text

認証・認可設定のハードルを下げるしくみ かんたん認可設定 @postman_japan 事前にAPI提供者がAPI認可に関するかんたん認可設定が準備されている APIであれば、API利用者はより簡 単に認可設定すすめることができる Postman APIの例 (APIキー認証) Notion APIの例 (OAuth2.0認可)

Slide 12

Slide 12 text

柔軟なテストのしくみ テストスクリプト ● 各APIリクエストにスクリプト( JavaScript)の記述ができる ● リクエスト送信前 (pre-request) とレスポンス受信後(post-response)のフェーズで実行可能 ● 各リクエストには複数のテストを登録でき、それぞれに「合格」「失敗」の結果が出る ● Mochaベースのテストフレームワークで、 AssertionライブラリとしてChai.js利用可能 ● ローコード支援機能としてコードスニペットや AIアシスタント Postbot)の利用が可能 @postman_japan スクリプト 実行フェーズ テスト結果

Slide 13

Slide 13 text

柔軟なテストのしくみ テストスクリプト @postman_japan // ステータスコードが 200であることを確認 pm.test("Status code is 200", function () { pm.response.to.have.status(200); }); // レスポンスが JSONであることを確認 pm.test("Response is in JSON format", function () { pm.response.to.be.json; }); // レスポンスのボディが期待通りの構造と値を持っていることを確認 pm.test("Response has expected contract", function () { const jsonData = pm.response.json(); // idフィールドが数値で値が 1であることを確認 pm.expect(jsonData).to.have.property("id", 1); pm.expect(jsonData.id).to.be.a("number"); // nameフィールドが文字列で "Taro"であることを確認 pm.expect(jsonData).to.have.property("name", "Taro"); pm.expect(jsonData.name).to.be.a("string"); // emailフィールドが文字列で "[email protected]"であることを確認 pm.expect(jsonData).to.have.property("email", "[email protected]"); pm.expect(jsonData.email).to.be.a("string"); }); コントラクトテスト 認可テスト(ユーザーの権限確認) // 不正なトークンを設定 // ヘッダー Authorization: 'Bearer invalidToken' pm.test("Forbidden Check: Should return 403", function () {  // 403 Forbidden エラーチェック pm.expect(response.code).to.eql(403); }); 認証テスト(ユーザーの確認) // 認証が必要なエンドポイントに対して認証トークンなしで送信 pm.test("Unauthorized Check: Should return 401", function () { // 401 Unauthorized エラーチェック pm.expect(response.code).to.eql(401); });

Slide 14

Slide 14 text

柔軟なテストのしくみ テストスクリプト 複数のリクエストを組み合わせてシナリオテスト、 E2Eテストも作れる コレクション APIリクエスト① テスト サンプル APIリクエスト② テスト サンプル APIリクエスト③ テスト サンプル 複数リクエストで構成されたシナリオテストが可能 Request ① POST /regist Request ② GET /get Request ③ POST /unregist スクリプト @postman_japan

Slide 15

Slide 15 text

柔軟なテストのしくみ コレクションランナー 複数のAPIリクエストをまとめて実行可能なコンポーネント @postman_japan 実行 実行結果詳細表示 サマリー結果表示 順番入れ替え可能 実行方法選択 手動 / スケジュール実行 イテレーション数 遅延秒数 データファイル 指定可能 選択 コレクションメニュー コレクションランナー実行方法設定

Slide 16

Slide 16 text

継続的に API を安全に保つ モニター ● 定期的にコレクションに登録されているテストを実行し、その結果を時系列で確認できる ● テスト失敗でアラート通知設定可能(メール通知、Slack、外部APMサービスなど) ● 複数のリージョンからのテスト実行が可能(有償プラン機能) ● リグレッションテスト、ヘルスチェック、外形監視などの用途に活用可能 @postman_japan イベント 送信 PagerDuty Datadog NewRelic Datadog dashboardイメージ Slack Email Microsoft Teams Splunk

Slide 17

Slide 17 text

継続的に API を安全に保つ Postman CLI & CI/CD PostmanはコレクションはPostman CLI (コマンドラインインターフェース )から実行可能。これを CI/CDに組み 込むことで継続的な APIテストの実行が可能となる # Postmanにログイン postman login --with-api-key {{postman-api-key}} # コレクションのテスト実行 postman collection run {{collection-ID}} # API定義に対してセキュリティ・ガバナンスチェック postman api lint {{api-definition-ID}} Postman CLIでのcollection run実行イメージ GitHub ActionsでのPostmanテストの実行イメージ

Slide 18

Slide 18 text

機密情報を安全に扱う機能 Postman Vault ● シークレットトークン、パスワードなど機密データを安全に Postmanのローカルインスタンスに保存して再 利用できる仕組み。データは Postman Vault 内で暗号化され保存される ● Enterpriseプランかつ Advanced Security Administration アドオンを購入することで外部Vaultインテグレーショ ンの活用も可能 @postman_japan 利用可能なドメインを限定できる {{vault:secret-name}} で環境、認 可設定などワークスペース全体で利 用可能 外部キー管理サービスに格納されたシークレット 情報を Postman 変数として認証などに利用可能 1Password AWS Secret Manager Azure Key Vault HashiCorp Vault

Slide 19

Slide 19 text

一貫性のあるルールを適用 API セキュリティ・ガバナンスチェック ● APIクライアントサイドからのアプローチで、代表的な APIセキュリティチェックとAPIにまつわる 設定の一貫性(ガバナンス)のチェックが可能 ● API lintとして手動もしくはCI/CDなどを通じた継続的確認が可能 @postman_japan APIセキュリティ ● セキュリティ衛生状態 ● 認証と認可の脆弱性 ● クォータの実装 ● 適切なセキュリティヘッダー ● カスタムルールの追加 APIガバナンス ● 全体統制の設定 ○ API文書の整備、テスト実施、API設 定、誤ってトークンを公開していない か、など ● カスタムルールの追加 https://www.postman.com/api-platform/api-security/ https://www.postman.com/api-platform/api-governance/

Slide 20

Slide 20 text

一貫性のあるルールを適用 API セキュリティ・ガバナンスチェック 問題検出内容一覧 検出ルール設定

Slide 21

Slide 21 text

API開発ライフサイクルにおける各ステージでの活用例 定義 設計 開発 テスト セキュリティ デプロイ 監視・観測 ビジネス システム Security ・・・ ドキュメント コード管理 システム設定 モック API Contracts (スキーマ) APIサーバー 開発 API Gateway 開発 トラフィック キャプチャ セキュリティ テスト 要件 Postman コレクション generate パフォーマンス テスト Contracts テスト E2E テスト ソースコード 成果物 commit 自動テスト APIサーバー Build/Deploy API Gateway Build/Deploy CI/CD ・・・ 配布 モニター アラート APM レポート APIカタログ API 開発ポータル trigger integration trigger ユーザー フィードバック Feedback loop UIテスト Stub generate 参考 @postman_japan

Slide 22

Slide 22 text

まとめ APIの安全性を保つために活用できるPostmanの機能を紹介しました ● 認証・認可設定のハードルを下げるしくみ ● 柔軟なテストのしくみ ● 継続的に API を安全に保つ ● 機密情報を安全に扱う機能 ● セキュリティ・ガバナンスチェック なお、言うまでもありませんが、 Postmanだけで全てのテストをカバーできるわけではありません(例 , 高度な 脆弱性スキャン、E2Eテスト、など)。テストは多層的に実施することが望ましく、ユニットテストや E2Eテストな ど、各レイヤーでのテストや他のツール・テスト戦略を併用することで、システム全体の品質を確保することが 重要です。 @postman_japan

Slide 23

Slide 23 text

Postman Connpass グループ API Night(勉強会)& ワークショップ https://postman.connpass.com/ Postman イベントにぜひご参加ください Postman Japan X アカウント @postman_japan @postman_japan

Slide 24

Slide 24 text

ありがとうございました @postman_japan