openplanning

Java Awssdk Các Credentials Provider thông dụng

  1. Thư viện
  2. StaticCredentialsProvider
  3. SystemPropertyCredentialsProvider
  4. ProfileCredentialsProvider
  5. EnvironmentVariableCredentialsProvider
  6. InstanceProfileCredentialsProvider
  7. ContainerCredentialsProvider
Để tương tác với Amazon Web Services (AWS), bạn cần tạo đối tượng AwsCredentialsProvider để cung cấp các thông tin xác thực (credentials) cho AWS mỗi khi yêu cầu được gửi tới AWS.
Về cơ bản, thông tin xác thực (credentials) là một cặp giá trị "accessKeyId/secretAccessKey", nó cũng được gọi là một "Access Key", và được đính kèm trong mỗi yêu cầu được gửi tới AWS. Cặp giá trị này có thể được code cứng trong mã Java thông qua StaticCredentialsProvider. Ngoài ra "Access Key" cũng có thể được lưu trữ trong một file và được đọc bởi ProfileCredentialsProvider, hoặc lưu trữ trong các biến môi trường và được đọc bởi EnvironmentVariableCredentialsProvider, ...
Như vậy, đầu tiên bạn cần phải đảm bảo rằng bạn đã tạo được một "Access Key" trên AWS, bài viết dưới đây hướng dẫn bạn hoàn thành bước này.

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> 

<!-- 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. StaticCredentialsProvider

Một cách đơn giản và nhanh chóng để tạo đối tượng AwsCredentialsProvider đó là cung cấp accessKeyIdsecretAccessKey trực tiếp trong code Java.
Tạo một lớp Java để lưu trữ "accessKeyId/secretAccessKey" có được ở bước trên:
MyAccessKey.java
package org.o7planning.java_14219_awssdk_s3;

public class MyAccessKey {

	public static final String ACCESS_KEY_ID = "Your-Access-Key-ID";
	public static final String SECRET_ACCESS_KEY = "Your-Secret-Access-Key";
}
Một lớp tiện ích giúp tạo đối tượng StaticCredentialsProvider với "accessKeyId/secretAccessKey" được cung cấp trực tiếp.
StaticCredentialsProviderExample1.java
package org.o7planning.java_14219_awssdk_s3;

import software.amazon.awssdk.auth.credentials.AwsBasicCredentials;
import software.amazon.awssdk.auth.credentials.AwsCredentials;
import software.amazon.awssdk.auth.credentials.StaticCredentialsProvider;
import software.amazon.awssdk.regions.Region;

public class StaticCredentialsProviderExample1 {

	public static StaticCredentialsProvider createCredentialsProvider(Region region) {
		AwsCredentials credentials = AwsBasicCredentials.create( //
				MyAccessKey.ACCESS_KEY_ID, // accessKeyId
				MyAccessKey.SECRET_ACCESS_KEY // secretAccessKey
		);
		StaticCredentialsProvider credentialsProvider = StaticCredentialsProvider.create(credentials);
		return credentialsProvider;
	}
}
Xem bài viết chuyên đề về StaticCredentialsProvider với các giải thích chi tiết và nâng cao:
  • Java Awssdk StaticCredentialsProvider

3. SystemPropertyCredentialsProvider

Cặp giá trị "accessKeyId/secretAccessKey" có thể được cung cấp cho AWSSDK thông qua System Properties. Chúng được truyền cho máy ảo Java tại thời điểm máy ảo được khởi động.
java -jar myweb.war -Daws.accessKeyId=my-accessKeyId -Daws.secretAccessKey=my-secretAccessKey
Giá trị của hai thuộc tính dưới đây sẽ được đọc bởi SystemPropertyCredentialsProvider:
  • aws.accessKeyId
  • aws.secretAccessKey
Ví dụ, tạo đối tượng SystemPropertyCredentialsProvider với "accessKeyId/secretAccessKey" được cung cấp thông qua System Properties.
SystemPropertyS3ClientUtils.java
package org.o7planning.java_14219_awssdk_s3;

import software.amazon.awssdk.auth.credentials.SystemPropertyCredentialsProvider;
import software.amazon.awssdk.regions.Region;

public class SystemPropertyCredentialsProviderExample1 {

	public static SystemPropertyCredentialsProvider createCredentialsProvider(Region region) {
		//
		// SystemPropertyCredentialsProvider will read "System Properties":
		// aws.accessKeyId
		// aws.secretAccessKey
		//
		return SystemPropertyCredentialsProvider.create();
	}
}
Xem bài viết chuyên đề về SystemPropertyCredentialsProvider với các giải thích chi tiết và nâng cao:
  • Java System Properties

