Source code for aws_session_recorder.lib.schema.role

from typing import TYPE_CHECKING, Dict, Union

from typing import List

import sqlalchemy as sa  # type: ignore
from sqlalchemy.orm import relationship
from sqlalchemy_utils import JSONType  # type: ignore

from aws_session_recorder.lib.helpers import AlwaysDoNothing
from aws_session_recorder.lib.schema.identity import Identity, InlinePolicy
from aws_session_recorder.lib.schema.policy import Policy

if TYPE_CHECKING:
    from mypy_boto3_iam import type_defs as t  # type: ignore
else:
    t = AlwaysDoNothing()
    client = AlwaysDoNothing()


[docs]class Role(Identity): __tablename__ = "role" RoleName: str = sa.Column(sa.String, primary_key=True) RoleId: str = sa.Column(sa.String) AssumeRolePolicyDocument: dict = sa.Column(JSONType) MaxSessionDuration: int = sa.Column(sa.Integer) RoleLastUsed: dict = sa.Column(JSONType) Description: str = sa.Column(sa.String) arn = sa.Column(sa.String, sa.ForeignKey('identity.Arn')) attached_policies: List['Policy'] = relationship('RolePolicyAttachments', back_populates='role') inline_policies: List['RolePolicy'] = relationship("RolePolicy", cascade="all, delete-orphan", back_populates="role") __mapper_args__ = { 'polymorphic_identity': 'role' }
[docs]class InstanceProfile(Identity): __tablename__ = "instance_profile" InstanceProfileName: str = sa.Column(sa.String, primary_key=True) InstanceProfileId: str = sa.Column(sa.String) AssumeRolePolicyDocument: dict = sa.Column(JSONType) # TODO Should reference a role Roles: List[dict] = sa.Column(JSONType) arn = sa.Column(sa.String, sa.ForeignKey('identity.Arn')) __mapper_args__ = { 'polymorphic_identity': 'instance_profile' }
[docs]class RolePolicy(InlinePolicy): __tablename__ = "role_policy" def __init__(self, resp: Union[t.GetRolePolicyResponseTypeDef, Dict]): super().__init__(**resp) policy_name = sa.Column(sa.String, sa.ForeignKey('inline_policy.PolicyName'), primary_key=True) RoleName = sa.Column(sa.String, sa.ForeignKey('role.RoleName')) role: 'List[Role]' = relationship("Role", back_populates="inline_policies") __mapper_args__ = { 'polymorphic_identity': 'role' }