AWS SDK for Java 2.xを使ってS3の署名付きURLを生成する

環境

  • Kotlin 1.5.21
  • AWS ADK for Java 2.17.71

build.grade.ktsの編集

build.grade.ktsを編集して、dependenciesに以下の2行を追加する。

dependencies {
    implementation(platform("software.amazon.awssdk:bom:2.17.71")) // 追加
    implementation("software.amazon.awssdk:s3") // 追加
}

S3の署名付きURLを取得するコード

S3の署名付きURLを取得するコードは下記のようになる。(エラーチェックは省略している)

ドキュメントでは、アクセスキーとシークレットキーはcredentialsファイルに保存するように書かれている(Configure credentials)が、今回は関数に引数として渡している。

fun generateUrl(
    region: Region,
    bucketName: String,
    keyName: String,
    accessKey: String,
    secretKey: String
): URL? {
    val presigner = S3Presigner.builder()
        .region(region)
        .credentialsProvider(StaticCredentialsProvider.create(object : AwsCredentials {
            override fun accessKeyId(): String {
                return accessKey
            }

            override fun secretAccessKey(): String {
                return secretKey
            }
        }))
        .build()

    val getObjectRequest = GetObjectRequest.builder()
        .bucket(bucketName)
        .key(keyName)
        .build()
    val getObjectPresignRequest = GetObjectPresignRequest.builder()
        .signatureDuration(Duration.ofMinutes(10))
        .getObjectRequest(getObjectRequest)
        .build()
    val presignedGetObjectRequest = presigner.presignGetObject(getObjectPresignRequest)

    val url = presignedGetObjectRequest.url()
    presigner.close()

    return url
}

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください