197 lines
7.5 KiB
Markdown
197 lines
7.5 KiB
Markdown
# AWS Config
|
|
|
|
**Protocol:** JSON 1.1 (`X-Amz-Target: StarlingDoveService.*`)
|
|
**Endpoint:** `POST http://localhost:4566/`
|
|
|
|
## Supported Actions
|
|
|
|
### Config Rules
|
|
|
|
| Action | Description |
|
|
|---|---|
|
|
| `PutConfigRule` | Create or update a config rule (full rule shape round-trips: description, scope, source details, input parameters, execution frequency, evaluation modes) |
|
|
| `DeleteConfigRule` | Delete a config rule and its evaluation results |
|
|
| `DescribeConfigRules` | List config rules, optionally filtered by name, paginated via `NextToken` |
|
|
| `DescribeConfigRuleEvaluationStatus` | Get evaluation status for config rules |
|
|
| `StartConfigRulesEvaluation` | Trigger evaluation for config rules |
|
|
|
|
### Compliance & Evaluations
|
|
|
|
| Action | Description |
|
|
|---|---|
|
|
| `PutEvaluations` | Report evaluation results for a config rule (supports `TestMode`) |
|
|
| `PutExternalEvaluation` | Report a single external evaluation for a config rule |
|
|
| `DeleteEvaluationResults` | Delete all evaluation results for a config rule |
|
|
| `DescribeComplianceByConfigRule` | Get rule-level compliance aggregated from reported evaluations |
|
|
| `DescribeComplianceByResource` | Get resource-level compliance aggregated across rules |
|
|
| `GetComplianceDetailsByConfigRule` | List the evaluation results recorded for a rule |
|
|
| `GetComplianceDetailsByResource` | List the evaluation results recorded for a resource |
|
|
| `GetComplianceSummaryByConfigRule` | Count compliant and non-compliant rules |
|
|
| `GetComplianceSummaryByResourceType` | Count compliant and non-compliant resources, grouped by type |
|
|
|
|
### Configuration Recorder
|
|
|
|
| Action | Description |
|
|
|---|---|
|
|
| `PutConfigurationRecorder` | Create or update a configuration recorder |
|
|
| `DescribeConfigurationRecorders` | List configuration recorders |
|
|
| `DeleteConfigurationRecorder` | Delete a configuration recorder |
|
|
| `StartConfigurationRecorder` | Start recording configuration changes |
|
|
| `StopConfigurationRecorder` | Stop recording configuration changes |
|
|
| `DescribeConfigurationRecorderStatus` | Get the status of configuration recorders |
|
|
|
|
### Delivery Channel
|
|
|
|
| Action | Description |
|
|
|---|---|
|
|
| `PutDeliveryChannel` | Create or update a delivery channel |
|
|
| `DescribeDeliveryChannels` | List delivery channels |
|
|
| `DeleteDeliveryChannel` | Delete a delivery channel (fails while the recorder is running) |
|
|
|
|
### Retention Configuration
|
|
|
|
| Action | Description |
|
|
|---|---|
|
|
| `PutRetentionConfiguration` | Set the retention period (30-2557 days) |
|
|
| `DescribeRetentionConfigurations` | List retention configurations |
|
|
| `DeleteRetentionConfiguration` | Delete the retention configuration |
|
|
|
|
### Conformance Packs
|
|
|
|
| Action | Description |
|
|
|---|---|
|
|
| `PutConformancePack` | Create or update a conformance pack |
|
|
| `DeleteConformancePack` | Delete a conformance pack |
|
|
| `DescribeConformancePacks` | List conformance packs, paginated via `Limit`/`NextToken` |
|
|
| `DescribeConformancePackStatus` | Get the deployment status of conformance packs |
|
|
|
|
### Aggregation Authorizations
|
|
|
|
| Action | Description |
|
|
|---|---|
|
|
| `PutAggregationAuthorization` | Authorize an account and region to aggregate this account's Config data |
|
|
| `DescribeAggregationAuthorizations` | List aggregation authorizations, paginated via `Limit`/`NextToken` |
|
|
| `DeleteAggregationAuthorization` | Revoke an aggregation authorization |
|
|
|
|
### Tagging
|
|
|
|
| Action | Description |
|
|
|---|---|
|
|
| `TagResource` | Add tags to a Config resource |
|
|
| `UntagResource` | Remove tags from a Config resource |
|
|
| `ListTagsForResource` | List tags on a Config resource |
|
|
|
|
## Configuration
|
|
|
|
| Variable | Default | Description |
|
|
|---|---|---|
|
|
| `FLOCI_SERVICES_CONFIGSERVICE_ENABLED` | `true` | Enable or disable the service |
|
|
|
|
## Examples
|
|
|
|
```bash
|
|
export AWS_ENDPOINT_URL=http://localhost:4566
|
|
|
|
# Create a config rule
|
|
aws configservice put-config-rule --config-rule '{
|
|
"ConfigRuleName": "s3-bucket-versioning",
|
|
"Description": "Checks that versioning is enabled",
|
|
"Scope": {"ComplianceResourceTypes": ["AWS::S3::Bucket"]},
|
|
"Source": {
|
|
"Owner": "AWS",
|
|
"SourceIdentifier": "S3_BUCKET_VERSIONING_ENABLED"
|
|
}
|
|
}'
|
|
|
|
# List config rules
|
|
aws configservice describe-config-rules
|
|
|
|
# Report evaluation results (the ResultToken is the rule name, see Deviations)
|
|
aws configservice put-evaluations \
|
|
--result-token s3-bucket-versioning \
|
|
--evaluations '[{
|
|
"ComplianceResourceType": "AWS::S3::Bucket",
|
|
"ComplianceResourceId": "my-bucket",
|
|
"ComplianceType": "NON_COMPLIANT",
|
|
"Annotation": "Versioning is suspended",
|
|
"OrderingTimestamp": 1700000000.0
|
|
}]'
|
|
|
|
# Rule compliance now reflects the reported evaluations
|
|
aws configservice describe-compliance-by-config-rule \
|
|
--config-rule-names s3-bucket-versioning
|
|
|
|
# Inspect per-resource evaluation results
|
|
aws configservice get-compliance-details-by-config-rule \
|
|
--config-rule-name s3-bucket-versioning
|
|
|
|
# Set the retention period
|
|
aws configservice put-retention-configuration --retention-period-in-days 365
|
|
|
|
# Create a configuration recorder
|
|
aws configservice put-configuration-recorder --configuration-recorder '{
|
|
"name": "default",
|
|
"roleARN": "arn:aws:iam::012345678901:role/config-role",
|
|
"recordingGroup": {
|
|
"allSupported": true,
|
|
"includeGlobalResourceTypes": true
|
|
}
|
|
}'
|
|
|
|
# Start recording
|
|
aws configservice start-configuration-recorder --configuration-recorder-name default
|
|
|
|
# Check recorder status
|
|
aws configservice describe-configuration-recorder-status
|
|
|
|
# Create a conformance pack
|
|
aws configservice put-conformance-pack \
|
|
--conformance-pack-name my-pack \
|
|
--template-body "Resources: {}"
|
|
|
|
# List conformance packs
|
|
aws configservice describe-conformance-packs
|
|
|
|
# Authorize another account to aggregate this account's data
|
|
aws configservice put-aggregation-authorization \
|
|
--authorized-account-id 111122223333 \
|
|
--authorized-aws-region eu-west-1
|
|
|
|
# List aggregation authorizations
|
|
aws configservice describe-aggregation-authorizations
|
|
|
|
# Tag a resource
|
|
aws configservice tag-resource \
|
|
--resource-arn arn:aws:config:us-east-1:000000000000:config-rule/config-rule-abc123 \
|
|
--tags Key=env,Value=dev
|
|
|
|
# Delete a config rule
|
|
aws configservice delete-config-rule --config-rule-name s3-bucket-versioning
|
|
```
|
|
|
|
## Deviations
|
|
|
|
!!! note
|
|
Compliance is driven entirely by evaluations reported through `PutEvaluations` and
|
|
`PutExternalEvaluation` — Floci does not record resource configurations or run rule
|
|
evaluations itself. Until an evaluation is reported, compliance returns
|
|
`INSUFFICIENT_DATA`.
|
|
|
|
- **ResultToken**: real AWS hands custom rules an opaque token inside the evaluation
|
|
event. Floci has no evaluation event, so `PutEvaluations` expects the config rule
|
|
name as the token (a `<rule-name>:<suffix>` form is also accepted).
|
|
- `StartConfigRulesEvaluation` marks the rule as invoked but does not call the rule's
|
|
Lambda function.
|
|
- `FirstActivatedTime` and invocation timestamps are runtime state and are not
|
|
persisted across restarts.
|
|
- `DescribeConfigRules` and `DescribeComplianceByConfigRule` use a fixed page size
|
|
of 25.
|
|
- Configuration recorders and delivery channels are stored and validated, but no
|
|
configuration items or snapshots are produced.
|
|
- Conformance pack status is always `CREATE_SUCCESSFUL`; pack templates are stored,
|
|
not evaluated.
|
|
- `PutAggregationAuthorization` records the authorization and returns its ARN, but no
|
|
data is aggregated: configuration aggregators are not emulated.
|
|
`DeleteAggregationAuthorization` on an authorization that does not exist succeeds,
|
|
because the Config API models no "not found" error for that operation.
|