class_docstr: Loads credentials that are housed on AWS SSM, or cached locally.
  
  Helper service to OutputDispatcher.
  
  OutputDispatcher implementations may require credentials to authenticate with an external
  gateway. All credentials for OutputDispatchers are to be stored in a single parameter in AWS SSM
  and are encrypted with AWS KMS. When alerts are dispatched via OutputDispatchers, these
  encrypted credentials are downloaded and cached locally on the filesystem. Then, AWS KMS is
  used to decrypt the credentials when in use.
  
  Public methods:
      load_credentials: Returns a dict of the credentials requested
      get_local_credentials_temp_dir(): Returns full path to a temporary directory where all
          encrypted credentials are cached.
class_docstr_tok: ["Loads","credentials","that","are","housed","on","AWS","SSM",",","or","cached","locally",".","Helper","service","to","OutputDispatcher",".","OutputDispatcher","implementations","may","require","credentials","to","authenticate","with","an","external","gateway",".","All","credentials","for","OutputDispatchers","are","to","be","stored","in","a","single","parameter","in","AWS","SSM","and","are","encrypted","with","AWS","KMS",".","When","alerts","are","dispatched","via","OutputDispatchers",",","these","encrypted","credentials","are","downloaded","and","cached","locally","on","the","filesystem",".","Then",",","AWS","KMS","is","used","to","decrypt","the","credentials","when","in","use",".","Public","methods",":","load_credentials",":","Returns","a","dict","of","the","credentials","requested","get_local_credentials_temp_dir","(",")",":","Returns","full","path","to","a","temporary","directory","where","all","encrypted","credentials","are","cached","."]
docstr: Saves given credentials into SSM.
  
  Args:
      descriptor (str): OutputDispatcher descriptor
      kms_key_alias (str): KMS Key alias provided by configs
      props (Dict(str, OutputProperty)): A dict containing strings mapped to OutputProperty
          objects.
  
  Returns:
      bool: True is credentials successfully saved. False otherwise.
docstr_tok: ["Saves","given","credentials","into","SSM",".","Args",":","descriptor","(","str",")",":","OutputDispatcher","descriptor","kms_key_alias","(","str",")",":","KMS","Key","alias","provided","by","configs","props","(","Dict","(","str",",","OutputProperty",")",")",":","A","dict","containing","strings","mapped","to","OutputProperty","objects",".","Returns",":","bool",":","True","is","credentials","successfully","saved",".","False","otherwise","."]
code: def save_credentials(self, descriptor, kms_key_alias, props):
      """Saves given credentials into SSM.
  
      Args:
          descriptor (str): OutputDispatcher descriptor
          kms_key_alias (str): KMS Key alias provided by configs
          props (Dict(str, OutputProperty)): A dict containing strings mapped to OutputProperty
              objects.
  
      Returns:
          bool: True is credentials successfully saved. False otherwise.
      """
  
      creds = {
          name: prop.value
          for (name, prop) in props.items()
          if prop.cred_requirement
      }
  
      credentials = Credentials(creds, False, self._region)
      return self._core_driver.save_credentials(
          descriptor, credentials, kms_key_alias
      )
  
imports: import json
  import os
  import shutil
  import tempfile
  from abc import abstractmethod
  from botocore.exceptions import ClientError
  from streamalert.shared.helpers.aws_api_client import AwsKms, AwsSsm
  from streamalert.shared.logger import get_logger
label_desc: Use image node_id 5 for calling the OutputCredentialsProvider obj's underlying member method code with example usage: obj.save_credentials(descriptor, kms_key_alias, props) and returns: self