openplanning

Java Awssdk Tạo và sử dụng ProfileCredentialsProvider

  1. Thư viện
  2. Profile Type CREDENTIALS
  3. Profile Type CONFIGURATION
  4. Ví dụ
Như bạn đã biết "accessKeyId/secretAccessKey" có thể được code cứng trong mã Java, điều này gây khó khăn cho việc bảo trì và mang tới một rủi ro bảo mật.
StaticCredentialsProvider Example
AwsCredentials credentials = AwsBasicCredentials.create( //
		MyAccessKey.ACCESS_KEY_ID, // accessKeyId
		MyAccessKey.SECRET_ACCESS_KEY // secretAccessKey
);
AwsCredentialsProvider credentialsProvider = StaticCredentialsProvider.create(credentials);
  • Java Awssdk StaticCredentialsProvider
ProfileCredentialsProvider cho phép đọc "accessKeyId/secretAccessKey" trong một file đặt tại một vị trí nào đó trên máy chủ (host). File này được gọi là "Profile-File", vị trí của nó có thể được chỉ định trong mã Java hoặc được thiết lập thông qua biến môi trường, hoặc là một đường dẫn quy ước mặc định.
Có hai kiểu "Profile File":
  • ProfileFile.Type.CREDENTIALS
  • ProfileFile.Type.CONFIGURATION

1. Thư viện

<!-- https://mvnrepository.com/artifact/software.amazon.awssdk/s3 -->
<dependency>
	<groupId>software.amazon.awssdk</groupId>
	<artifactId>s3</artifactId>
	<version>2.21.10</version>
</dependency>

<!-- https://mvnrepository.com/artifact/software.amazon.awssdk/s3-transfer-manager -->
<dependency>
    <groupId>software.amazon.awssdk</groupId>
    <artifactId>s3-transfer-manager</artifactId>
    <version>2.21.10</version>
</dependency>

<!-- https://mvnrepository.com/artifact/software.amazon.awssdk.crt/aws-crt -->
<dependency>
    <groupId>software.amazon.awssdk.crt</groupId>
    <artifactId>aws-crt</artifactId>
    <version>0.28.0</version>
</dependency>

<!-- Log Library -->
<!-- https://mvnrepository.com/artifact/org.slf4j/slf4j-api -->
<dependency>
    <groupId>org.slf4j</groupId>
    <artifactId>slf4j-api</artifactId>
    <version>2.0.9</version>
</dependency>

<!-- Log Library -->
<!-- https://mvnrepository.com/artifact/org.slf4j/slf4j-simple -->
<dependency>
    <groupId>org.slf4j</groupId>
    <artifactId>slf4j-simple</artifactId>
    <version>2.0.9</version> 
</dependency>  

2. Profile Type CREDENTIALS

Dưới đây là một Profile File mẫu, nó có thể có nhiều "Profile Definition".
Với kiểu ProfileFile.Type.CREDENTIALS, Quy tắc đặt tên cho "Profile Definition" là:
  • [default]
  • [your-custome-profile-name]
my-profile-credentials.txt
# This is a Comment Line 1
# This is a Comment Line 2
#
# ProfileType.Type.CREDENTIALS Sample:
#
# Profile Definition values: [default] or [your-custom-name]

[default] # Default profile
aws_access_key_id = Your-Access-Key-Id-1
aws_secret_access_key = Your-Secret-Access-Key-1


[my-custom-profile-1] # Custom Profile.
aws_access_key_id = Your-Access-Key-Id-2
aws_secret_access_key = Your-Secret-Access-Key-2
Ví dụ, tạo đối tượng ProfileCredentialsProvider với vị trí của Profile File được code cứng trong mã Java.
ProfileCredentialsProviderUtils1.java
package org.o7planning.java_14233_awssdk_s3.utils;

import java.nio.file.Paths;

import software.amazon.awssdk.auth.credentials.ProfileCredentialsProvider;
import software.amazon.awssdk.profiles.ProfileFile;

//
// ProfileFile.Type.CREDENTIALS Example.
//
public class ProfileCredentialsProviderUtils1 {

