Java Awssdk Các Credentials Provider thông dụng
Để 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 accessKeyId và secretAccessKey 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
- Giới thiệu về Amazon Web Services (AWS)
- Giới thiệu về Amazon S3
- Giới thiệu về Amazon Cloudfront và kiến trúc của nó
- Làm sao để giảm chi phí Amazon Cloudfront?
- Vô hiệu hoá bộ nhớ đệm CloudFront
- Giới thiệu về DigitalOcean Spaces
- Hướng dẫn tạo DigitalOcean Spaces Bucket
- Giới thiệu về Amazon ACM
- Java Awssdk S3 Tải tệp lên S3 Bucket với S3Client
- Tạo AWS accessKeyId/secretAccessKey
- Java Awssdk S3 Liệt kê các đối tượng trong S3 Bucket
- Lưu trữ (host) một Website tĩnh trên Amazon S3
- Vô hiệu hoá bộ nhớ đệm của CloudFront với Java
- Tạo DigitalOcean Spaces Access Key
- Java Awssdk Các Credentials Provider thông dụng
- Java Awssdk Tạo và sử dụng ProfileCredentialsProvider
- Java Awssdk Tạo và sử dụng EnvironmentVariableCredentialsProvider
- Java Awssdk Tạo và sử dụng SystemPropertyCredentialsProvider
- Java Awssdk S3 Tải object lên với S3TransferManager
- Java Awssdk S3 Tải object xuống với S3TransferManager
- Java thao tác với DigitalOcean Spaces sử dụng S3TransferManager
- Java tạo, liệt kê và xoá S3 Bucket
- Aws Console Tạo tài khoản người dùng IAM
- Tạo một vùng chứa Amazon S3 (S3 Bucket)
- Các quy tắc chuyển hướng cho S3 Static Website
- Cấu hình tên miền tuỳ chỉnh cho website tĩnh Amazon S3
- Tạo bản phân phối CloudFront cho S3 Bucket
- Cấu hình các trang phản hồi lỗi cho CloudFront
- Tạo các chính sách S3 Bucket
- Công cụ tạo các chính sách cho AWS - policygen
- So sánh Amazon S3 Rest API Endpoint và S3 Web Endpoint
- Chuyển hướng trong S3 Website với x-amz-website-redirect-location
- Di chuyển (migrate) dịch vụ DNS tới Amazon Route 53
- Chuyển (transfer) đăng ký tên miền tới Amazon Route 53
- Yêu cầu chứng chỉ SSL từ Amazon ACM
Show More