| subject: namespace:ns |
| revision: "2022" |
| rules: |
| - selector: # must be empty for preprocessing adapters |
| aspects: |
| # Fetch the API key and use it to set various request attributes. |
| # This is where the adapter should cache, because this one gets called three times |
| # (check, quota, and report) |
| - kind: attributes |
| adapter: apigeeAttributes |
| params: |
| input_expressions: |
| apiKey: request.headers["apikey"] | "INVALID_KEY" |
| requestPath: request.path | "/" |
| attribute_bindings: |
| authorization.success.string: successString |
| authorization.success: success |
| authorization.client.id: clientID |
| authorization.application.name: applicationName |
| authorization.apiproduct.name: apiProduct |
| # In "check" reject the request if the key is invalid. It'd be nice if we could |
| # customize the error here. We could build yet another adapter for that purpose! |
| - kind: lists |
| adapter: authorizationChecker |
| params: |
| checkExpression: authorization.success.string |
| # This is a simpler way to achieve the above! |
| #- kind: lists |
| # adapter: apigeeAPIKey |
| # params: |
| # checkExpression: request.headers["apikey"] |
| - kind: quotas |
| params: |
| quotas: |
| - descriptorName: RequestCount |
| maxAmount: 5000 |
| expiration: 1s |
| #- kind: access-logs |
| # params: |
| # logName: accesslog.default |
| # log: |
| # descriptorName: accesslog.common |
| # labels: |
| # originIp: source.ip |
| # sourceUser: source.uid |
| # timestamp: request.time |
| # method: request.method | "http" |
| # url: request.path |
| # protocol: request.scheme |
| # responseCode: response.code |
| # responseSize: response.size |
| - kind: access-logs |
| adapter: apigeeAnalytics |
| params: |
| logName: accesslog.apigee |
| log: |
| descriptorName: accesslog.apigee |
| labels: |
| sourceIP: source.ip |
| urlPath: request.path |
| hostHeader: request.host |
| httpMethod: request.method |
| userAgent: request.useragent |
| requestTime: request.time |
| responseTime: response.time |
| responseCode: response.code | 200 |
| proxyName: target.service | "istio_service" |
| proxyRevision: proxy.revision | 1 |
| clientID: authorization.client.id | "" |
| applicationName: authorization.application.name | "" |
| apiProduct: authorization.apiproduct.name | "" |