Example #1
0
 def _get_rbp(self) -> ResponseGetRbp:
     """Get the resource based policy for this resource and store it"""
     logger.debug("Getting resource policy for %s" % self.arn)
     # When there is no policy, let's return an empty policy to avoid breaking things
     policy = constants.get_empty_policy()
     try:
         response = self.client.get_topic_attributes(TopicArn=self.arn)
         attributes = response.get("Attributes")
         if attributes.get("Policy"):
             policy = constants.get_empty_policy()
             policy["Statement"].extend(
                 json.loads(attributes.get("Policy")).get("Statement"))
         else:
             policy = constants.get_empty_policy()
         success = True
     except self.client.exceptions.ResourceNotFoundException as error:
         logger.critical(error)
         success = False
     except botocore.exceptions.ClientError as error:
         logger.critical(error)
         success = False
     policy_document = PolicyDocument(
         policy=policy,
         service=self.service,
         override_action=self.override_action,
         include_resource_block=self.include_resource_block,
         override_resource_block=self.override_resource_block,
         override_account_id_instead_of_principal=self.
         override_account_id_instead_of_principal,
     )
     response = ResponseGetRbp(policy_document=policy_document,
                               success=success)
     return response
Example #2
0
 def _get_rbp(self) -> ResponseGetRbp:
     """Get the resource based policy for this resource and store it"""
     logger.debug("Getting resource policy for %s" % self.arn)
     # When there is no policy, let's return an empty policy to avoid breaking things
     policy = constants.get_empty_policy()
     try:
         # https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/glacier.html#Glacier.Client.get_vault_access_policy
         response = self.client.get_vault_access_policy(vaultName=self.name)
         policy = json.loads(response.get("policy").get("Policy"))
         success = True
     # This is silly. If there is no access policy set on the vault, then it returns the same error as if the vault didn't exist.
     except self.client.exceptions.ResourceNotFoundException as error:
         logger.debug(error)
         success = True
     except botocore.exceptions.ClientError:
         success = False
     policy_document = PolicyDocument(
         policy=policy,
         service=self.service,
         override_action=self.override_action,
         include_resource_block=self.include_resource_block,
         override_resource_block=self.override_resource_block,
         override_account_id_instead_of_principal=self.
         override_account_id_instead_of_principal,
     )
     response = ResponseGetRbp(policy_document=policy_document,
                               success=success)
     return response
Example #3
0
 def _get_rbp(self) -> ResponseGetRbp:
     """Get the resource based policy for this resource and store it"""
     logger.debug("Getting resource policy for %s" % self.arn)
     policy = constants.get_empty_policy()
     try:
         response = self.client.get_bucket_policy(Bucket=self.name)
         policy = json.loads(response.get("Policy"))
         message = "200: Successfully obtained bucket policy for %s" % self.arn
         success = True
     except botocore.exceptions.ClientError as error:
         error_code = error.response['Error']['Code']
         message = f"{error_code}: {error.response.get('Error').get('Message')} for {error.response.get('Error').get('BucketName')}"
         if error.response['Error']['Code'] == "AccessDenied":
             success = False
         elif error.response['Error']['Code'] == "NoSuchBucketPolicy":
             success = True
         else:
             # This occurs when there is no resource policy attached
             success = True
     except Exception as error:
         message = error
         success = False
     logger.debug(message)
     policy_document = PolicyDocument(
         policy=policy,
         service=self.service,
         override_action=self.override_action,
         include_resource_block=self.include_resource_block,
         override_resource_block=self.override_resource_block,
         override_account_id_instead_of_principal=self.
         override_account_id_instead_of_principal,
     )
     response = ResponseGetRbp(policy_document=policy_document,
                               success=success)
     return response
