SIGN IN SIGN UP

Welcome to the AWS Code Examples Repository. This repo contains code examples used in the AWS documentation, AWS SDK Developer Guides, and more. For more information, see the Readme.md file below.

0 0 102 Java
# Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
# SPDX-License-Identifier: Apache-2.0
"""
Purpose
Shows how to use the AWS SDK for Python (Boto3) with AWS Config to create and
manage configuration rules.
"""
import logging
from pprint import pprint
import boto3
from botocore.exceptions import ClientError
logger = logging.getLogger(__name__)
# snippet-start:[python.example_code.config-service.ConfigWrapper]
class ConfigWrapper:
"""
Encapsulates AWS Config functions.
"""
def __init__(self, config_client):
"""
:param config_client: A Boto3 AWS Config client.
"""
self.config_client = config_client
# snippet-end:[python.example_code.config-service.ConfigWrapper]
# snippet-start:[python.example_code.config-service.PutConfigRule]
def put_config_rule(self, rule_name):
"""
Sets a configuration rule that prohibits making Amazon S3 buckets publicly
readable.
:param rule_name: The name to give the rule.
"""
try:
self.config_client.put_config_rule(
ConfigRule={
"ConfigRuleName": rule_name,
"Description": "S3 Public Read Prohibited Bucket Rule",
"Scope": {
"ComplianceResourceTypes": [
"AWS::S3::Bucket",
],
},
"Source": {
"Owner": "AWS",
"SourceIdentifier": "S3_BUCKET_PUBLIC_READ_PROHIBITED",
},
"InputParameters": "{}",
"ConfigRuleState": "ACTIVE",
}
)
logger.info("Created configuration rule %s.", rule_name)
except ClientError:
logger.exception("Couldn't create configuration rule %s.", rule_name)
raise
# snippet-end:[python.example_code.config-service.PutConfigRule]
# snippet-start:[python.example_code.config-service.DescribeConfigRules]
def describe_config_rule(self, rule_name):
"""
Gets data for the specified rule.
:param rule_name: The name of the rule to retrieve.
:return: The rule data.
"""
try:
response = self.config_client.describe_config_rules(
ConfigRuleNames=[rule_name]
)
rule = response["ConfigRules"]
logger.info("Got data for rule %s.", rule_name)
except ClientError:
logger.exception("Couldn't get data for rule %s.", rule_name)
raise
else:
return rule
# snippet-end:[python.example_code.config-service.DescribeConfigRules]
# snippet-start:[python.example_code.config-service.DeleteConfigRule]
def delete_config_rule(self, rule_name):
"""
Delete the specified rule.
:param rule_name: The name of the rule to delete.
"""
try:
self.config_client.delete_config_rule(ConfigRuleName=rule_name)
logger.info("Deleted rule %s.", rule_name)
except ClientError:
logger.exception("Couldn't delete rule %s.", rule_name)
raise
# snippet-end:[python.example_code.config-service.DeleteConfigRule]
def usage_demo():
print("-" * 88)
print("Welcome to the AWS Config demo!")
print("-" * 88)
logging.basicConfig(level=logging.INFO, format="%(levelname)s: %(message)s")
config = ConfigWrapper(boto3.client("config"))
rule_name = "DemoS3BucketRule"
print(f"Creating AWS Config rule '{rule_name}'...")
config.put_config_rule(rule_name)
print(f"Describing AWS Config rule '{rule_name}'...")
rule = config.describe_config_rule(rule_name)
pprint(rule)
print(f"Deleting AWS Config rule '{rule_name}'...")
config.delete_config_rule(rule_name)
print("Thanks for watching!")
print("-" * 88)
if __name__ == "__main__":
usage_demo()