Соединения AWS Glue из секретного менеджера AWS

Есть ли способ получить пароль от диспетчера секретов AWS при создании соединений JDBC в AWS Glue, а не вручную?


person precious    schedule 02.07.2019    source источник


Ответы (2)


Мне пришлось сделать это в моем текущем проекте, чтобы подключиться к базе данных Cassandra, и вот как я это сделал. Я передаю фактический secrets_key в качестве параметра задания --SECRETS_KEY my/secrets/key

// here's method to pull from secrets manager
def retrieveSecrets(secrets_key: String) :Map[String,String] = {
    val awsSecretsClient = AWSSecretsManagerClientBuilder.defaultClient()
    val getSecretValueRequest = new GetSecretValueRequest().withSecretId(secrets_key)   
    val secretValue = awsSecretsClient.getSecretValue(getSecretValueRequest)
    val secretJson = secretValue.getSecretString()
    val result = JSON.parseFull(secretJson)
    val jsonMap:Map[String,String] = result.get.asInstanceOf[Map[String, String]]
    return jsonMap
    }

// main script where I invoke this call BEFORE the glue stuff is setup..
def main(sysArgs: Array[String]) {
  println("***** RETRIEVING Secrets from SecretsManager ****** ")
  // pull secrets from map
  val secretsMap = retrieveSecrets(secrets_key)
  val host_names = secretsMap.get("HOST_NAMES").get
  val user_id = secretsMap.get("USER_ID").get
  val password = secretsMap.get("PASSWORD").get

  // I needed to configure this BEFORE we create the spark Context
  val conf = setupCassandraConfiguration(host_names, user_id, password)    
  val sparkContext: SparkContext = new SparkContext(conf)         
  // now create the glue context using the spark context created with the cassandra options attached
  val glueContext: GlueContext = new GlueContext(sparkContext)
  Job.init(args("JOB_NAME"), glueContext, args.asJava)
  val spark = glueContext.getSparkSession

  println("***** ALL contexts created - starting loading tables ****** ")
  import spark.implicits._
  val myDF =  spark.read.format("org.apache.spark.sql.cassandra").options(Map( "table" -> "my_table", "keyspace" -> "my_keyspace" )).load()
}
person tjanusz    schedule 09.07.2019
comment
Спасибо! Но я нашел другое решение, используя AWS Cloudformation, где мы можем вызвать диспетчер секретов AWS, чтобы получить имя пользователя и пароль при создании соединения JDBC. - person precious; 11.07.2019
comment
Не могли бы вы поделиться своим решением в качестве ответа? - person jawsnnn; 22.06.2021

проверьте этот пример здесь - они использовали секретный менеджер https://aws.amazon.com/blogs/big-data/use-aws-glue-to-run-etl-jobs-against-non-native-jdbc-data-sources/

person mishkin    schedule 06.10.2020