Example #4
0
 def _get_rbp(self) -> ResponseGetRbp:
     """Get the resource based policy for this resource and store it"""
     logger.debug("Getting resource policy for %s" % self.arn)
     policy = constants.get_empty_policy()
     try:
         # https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/ecr.html#ECR.Client.get_repository_policy
         response = self.client.get_repository_policy(
             repositoryName=self.name)
         policy = json.loads(response.get("policyText"))
         success = True
     except self.client.exceptions.RepositoryPolicyNotFoundException:
         logger.debug("Policy not found. Setting policy document to empty.")
         success = True
     except self.client.exceptions.RepositoryNotFoundException:
         logger.critical("Repository does not exist")
         success = False
     except botocore.exceptions.ClientError:
         # When there is no policy, let's return an empty policy to avoid breaking things
         success = False
     policy_document = PolicyDocument(
         policy=policy,
         service=self.service,
         override_action=self.override_action,
         include_resource_block=self.include_resource_block,
         override_resource_block=self.override_resource_block,
         override_account_id_instead_of_principal=self.
         override_account_id_instead_of_principal,
     )
     response = ResponseGetRbp(policy_document=policy_document,
                               success=success)
     return response
Example #5
0
 def _get_rbp(self) -> ResponseGetRbp:
     logger.debug("Getting resource policy for %s" % self.arn)
     # When there is no policy, let's return an empty policy to avoid breaking things
     policy = constants.get_empty_policy()
     try:
         response = self.client.get_layer_version_policy(
             LayerName=self.name, VersionNumber=self.version)
         policy = json.loads(response.get("Policy"))
         success = True
     except self.client.exceptions.ResourceNotFoundException as error:
         logger.debug("The Policy does not exist. We will have to add it.")
         success = True
     except botocore.exceptions.ClientError as error:
         logger.critical(error)
         success = False
     policy_document = PolicyDocument(
         policy=policy,
         service=self.service,
         override_action=self.override_action,
         include_resource_block=self.include_resource_block,
         override_resource_block=self.override_resource_block,
         override_account_id_instead_of_principal=self.
         override_account_id_instead_of_principal,
     )
     response = ResponseGetRbp(policy_document=policy_document,
                               success=success)
     return response
Example #6
0
 def _get_rbp(self) -> ResponseGetRbp:
     """Get the resource based policy for this resource and store it"""
     policy = constants.get_empty_policy()
     try:
         # https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/acm-pca.html#ACMPCA.Client.get_policy
         response = self.client.get_policy(ResourceArn=self.arn)
         policy = json.loads(response.get("Policy"))
         success = True
     # This is dumb. "If either the private CA resource or the policy cannot be found, this action returns a ResourceNotFoundException."
     # That means we have to set it to true, even when the resource doesn't exist. smh.
     # That will only affect the expose command and not the smash command.
     except self.client.exceptions.ResourceNotFoundException:
         logger.debug(f"Resource {self.name} not found")
         success = True
     except botocore.exceptions.ClientError:
         # When there is no policy, let's return an empty policy to avoid breaking things
         success = False
     policy_document = PolicyDocument(
         policy=policy,
         service=self.service,
         override_action=self.override_action,
         include_resource_block=self.include_resource_block,
         override_resource_block=self.override_resource_block,
         override_account_id_instead_of_principal=self.
         override_account_id_instead_of_principal,
     )
     response = ResponseGetRbp(policy_document=policy_document,
                               success=success)
     return response
 def _get_rbp(self) -> ResponseGetRbp:
     """Get the resource based policy for this resource and store it"""
     logger.debug("Getting resource policy for %s" % self.arn)
     try:
         # https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/ses.html#SES.Client.list_identity_policies
         response = self.client.describe_elasticsearch_domain_config(DomainName=self.name)
         domain_config = response.get("DomainConfig")
         policy = domain_config.get("AccessPolicies").get("Options")
         if policy:
             policy = json.loads(policy)
         else:
             policy = constants.get_empty_policy()
         success = True
     except botocore.exceptions.ClientError:
         # When there is no policy, let's return an empty policy to avoid breaking things
         policy = constants.get_empty_policy()
         success = False
     policy_document = PolicyDocument(
         policy=policy,
         service=self.service,
         override_action=self.override_action,
         include_resource_block=self.include_resource_block,
         override_resource_block=self.override_resource_block,
         override_account_id_instead_of_principal=self.override_account_id_instead_of_principal,
     )
     response = ResponseGetRbp(policy_document=policy_document, success=success)
     return response
