Java Awssdk Tạo và sử dụng ProfileCredentialsProvider
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
- 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