	private static final String MY_PROFILE_FILE_PATH = "/Volumes/New/my-profile-credentials.txt";

	public static ProfileCredentialsProvider create() {
		System.out.println("User Home: " + System.getProperty("user.home"));
		// Profile File:
		ProfileFile profileFile = ProfileFile.builder() //
				.type(ProfileFile.Type.CREDENTIALS) //  
				.content(Paths.get(MY_PROFILE_FILE_PATH)) //
				.build();

		// Credentials Provider
		return ProfileCredentialsProvider.builder() //
				.profileFile(profileFile) //
				// .profileName("my-custom-profile-1") // Optional
				.build();
	}
}
AWS_SHARED_CREDENTIALS_FILE
Với trường hợp ProfileType.Type.CREDENTIALS: Nếu bạn không chỉ định vị trí của "Profile File", ProfileCredentialsProvider sẽ lấy vị trí từ biến môi trường AWS_SHARED_CREDENTIALS_FILE hoặc đường dẫn mặc định:
>> {UserHome}/.aws/credentials
ProfileCredentialsProviderUtils1B.java
package org.o7planning.java_14233_awssdk_s3.utils;
  
import software.amazon.awssdk.auth.credentials.ProfileCredentialsProvider;
import software.amazon.awssdk.profiles.ProfileFile;

//
// ProfileFile.Type.CREDENTIALS Example.
//
public class ProfileCredentialsProviderUtils1B { 

	public static ProfileCredentialsProvider create() {
		System.out.println("User Home: " + System.getProperty("user.home"));
		//
		// Profile File:
		// 
		ProfileFile profileFile = ProfileFile.builder() //
				.type(ProfileFile.Type.CREDENTIALS) //  
				// Read "Profile File" location from environment variable: AWS_SHARED_CREDENTIALS_FILE
				// ... OR Path: {UserHome}/.aws/credentials
				// .content(Paths.get(MY_PROFILE_FILE_PATH)) // (***)
				.build();

		// Credentials Provider
		return ProfileCredentialsProvider.builder() //
				.profileFile(profileFile) //
				.build();
	}
}

3. Profile Type CONFIGURATION

Dưới đây là một Profile File mẫu, nó có thể có nhiều "Profile Definition".
Với kiểu ProfileFile.Type.CONFIGURATION, Quy tắc đặt tên cho "Profile Definition" là:
  • [default]
  • [profile your-custome-profile-name]
my-profile-configuration.txt
# This is a Comment Line 1
# This is a Comment Line 2
#
# ProfileType.Type.CONFIGURATION Sample:
#
# Profile Definition values: [default] or [profile your-custom-name]

[default] # Default profile
aws_access_key_id = Your-Access-Key-Id-1
aws_secret_access_key = Your-Secret-Access-Key-2


[profile my-custom-profile-1] # Custom Profile.
aws_access_key_id = Your-Access-Key-Id-2
aws_secret_access_key = Your-Secret-Access-Key-2
Ví dụ, tạo đối tượng ProfileCredentialsProvider với vị trí của Profile File được code cứng trong mã Java.
ProfileCredentialsProviderUtils2.java
package org.o7planning.java_14233_awssdk_s3.utils;

import java.nio.file.Paths;

import software.amazon.awssdk.auth.credentials.ProfileCredentialsProvider;
import software.amazon.awssdk.profiles.ProfileFile;

//
// ProfileFile.Type.CONFIGURATION Example.
//
public class ProfileCredentialsProviderUtils2 {

	private static final String MY_PROFILE_FILE_PATH = "/Volumes/New/my-profile-configuration.txt";

	public static ProfileCredentialsProvider create() {
		System.out.println("User Home: " + System.getProperty("user.home"));
		// Profile File:
		ProfileFile profileFile = ProfileFile.builder() //
				.type(ProfileFile.Type.CONFIGURATION) //  
				.content(Paths.get(MY_PROFILE_FILE_PATH)) //
				.build();

		// Credentials Provider
		return ProfileCredentialsProvider.builder() //
				.profileFile(profileFile) //
				// .profileName("my-custom-profile-1") // Optional
				.build();
	}
}
AWS_CONFIG_FILE
Với trường hợp ProfileType.Type.CONFIGURATION: Nếu bạn không chỉ định vị trí của "Profile File", ProfileCredentialsProvider sẽ lấy vị trí từ biến môi trường AWS_CONFIG_FILE hoặc đường dẫn mặc định:
>> {UserHome}/.aws/config
ProfileCredentialsProviderUtils2B.java
package org.o7planning.java_14233_awssdk_s3.utils;

