|
| 1 | +import logging |
| 2 | +import boto3 |
| 3 | + |
| 4 | +from spaceone.core import utils |
| 5 | +from spaceone.core.connector import BaseConnector |
| 6 | +from spaceone.monitoring.error import * |
| 7 | +from spaceone.monitoring.connector.aws_boto_connector.cloud_watch import CloudWatch |
| 8 | + |
| 9 | +__all__ = ['AWSBotoConnector'] |
| 10 | + |
| 11 | +_LOGGER = logging.getLogger(__name__) |
| 12 | + |
| 13 | + |
| 14 | +class AWSBotoConnector(BaseConnector): |
| 15 | + |
| 16 | + def __init__(self, transaction, config): |
| 17 | + super().__init__(transaction, config) |
| 18 | + |
| 19 | + def create_session(self, options: dict, secret_data: dict): |
| 20 | + self._check_secret_data(secret_data) |
| 21 | + |
| 22 | + aws_access_key_id = secret_data['aws_access_key_id'] |
| 23 | + aws_secret_access_key = secret_data['aws_secret_access_key'] |
| 24 | + region_name = secret_data.get('region_name') |
| 25 | + role_arn = secret_data.get('role_arn') |
| 26 | + |
| 27 | + try: |
| 28 | + if role_arn: |
| 29 | + self._create_session_with_assume_role(aws_access_key_id, aws_secret_access_key, region_name, role_arn) |
| 30 | + else: |
| 31 | + self._create_session_with_access_key(aws_access_key_id, aws_secret_access_key, region_name) |
| 32 | + except Exception as e: |
| 33 | + raise ERROR_INVALID_CREDENTIALS() |
| 34 | + |
| 35 | + @staticmethod |
| 36 | + def _check_secret_data(secret_data): |
| 37 | + if 'aws_access_key_id' not in secret_data: |
| 38 | + raise ERROR_REQUIRED_PARAMETER(key='secret.aws_access_key_id') |
| 39 | + |
| 40 | + if 'aws_secret_access_key' not in secret_data: |
| 41 | + raise ERROR_REQUIRED_PARAMETER(key='secret.aws_secret_access_key') |
| 42 | + |
| 43 | + def _create_session_with_access_key(self, aws_access_key_id, aws_secret_access_key, region_name): |
| 44 | + self.session = boto3.Session(aws_access_key_id=aws_access_key_id, |
| 45 | + aws_secret_access_key=aws_secret_access_key, |
| 46 | + region_name=region_name) |
| 47 | + |
| 48 | + sts = self.session.client('sts') |
| 49 | + sts.get_caller_identity() |
| 50 | + |
| 51 | + def _create_session_with_assume_role(self, aws_access_key_id, aws_secret_access_key, region_name, role_arn): |
| 52 | + self._create_session_with_access_key(aws_access_key_id, aws_secret_access_key, region_name) |
| 53 | + |
| 54 | + sts = self.session.client('sts') |
| 55 | + assume_role_object = sts.assume_role(RoleArn=role_arn, RoleSessionName=utils.generate_id('AssumeRoleSession')) |
| 56 | + credentials = assume_role_object['Credentials'] |
| 57 | + |
| 58 | + self.session = boto3.Session(aws_access_key_id=credentials['AccessKeyId'], |
| 59 | + aws_secret_access_key=credentials['SecretAccessKey'], |
| 60 | + region_name=region_name, |
| 61 | + aws_session_token=credentials['SessionToken']) |
| 62 | + |
| 63 | + def list_metrics(self, *args, **kwargs): |
| 64 | + cw = CloudWatch(self.session) |
| 65 | + return cw.list_metrics(*args, **kwargs) |
| 66 | + |
| 67 | + def get_metric_data(self, *args, **kwargs): |
| 68 | + cw = CloudWatch(self.session) |
| 69 | + return cw.get_metric_data(*args, **kwargs) |
0 commit comments