AWS S3 Bucket topic notification integration is possible within the Cloud8 Platform. Just follow the steps below:
1. Registering integration with AWS Bucket S3 #

- First find the Integrations option in the side menu, and click on the New Integration option.
- In the Type field , select the S3 Bucket option
- Fill in the remaining fields according to the bucket access and credentials settings for the integration.
2. New Notification with S3 in Best Practices #
After registering an integration of the “S3 Bucket” type, in “Integrations” on the platform, a
synchronization will be made with Best Practices. With this, it will be possible to view a new “S3” type notification in Best Practices, as shown below:
- In the Cloud8 Dashboard, access the Best Practices tab
- Within Best Practices , click on the “ Global Notifications ” button
- Select the “ Configure Notifications ” tab. The integrated S3 notification will be listed with the name.
NOTE : Since it is synchronized, it will not be possible to edit or delete the registration. To do this, use the “Integrations” screen within the Cloud8 platform.

3. Setting up Notification with S3 in Reporting Settings in Best Practices #
- Accessing the Best Practices tab, click on the Reports button , then select the Settings tab ;
- In the “ Notification ” field , select the notification registered in Step 1 ;
- Select the desired “ Scheduler ” for this configuration;
- Provider selection is optional;
- Choose the format in which you want to generate the report: PDF (default) or JSON;
- Set the level of detail of the report in the “ Version “ field. The default version is “detailed”;
- To finish your registration, just save.

When selecting a Provider, you can set its name as Prefix Type. Or you can select Custom and define a prefix as you like.

From this point on, Best Practices will upload the files as the reports are generated (both in PDF and JSON). Below we have an example of the S3 Bucket registered above, and with the report files.

If you set a Prefix, your files appears as bellow:

4. Best Practices Report Integration (JSON/DETAILED) #
JSON format structure #
providers: #
List of providers for the generated report. Each item in the list has two fields:
- id : AWS or Azure provider identifier
- name : name of the AWS or Azure provider
Example :
"providers": [
{
"id": "xxxxxxxxxxxx",
"name": "Provedor 1 (AWS)"
},
{
"id": "aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee",
"name": "Provedor 2 (Azure)"
}
]
reports: #
List of rules, results, settings, and unmonitored items that make up the report. Each item in the list has the following fields:
- category : rule category
- product : name of the cloud provider’s product/service (AWS or Azure)
- id : rule identifier
- rule : rule name
- description : rule description
- instant : date and time of execution in milliseconds
- headers : name of the columns in the results table
Example :
{
"category": "Cost Savings",
"product": "RDS - Database",
"id": "OLD_DATABASE_SNAPSHOTS",
"rule": "[Unused Resource] Old Database Snapshots",
"instant": 1643120438000,
"headers": [
"Region",
"Snapshot",
"Name",
"Days"
]
...
results: #
List of items that make up the results table, with the following fields:
- provider : provider identifier (same id as the providers field detailed above)
- results : results table, which contains the fields:
- columns : result items (follow the order of the columns defined in headers)
- kind : severity identifier of the provider line, with the worst result for it, which can be:
- DANGER : critical
- WARN : alert
- INFO : suggestion
- SUCCESS: sucesso
- CREDENTIAL_ISSUE : Issues with provider credentials
Example :
"results": [
{
"provider": "xxxxxxxxxxxx",
"results": [
{
"columns": [
"us-east-1",
"arn:aws:rds:us-east-1:xxxxxxxxxxxx:snapshot:public-database-snapshot",
"public-database-snapshot",
"272"
],
"kind": "WARN"
}
]
}
],
...
conditions: #
List of filter settings in the rule, containing the following fields:
- name : filter name
- option : name of the field to filter the result
- operation : operator that will be used when filtering the result
- value : value that will be filtered in the result
Example :
"conditions": [
{
"name": "Manual snapshots older than 180 days",
"option": "DatabaseSnapshot.name",
"operation": "=",
"value": "public-database-snapshot"
},
{
"name": "Manual snapshots older than 180 days",
"option": "DatabaseSnapshot.days",
"operation": ">=",
"value": "180"
}
]
...
excludes: #
List of user-selected items that will not be monitored in the rule:
- comments : item comment
- providers : list of providers and items that will not be monitored, which contains the following fields:
- provider : provider identifier
- excludes : list of unmonitored items, which contains the fields:
- columns : result items (follow the order of the columns defined in headers)
Example :
"excludes": [
{
"comments": "não monitorar este item",
"providers": [
{
"provider": "xxxxxxxxxxxx",
"excludes": [
{
"columns": [
"us-east-1",
"arn:aws:rds:us-east-1:xxxxxxxxxxxx:snapshot:public-database-snapshot",
"public-database-snapshot",
"273"
]
}
]
}
]
}
],
...
kind: #
Rule severity identifier, with the worst result for it, which can be:
- DANGER : critical
- WARN : alert
- INFO : suggestion
- SUCCESS: sucesso
- CREDENTIAL_ISSUE : Issues with provider credentials
Name of the generated file #
The generated files follow the following naming pattern:
- Customer code
- User code
- Report configuration code
- Generation date and time (format YYYY_MM_DDTHH_MM_SSZ)
- File extension (.pdf or .json format)
Example :
report_1_31_1144_2022_01_26T12_11_02Z
Being :
report_[código cliente]_[código do usuário]_[código configuração do relatório]_[YYYY_MM_DDTHH_MM_SSZ]
NOTE : Each generated file is unique, and is not overwritten.
5. Best Practices Report Integration (JSON/SUMMARIZED) #
JSON format structure #
providers: #
List of providers for the generated report. Each item in the list has two fields:
- id : AWS or Azure provider identifier
- name : name of the AWS or Azure provider
Example :
"providers": [
{
"id": "xxxxxxxxxxxx",
"name": "Provedor 1 (aws)"
},
{
"id": "aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee",
"name": "Provedor 2 (azure)"
}
]
reports: #
List of rules, results, settings, and unmonitored items that make up the report. Each item in the list has the following fields:
- category : rule category
- product : name of the cloud provider’s product/service (AWS or Azure)
- id : rule identifier
- rule : rule name
- instant : date and time of execution in milliseconds
- monthlySavings : estimated total savings (where applicable)
- headers : fixed “Affected entries” – column with quantity of reported items
Example :
{
{
"category": "Cost Savings",
"product": "EC2 / Virtual Machines - Compute",
"level": "Improvement",
"id": "COMPUTE_OPTIMIZER_EC2_INSTANCES_RECOMMENDATIONS",
"rule": "Compute Optimizer recommendations for EC2 instances",
"instant": 1672455600000,
"monthlySavings": "$0.88",
"headers": [
"Affected entries"
],
...
results: #
List of items that make up the results table, with the following fields:
- provider : provider identifier (same id as the providers field detailed above)
- results : results table, which contains the fields:
- columns : quantity of items reported
Example :
"results": [
{
"provider": "xxxxxxxxxxxx",
"results": [
{
"columns": [
2
]
}
]
}
]
...
Name of the generated file #
The files generated with the summarized version follow the following naming pattern:
- Customer code
- User code
- Report configuration code
- Report version (summarized)
- Generation date and time (format YYYY_MM_DDTHH_MM_SSZ)
- File extension (.pdf or .json format)
Example :
report_1_31_1144_summarized_2022_01_26T12_11_02Z
Being :
report_[código cliente]_[código do usuário]_[código configuração do relatório]_summarized_[YYYY_MM_DDTHH_MM_SSZ]
NOTE : Each generated file is unique, and is not overwritten.