import software.amazon.awssdk.auth.credentials.ProfileCredentialsProvider;
import software.amazon.awssdk.profiles.ProfileFile;

//
// ProfileFile.Type.CONFIGURATION Example.
//
public class ProfileCredentialsProviderUtils2B {

	public static ProfileCredentialsProvider create() {
		System.out.println("User Home: " + System.getProperty("user.home"));
		// Profile File:
		ProfileFile profileFile = ProfileFile.builder() //
				.type(ProfileFile.Type.CONFIGURATION) //  
				// Read "Profile File" location from environment variable: AWS_CONFIG_FILE
				// ... OR Path: {UserHome}/.aws/config
				// .content(Paths.get(MY_PROFILE_FILE_PATH)) // (***)
				.build();

		// Credentials Provider
		return ProfileCredentialsProvider.builder() //
				.profileFile(profileFile) //
				.build();
	}
}

4. Ví dụ

Ví dụ, tạo đối tượng S3Client từ ProfileCredentialsProvider:
S3ClientExample.java
package org.o7planning.java_14233_awssdk_s3;

import org.o7planning.java_14233_awssdk_s3.utils.ProfileCredentialsProviderUtils1;

import software.amazon.awssdk.auth.credentials.ProfileCredentialsProvider;
import software.amazon.awssdk.regions.Region;
import software.amazon.awssdk.services.s3.S3Client;

public class S3ClientExample {

	// EU (Frankfurt) - Germany.
	private static final Region MY_S3_REGION = Region.EU_CENTRAL_1;

	private static S3Client createS3Client() {
		ProfileCredentialsProvider provider = ProfileCredentialsProviderUtils1.create();

		S3Client client = S3Client.builder() //
				.credentialsProvider(provider) //
				.region(MY_S3_REGION) //
				.build();

		return client;
	}

	public static void main(String[] args) {
		S3Client s3Client = createS3Client();
		System.out.println("s3Client: " + s3Client);
		// And use s3Client to upload files...
	}
}
  • Java Awssdk S3 Tải file xuống từ S3 Bucket với S3Client
Ví dụ, Tạo đối tượng S3TransferManager từ ProfileCredentialsProvider:
S3TransferManagerExample.java
package org.o7planning.java_14233_awssdk_s3;

import org.o7planning.java_14233_awssdk_s3.utils.ProfileCredentialsProviderUtils1;

import software.amazon.awssdk.auth.credentials.ProfileCredentialsProvider;
import software.amazon.awssdk.regions.Region;
import software.amazon.awssdk.services.s3.S3AsyncClient;
import software.amazon.awssdk.transfer.s3.S3TransferManager;
import software.amazon.awssdk.transfer.s3.SizeConstant;

public class S3TransferManagerExample {

	// EU (Frankfurt) - Germany.
	private static final Region MY_S3_REGION = Region.EU_CENTRAL_1;

	private static S3TransferManager createS3TransferManager() {
		ProfileCredentialsProvider provider = ProfileCredentialsProviderUtils1.create();

		S3AsyncClient s3AsyncClient = S3AsyncClient.crtBuilder() //
				.credentialsProvider(provider) //
				.region(MY_S3_REGION) //
				.targetThroughputInGbps(20.0) //
				.minimumPartSizeInBytes(10 * SizeConstant.MB)//
				.build();

		return S3TransferManager.builder().s3Client(s3AsyncClient).build();
	}

	public static void main(String[] args) {
		S3TransferManager s3TransferManager = createS3TransferManager();
		System.out.println("s3TransferManager: " + s3TransferManager);
		// And use s3TransferManager to upload file,directory...
	}
}

Các hướng dẫn Amazon Web Services

Show More