Source code for ecs_composex.iam.import_sam_policies
# SPDX-License-Identifier: MPL-2.0
# Copyright 2020-2022 John Mille <john@compose-x.io>
"""
Module to import Policies templates from AWS SAM policies templates.
"""
import json
from importlib_resources import files as pkg_files
[docs]def import_and_cleanse_sam_policies():
"""
Function to go over each policy defined in AWS SAM policies and align it to ECS ComposeX expected format.
:return: The policies
:rtype: dict
"""
template_path = str(pkg_files("ecs_composex").joinpath("iam/sam_policies.json"))
with open(template_path) as policies_fd:
policies_orig = json.loads(policies_fd.read())["Templates"]
import_policies = {}
for name, value in policies_orig.items():
import_policies[name] = {
"Action": value["Definition"]["Statement"][0]["Action"],
"Effect": "Allow",
"Resource": ["${ARN}"],
}
return import_policies
[docs]def get_access_types(module_name: str, perms_path: str = None) -> dict:
"""
Retrieves the Permissions definitions for a given module
:param str module_name:
:param str perms_path: Override path to the permissions, instead of relying on module name
:return: the policies
:rtype: dict
"""
sam_policies = import_and_cleanse_sam_policies()
if not perms_path:
source = str(
pkg_files("ecs_composex").joinpath(
f"{module_name}/{module_name}_perms.json"
)
)
else:
source = perms_path
try:
with open(
source,
encoding="utf-8-sig",
) as perms_fd:
dyn_policies = json.loads(perms_fd.read())
sam_policies.update(dyn_policies)
return sam_policies
except OSError:
return sam_policies