Amazon API Gateway の OpenAPI 拡張プロパティを検証する Rust 製 CLI です。
cargo build --releasecargo run -- path/to/openapi.yaml
# security warning も CI failure として扱う場合
cargo run -- --deny-warnings path/to/openapi.yaml検証対象ファイルの拡張子は .yaml または .yml である必要があります。デフォルトでは、DoS 対策として 10 MiB を超える入力ファイルは読み込み前に拒否します。
検証結果は以下の終了コードで返します。
0: schema / semantic error なし(security warning のみの場合も、通常は0)1: schema / semantic error あり、または--deny-warnings指定時に warning あり2: 引数、拡張子、ファイル読み込み、YAML パースのエラー
コマンドの動作確認用に、正常系と異常系のサンプル YAML を examples/ に置いています。
# 正常系: exit code 0 で "No invalid properties found" を出力します
cargo run -- examples/valid-openapi.yaml
# 異常系: schema / semantic error を検出して exit code 1 で終了します
cargo run -- examples/invalid-openapi.yaml
# warning も CI failure として扱う挙動を確認できます
cargo run -- --deny-warnings examples/invalid-openapi.yaml現在は以下を検証します。
- root-level
x-amazon-apigateway-*extensions - path-level
x-amazon-apigateway-corsandx-amazon-apigateway-any-method - operation-level auth, authorizer, request-validator, and integration extensions
securityDefinitions.*/components.securitySchemes.*API Gateway auth extensionscomponents.x-amazon-apigateway-integrations.*
検証内容は以下です。
- 未知の
x-amazon-apigateway-*拡張プロパティ x-amazon-apigateway-api-key-source:HEADER,AUTHORIZERx-amazon-apigateway-binary-media-type: stringx-amazon-apigateway-binary-media-types: string arrayx-amazon-apigateway-cors: origins/methods/headers, credentials, max agex-amazon-apigateway-documentation: object または arrayx-amazon-apigateway-endpoint-configuration.types:EDGE,REGIONAL,PRIVATEx-amazon-apigateway-gateway-responses: status code, response parameters, response templatesx-amazon-apigateway-importexport-version: stringx-amazon-apigateway-minimum-compression-size:0以上10485760以下の整数x-amazon-apigateway-policy: objectx-amazon-apigateway-request-validator: stringx-amazon-apigateway-request-validators: request validator mapx-amazon-apigateway-tag-value: stringx-amazon-apigateway-auth: objectx-amazon-apigateway-authorizer: authorizer type, TTL, JWT configuration, identity/source fieldsx-amazon-apigateway-authtype: stringx-amazon-apigateway-integrationの未知のトップレベル integration プロパティx-amazon-apigateway-integration.type:AWS,HTTP,MOCK,HTTP_PROXY,AWS_PROXYx-amazon-apigateway-integration.connectionType:INTERNET,VPC_LINKx-amazon-apigateway-integration.contentHandling:CONVERT_TO_BINARY,CONVERT_TO_TEXTx-amazon-apigateway-integration.passthroughBehavior:WHEN_NO_MATCH,WHEN_NO_TEMPLATES,NEVERx-amazon-apigateway-integration.timeoutInMillis:50以上29000以下の整数x-amazon-apigateway-integration.tlsConfig.insecureSkipVerification: booleanx-amazon-apigateway-integration.requestParametersのキー prefix:integration.request.x-amazon-apigateway-integration.responses.*.responseParametersのキー prefix:method.response.header.
この validator の対応状況は、AWS と同等の完全 validation ではなく、以下のレベルで表現します。
- Basic: 型、enum、prefix、範囲、未知プロパティを検証する
- Semantic: 複数プロパティ間の整合性や必須項目を検証する
- Security lint: AWS には import できる可能性があるが、レビューすべき危険設定を warning として検出する
| Area | Basic | Semantic | Security lint |
|---|---|---|---|
| Root API Gateway extensions | ✅ | Partial | Partial |
| Path/operation API Gateway extensions | ✅ | Partial | Partial |
| Authorizer extensions | Partial | Partial | Partial |
| Resource policy | Object only | ❌ | Wildcard warning |
| Request validators | ✅ | ❌ | Disabled validator warning |
| CORS | ✅ | ❌ | Wildcard/credentials warning |
| Integration extensions | ✅ | Partial | TLS verification warning |
The following properties are parsed and at least partially validated. See Validation levels above for the distinction between basic validation, semantic validation, and security linting.
- x-amazon-apigateway-any-method
- x-amazon-apigateway-cors
- x-amazon-apigateway-api-key-source
- x-amazon-apigateway-auth
- x-amazon-apigateway-authorizer
- x-amazon-apigateway-authtype
- x-amazon-apigateway-binary-media-type
- x-amazon-apigateway-documentation
- x-amazon-apigateway-endpoint-configuration
- x-amazon-apigateway-gateway-responses
- x-amazon-apigateway-gateway-responses.gatewayResponse
- x-amazon-apigateway-gateway-responses.responseParameters
- x-amazon-apigateway-gateway-responses.responseTemplates
- x-amazon-apigateway-importexport-version
- x-amazon-apigateway-integration
- x-amazon-apigateway-integrations
- x-amazon-apigateway-integration.requestTemplates
- x-amazon-apigateway-integration.requestParameters
- x-amazon-apigateway-integration.responses
- x-amazon-apigateway-integration.response
- x-amazon-apigateway-integration.responseTemplates
- x-amazon-apigateway-integration.responseParameters
- x-amazon-apigateway-integration.tlsConfig
- x-amazon-apigateway-minimum-compression-size
- x-amazon-apigateway-policy
- x-amazon-apigateway-request-validator
- x-amazon-apigateway-request-validators
- x-amazon-apigateway-request-validators.requestValidator
- x-amazon-apigateway-tag-value
- Dependency security checks are configured in GitHub Actions with
cargo auditandcargo deny. - YAML parsing uses
serde_yaml_ng; parser migration notes are tracked indocs/serde-yaml-migration.md.