Skip to content

Commit 621252e

Browse files
authored
Merge pull request #79 from AlibabaCloudLandingZone/solution-ecs-sts-token/0.0.7
solution-ecs-sts-token/0.0.7
2 parents febc4ab + 1146dbc commit 621252e

File tree

6 files changed

+62
-42
lines changed

6 files changed

+62
-42
lines changed

solution/solution-ecs-sts-token/code-example/java/common/src/main/java/org/example/oss_sdk/CredentialsDefaultSample.java

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22

33
import com.alibaba.fastjson2.JSON;
44
import com.aliyun.credentials.Client;
5+
import com.aliyun.credentials.models.Config;
56
import com.aliyun.credentials.models.CredentialModel;
67
import com.aliyun.oss.*;
78
import com.aliyun.oss.common.auth.Credentials;
@@ -18,7 +19,13 @@
1819
public class CredentialsDefaultSample {
1920
public static void main(String[] args) {
2021
// 初始化凭据客户端
21-
Client credentialClient = new Client();
22+
Config credentialConfig = new Config();
23+
credentialConfig.setType("ecs_ram_role");
24+
// 选填,该ECS角色的角色名称,不填会自动获取,建议加上以减少请求次数
25+
credentialConfig.setRoleName("<your-ecs-instance-role-name>");
26+
// 在加固模式下获取STS Token,强烈建议开启
27+
credentialConfig.setEnableIMDSv2(true);
28+
Client credentialClient = new Client(credentialConfig);
2229

2330
// Bucket所在地域对应的Endpoint。以华东1(杭州)为例。
2431
String endpoint = "https://oss-cn-hangzhou.aliyuncs.com";

solution/solution-ecs-sts-token/code-example/java/common/src/main/java/org/example/oss_sdk/README.md

Lines changed: 5 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -19,13 +19,10 @@ maven -version
1919
### CredentialsDefaultSample
2020
该示例代码演示了初始化凭据客户端(初始化方式可参考sdk2中的示例,本示例采用默认凭据链方式),再使用凭据客户端的凭据信息初始化OSS客户端。
2121

22-
Credentials工具会在环境变量中获取`ALIBABA_CLOUD_ECS_METADATA`(ECS实例RAM角色名称),若存在,程序将会通过ECS的元数据服务(Meta Data Server)获取ECS实例RAM角色的STS Token作为默认凭据信息。强烈建议配置环境变量`ALIBABA_CLOUD_ECS_IMDSV2_ENABLE=true`开启在加固模式下获取STS Token。
22+
> 强烈建议使用该方式,使用Credentials工具获取STS Token并初始化OSS客户端。
23+
24+
Credentials工具会通过ECS的元数据服务(Meta Data Server)获取ECS实例RAM角色的STS Token作为默认凭据信息,并且支持到期自动刷新。
2325

24-
在ECS中配置环境变量:
25-
```bash
26-
export ALIBABA_CLOUD_ECS_METADATA=<role-name>
27-
export ALIBABA_CLOUD_ECS_IMDSV2_ENABLE=true
28-
```
2926
运行示例代码:
3027
```bash
3128
mvn exec:java -Dexec.mainClass="org.example.oss_sdk.CredentialsDefaultSample" -e -q
@@ -34,6 +31,8 @@ mvn exec:java -Dexec.mainClass="org.example.oss_sdk.CredentialsDefaultSample" -e
3431
### RoleConfigSample
3532
该示例代码通过`InstanceProfileCredentialsProvider`配置ECS实例RAM角色,来初始化OSS客户端。
3633

34+
> 不建议使用该方式,请参考`CredentialsDefaultSample.java`使用Credentials工具获取STS Token并初始化OSS客户端。
35+
3736
运行示例代码:
3837
```bash
3938
mvn exec:java -Dexec.mainClass="org.example.oss_sdk.RoleConfigSample" -e -q

solution/solution-ecs-sts-token/code-example/java/common/src/main/java/org/example/sdk2_0/README.md

Lines changed: 17 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -20,9 +20,26 @@ java -version
2020
```bash
2121
maven -version
2222
```
23+
24+
### CredentialsRoleConfigSample
25+
该示例代码采用显示配置ecs实例角色的方式初始化凭据客户端。
26+
27+
> 推荐您使用该方式,在代码中明确指定实例角色,避免运行环境中的环境变量、配置文件等带来非预期的结果。
28+
29+
该方式显示设置凭据类型为`ecs_ram_role`,Credentials工具会自动获取ECS实例绑定的RAM角色,调用ECS的元数据服务(Meta Data Server)换取STS Token,完成凭据客户端初始化。
30+
31+
运行示例代码:
32+
```bash
33+
mvn exec:java -Dexec.mainClass="org.example.sdk2_0.CredentialsRoleConfigSample" -e -q
34+
```
35+
### 其他方式
36+
更多初始化方式,请参考[初始化凭据客户端](https://help.aliyun.com/zh/sdk/developer-reference/v2-manage-access-credentials)
37+
2338
### CredentialsDefaultSample
2439
该示例代码采用默认凭据链的方式初始化凭据客户端。
2540

41+
> 除非您清楚的知道默认凭据链中凭据信息查询优先级以及您的程序运行的各个环境中凭据信息配置方式,否则不建议您使用默认凭据链,推荐您使用显式配置实例角色方式。
42+
2643
Credentials工具会在环境变量中获取`ALIBABA_CLOUD_ECS_METADATA`(ECS实例RAM角色名称),若存在,程序将会通过ECS的元数据服务(Meta Data Server)获取ECS实例RAM角色的STS Token作为默认凭据信息。强烈建议配置环境变量`ALIBABA_CLOUD_ECS_IMDSV2_ENABLE=true`开启在加固模式下获取STS Token。
2744

2845
在ECS中配置环境变量:
@@ -34,15 +51,3 @@ export ALIBABA_CLOUD_ECS_IMDSV2_ENABLE=true
3451
```bash
3552
mvn exec:java -Dexec.mainClass="org.example.sdk2_0.CredentialsDefaultSample" -e -q
3653
```
37-
38-
### CredentialsRoleConfigSample
39-
该示例代码采用显示配置ecs实例角色的方式初始化凭据客户端。
40-
41-
该方式显示设置凭据类型为`ecs_ram_role`,Credentials工具会自动获取ECS实例绑定的RAM角色,调用ECS的元数据服务(Meta Data Server)换取STS Token,完成凭据客户端初始化。
42-
43-
运行示例代码:
44-
```bash
45-
mvn exec:java -Dexec.mainClass="org.example.sdk2_0.CredentialsRoleConfigSample" -e -q
46-
```
47-
### 其他方式
48-
更多初始化方式,请参考[初始化凭据客户端](https://help.aliyun.com/zh/sdk/developer-reference/v2-manage-access-credentials)

solution/solution-ecs-sts-token/code-example/java/common/src/main/java/org/example/sls_sdk/CredentialsDefaultSample.java

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
package org.example.sls_sdk;
22

3+
import com.aliyun.credentials.models.Config;
34
import com.aliyun.credentials.models.CredentialModel;
45
import com.aliyun.openservices.log.Client;
56
import com.aliyun.openservices.log.common.auth.DefaultCredentials;
@@ -16,7 +17,13 @@ public static void main(String[] args) throws LogException {
1617
String endpoint = "cn-hangzhou.log.aliyuncs.com";
1718

1819
// 初始化凭据客户端
19-
com.aliyun.credentials.Client credentialClient = new com.aliyun.credentials.Client();
20+
Config credentialConfig = new Config();
21+
credentialConfig.setType("ecs_ram_role");
22+
// 选填,该ECS角色的角色名称,不填会自动获取,建议加上以减少请求次数
23+
credentialConfig.setRoleName("<your-ecs-instance-role-name>");
24+
// 在加固模式下获取STS Token,强烈建议开启
25+
credentialConfig.setEnableIMDSv2(true);
26+
com.aliyun.credentials.Client credentialClient = new com.aliyun.credentials.Client(credentialConfig);
2027

2128
// 用凭据客户端初始化SLS客户端
2229
Client slsClient = createSlsClientByCredentials(endpoint, credentialClient);

solution/solution-ecs-sts-token/code-example/java/common/src/main/java/org/example/sls_sdk/README.md

Lines changed: 5 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -19,13 +19,10 @@ maven -version
1919
### CredentialsDefaultSample
2020
该示例代码演示了初始化凭据客户端(初始化方式可参考sdk2中的示例,本示例采用默认凭据链方式),再使用凭据客户端的凭据信息初始化SLS客户端。
2121

22-
Credentials工具会在环境变量中获取`ALIBABA_CLOUD_ECS_METADATA`(ECS实例RAM角色名称),若存在,程序将会通过ECS的元数据服务(Meta Data Server)获取ECS实例RAM角色的STS Token作为默认凭据信息。强烈建议配置环境变量`ALIBABA_CLOUD_ECS_IMDSV2_ENABLE=true`开启在加固模式下获取STS Token。
22+
> 强烈建议使用该方式,使用Credentials工具获取STS Token并初始化SLS客户端。
23+
24+
Credentials工具会通过ECS的元数据服务(Meta Data Server)获取ECS实例RAM角色的STS Token作为默认凭据信息,并且支持到期自动刷新。
2325

24-
在ECS中配置环境变量:
25-
```bash
26-
export ALIBABA_CLOUD_ECS_METADATA=<role-name>
27-
export ALIBABA_CLOUD_ECS_IMDSV2_ENABLE=true
28-
```
2926
运行示例代码:
3027
```bash
3128
mvn exec:java -Dexec.mainClass="org.example.sls_sdk.CredentialsDefaultSample" -e -q
@@ -34,6 +31,8 @@ mvn exec:java -Dexec.mainClass="org.example.sls_sdk.CredentialsDefaultSample" -e
3431
### RoleConfigSample
3532
该示例代码通过显示配置ECS实例RAM角色,来初始化SLS客户端。
3633

34+
> 不建议使用该方式,请参考`CredentialsDefaultSample.java`使用Credentials工具获取STS Token并初始化SLS客户端。
35+
3736
运行示例代码:
3837
```bash
3938
mvn exec:java -Dexec.mainClass="org.example.sls_sdk.RoleConfigSample" -e -q

solution/solution-ecs-sts-token/code-example/java/spring-boot/src/main/java/org/example/config/CredentialConfig.java

Lines changed: 19 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,22 @@
99
public class CredentialConfig {
1010

1111
// 初始化凭据客户端
12+
// 您可以在代码中显式配置,来初始化凭据客户端
13+
// 荐您使用该方式,在代码中明确指定实例角色,避免运行环境中的环境变量、配置文件等带来非预期的结果。
14+
@Bean(name = "credentialClient")
15+
Client getCredentialClient() {
16+
Config config = new Config()
17+
.setType("ecs_ram_role")
18+
// 选填,该ECS实例角色的角色名称,不填会自动获取,建议加上以减少请求次数
19+
.setRoleName("<请填写ECS实例角色的角色名称>")
20+
// 在加固模式下获取STS Token,强烈建议开启
21+
.setEnableIMDSv2(true);
22+
return new Client(config);
23+
}
24+
25+
// 您也可以使用Credentials工具的默认凭据链方式初始化凭据客户端
1226
// 借助Credentials工具的默认凭据链,您可以用同一套代码,通过程序之外的配置来控制不同环境下的凭据获取方式
27+
// 除非您清楚的知道默认凭据链中凭据信息查询优先级以及您的程序运行的各个环境中凭据信息配置方式,否则不建议您使用默认凭据链
1328
// 当您在初始化凭据客户端不传入任何参数时,Credentials工具将会尝试按照如下顺序查找相关凭据信息(优先级由高到低):
1429
// 1. 使用系统属性
1530
// 2. 使用环境变量
@@ -18,20 +33,8 @@ public class CredentialConfig {
1833
// 5. 使用ECS实例RAM角色(需要通过环境变量 ALIBABA_CLOUD_ECS_METADATA 指定 ECS 实例角色名称;通过环境变量 ALIBABA_CLOUD_ECS_IMDSV2_ENABLE=true 开启在加固模式下获取STS Token)
1934
// https://help.aliyun.com/zh/sdk/developer-reference/v2-manage-access-credentials#3ca299f04bw3c
2035
// 要使用默认凭据链,初始化 Client 时,必须使用空的构造函数,不能配置 Config 入参
21-
@Bean(name = "credentialClient")
22-
Client getCredentialClient() {
23-
return new Client();
24-
}
25-
26-
// 除了使用上面的默认凭据链,您也可以在代码中显式配置,来初始化凭据客户端
27-
//@Bean(name = "credentialClient")
28-
//Client getCredentialClient() {
29-
// Config config = new Config()
30-
// .setType("ecs_ram_role")
31-
// // 选填,该ECS实例角色的角色名称,不填会自动获取,建议加上以减少请求次数
32-
// .setRoleName("<请填写ECS实例角色的角色名称>")
33-
// // 在加固模式下获取STS Token,强烈建议开启
34-
// .setEnableIMDSv2(true);
35-
// return new Client(config);
36-
//}
36+
// @Bean(name = "credentialClient")
37+
// Client getCredentialClient() {
38+
// return new Client();
39+
// }
3740
}

0 commit comments

Comments
 (0)