【发布时间】:2021-10-25 19:39:06
【问题描述】:
在我的 android 应用程序中,我使用 Amazon S3 预签名 URL 并使用以下代码在应用程序中显示图像
var preSignedUrl = ""
val s3Client: AmazonS3Client?
val credentials: BasicAWSCredentials?
credentials = BasicAWSCredentials(BuildConfig.AWS_ACCESS_KEY_ID, BuildConfig.AWS_SECRET_ACCESS_KEY)
s3Client = AmazonS3Client(credentials)
try {
val s3URI = AmazonS3URI(imgUrl)
// Set the pre signed URL to expire after one day.
val expiration = Date()
var expTimeMillis: Long = Instant.now().toEpochMilli()
expTimeMillis += (1000 * 60 * 60 * 24 * 7).toLong()
expiration.time = expTimeMillis
val generateSignedUrlRequest = GeneratePresignedUrlRequest(s3URI.bucket, s3URI.key)
.withMethod(HttpMethod.GET)
.withExpiration(expiration)
val url: URL = s3Client.generatePresignedUrl(generateSignedUrlRequest)
preSignedUrl = url.toString()
Logger().logInfo("AWS", "getImagePreSignedUrl $preSignedUrl")
}catch (illEx: IllegalArgumentException){
Logger().logInfo("AWS", "getImagePreSignedUrl err ${illEx.message.toString()}")
}
return preSignedUrl
但在将应用程序发布到谷歌播放后,它给了我以下警告
Your app(s) expose Amazon Web Services credentials.
请告诉我如何在应用程序中实现这一点,无论是否在应用程序中存储 AWS 密钥和秘密?
【问题讨论】:
-
您使用什么 AWS 开发工具包来创建原生 Android 应用程序。看起来您正在编写 Kotlin 代码并使用 AWS SDK for Java V1
-
我正在使用这些
implementation 'com.amazonaws:aws-android-sdk-s3:2.25.0' implementation ('com.amazonaws:aws-android-sdk-mobile-client:2.25.0@aar') { transitive = true } implementation ('com.amazonaws:aws-android-sdk-auth-userpools:2.25.0@aar') { transitive = true } -
通常不会在设备上创建预签名 URL。您可以在 Lambda 之类的东西中创建一个端点,并通过某种用户验证将预签名的 URL 交还给应用程序以供其使用。
标签: android amazon-web-services kotlin amazon-s3 android-security