4. ProfileCredentialsProvider

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 loại "Profile File":
  • ProfileFile.Type.CREDENTIALS
  • ProfileFile.Type.CONFIGURATION
Về cơ bản, bạn có thể chỉ định đường dẫn của "Profile File" trực tiếp trong mã Java, hoặc thông qua biến môi trường hoặc sử dụng đường dẫn quy ước mặc định.
  • {UserHome}/.aws/credentials
  • {UserHome}/.aws/config
ProfileCredentialsProviderExample1.java
package org.o7planning.java_14219_awssdk_s3;

import java.nio.file.Paths;

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

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

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

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

		// Credentials Provider
		return ProfileCredentialsProvider.builder() //
				.profileFile(profileFile) //
				// .profileName("my-custom-profile-1") // Optional
				.build(); 
	}
}
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
Xem bài viết chuyên đề về ProfileCredentialsProvider với các giải thích chi tiết và nâng cao:

5. EnvironmentVariableCredentialsProvider

Các giá trị "accessKeyId/secretAccessKey" có thể được thiết lập thông qua biến môi trường (Environment variables) và được đọc bởi EnvironmentVariableCredentialsProvider.
Cụ thể, EnvironmentVariableCredentialsProvider sẽ đọc 3 biến môi trường dưới đây, trong đó biến môi trường thứ ba là một tùy chọn.
  • AWS_ACCESS_KEY_ID
  • AWS_SECRET_ACCESS_KEY
  • AWS_SESSION_TOKEN (Optional)
Hình ảnh minh hoạ các biến môi trường trên hệ điều hành Windows.
Sau khi thiết lập các biến môi trường, việc tạo đối tượng EnvironmentVariableCredentialsProvider thực sự rất đơn giản.
EnvironmentVariableCredentialsProviderExample1.java
package org.o7planning.java_14219_awssdk_s3;

import software.amazon.awssdk.auth.credentials.EnvironmentVariableCredentialsProvider;
import software.amazon.awssdk.regions.Region;

public class EnvironmentVariableCredentialsProviderExample1 {

	public static EnvironmentVariableCredentialsProvider createCredentialsProvider(Region region) {
		//
		// EnvironmentVariableCredentialsProvider will read Environment Variables:
		// AWS_ACCESS_KEY_ID
		// AWS_SECRET_ACCESS_KEY
		// AWS_SESSION_TOKEN (Optional)
		//
		return EnvironmentVariableCredentialsProvider.create();
	}
}
Xem bài viết chuyên đề về EnvironmentVariableCredentialsProvider với các giải thích chi tiết và nâng cao:

6. InstanceProfileCredentialsProvider

InstanceProfileCredentialsProvider có ích nếu bạn sử dụng dịch vụ EC2 của Amazon AWS, nó cung cấp thông tin xác thực (credentials) giúp EC2 của bạn kết nối với các tài nguyên AWS khác.
  • Giới thiệu về Amazon EC2
InstanceProfileCredentialsProviderExample1.java
package org.o7planning.java_14219_awssdk_s3;

import software.amazon.awssdk.auth.credentials.InstanceProfileCredentialsProvider;
import software.amazon.awssdk.regions.Region;

public class InstanceProfileCredentialsProviderExample1 {
	
	public static InstanceProfileCredentialsProvider createCredentialsProvider(Region region) { 
		return InstanceProfileCredentialsProvider.create();  
	}
}
Xem bài viết chuyên đề về InstanceProfileCredentialsProvider với các giải thích chi tiết và nâng cao:
  • Java Awssdk Tạo và sử dụng InstanceProfileCredentialsProvider

7. ContainerCredentialsProvider

Wait for update...
ContainerS3ClientUtils.java
package org.o7planning.java_awssdk_s3.s3client;

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

public class ContainerS3ClientUtils {

	public static S3Client createS3Client(Region region) {
		//
		// AWS_CONTAINER_CREDENTIALS_RELATIVE_URI
		// AWS_CONTAINER_CREDENTIALS_FULL_URI
		//
		AwsCredentialsProvider provider = ContainerCredentialsProvider.builder().build();

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

		return client;
	}
}
Xem bài viết chuyên đề về ContainerCredentialsProvider với các giải thích chi tiết và nâng cao:
  • Java Awssdk ContainerCredentialsProvider

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

Show More