Example #8
0
 def _get_rbp(self) -> ResponseGetRbp:
     """Get the resource based policy for this resource and store it"""
     logger.debug("Getting resource policy for %s" % self.arn)
     try:
         response = self.client.get_resource_policy(SecretId=self.name)
         if response.get("ResourcePolicy"):
             policy = json.loads(response.get("ResourcePolicy"))
         else:
             policy = constants.get_empty_policy()
         success = True
     except botocore.exceptions.ClientError:
         # When there is no policy, let's return an empty policy to avoid breaking things
         policy = constants.get_empty_policy()
         success = False
     policy_document = PolicyDocument(
         policy=policy,
         service=self.service,
         override_action=self.override_action,
         include_resource_block=self.include_resource_block,
         override_resource_block=self.override_resource_block,
         override_account_id_instead_of_principal=self.
         override_account_id_instead_of_principal,
     )
     response = ResponseGetRbp(policy_document=policy_document,
                               success=success)
     return response
Example #9
0
 def _get_rbp(self) -> ResponseGetRbp:
     """Get the resource based policy for this resource and store it"""
     # If you do not know the names of the policies that are attached to the identity, you can use ListIdentityPolicies
     logger.debug("Getting resource policy for %s" % self.arn)
     # When there is no policy, let's return an empty policy to avoid breaking things
     policy = constants.get_empty_policy()
     try:
         # https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/ses.html#SES.Client.list_identity_policies
         response = self.client.list_identity_policies(Identity=self.name)
         # https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/ses.html#SES.Client.get_identity_policies
         policy_names = response.get("PolicyNames")
         if policy_names:
             response = self.client.get_identity_policies(Identity=self.name, PolicyNames=policy_names)
             policies = response.get("Policies")
             if constants.SID_SIGNATURE in policies:
                 policy = json.loads(policies.get(constants.SID_SIGNATURE))
             success = True
         else:
             policy = constants.get_empty_policy()
             success = True
     except botocore.exceptions.ClientError:
         success = False
     policy_document = PolicyDocument(
         policy=policy,
         service=self.service,
         override_action=self.override_action,
         include_resource_block=self.include_resource_block,
         override_resource_block=self.override_resource_block,
         override_account_id_instead_of_principal=self.override_account_id_instead_of_principal,
     )
     response = ResponseGetRbp(policy_document=policy_document, success=success)
     return response
Example #10
0
 def _get_rbp(self) -> ResponseGetRbp:
     """Get the resource based policy for this resource and store it"""
     # https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/kms.html#KMS.Client.get_key_policy
     logger.debug("Getting resource policy for %s" % self.arn)
     try:
         response = self.client.get_key_policy(KeyId=self.arn,
                                               PolicyName="default")
         if response.get("Policy"):
             policy = constants.get_empty_policy()
             policy["Statement"].extend(
                 json.loads(response.get("Policy")).get("Statement"))
         else:
             policy = constants.get_empty_policy()
         success = True
     except botocore.exceptions.ClientError:
         # When there is no policy, let's return an empty policy to avoid breaking things
         policy = constants.get_empty_policy()
         success = False
     policy_document = PolicyDocument(
         policy=policy,
         service=self.service,
         override_action=self.override_action,
         include_resource_block=self.include_resource_block,
         override_resource_block=self.override_resource_block,
         override_account_id_instead_of_principal=self.
         override_account_id_instead_of_principal,
     )
     response = ResponseGetRbp(policy_document=policy_document,
                               success=success)
     return response
Example #11
0
 def _get_rbp(self) -> ResponseGetRbp:
     """Get the resource based policy for this resource and store it"""
     logger.debug("Getting resource policy for %s" % self.arn)
     try:
         response = self.client.get_role(RoleName=self.name)
         policy = response.get("Role").get("AssumeRolePolicyDocument")
         success = True
     except self.client.exceptions.NoSuchEntityException:
         logger.critical(f"There is no resource with the name {self.name}")
         policy = constants.get_empty_policy()
         success = False
     except botocore.exceptions.ClientError:
         # When there is no policy, let's return an empty policy to avoid breaking things
         policy = constants.get_empty_policy()
         success = False
     policy_document = PolicyDocument(
         policy=policy,
         service=self.service,
         override_action=self.override_action,
         include_resource_block=self.include_resource_block,
         override_resource_block=self.override_resource_block,
         override_account_id_instead_of_principal=self.
         override_account_id_instead_of_principal,
     )
     response = ResponseGetRbp(policy_document=policy_document,
                               success=success)
     return response