如何记录AWS S3Client当前使用的IAM角色?
如何记录AWS S3Client使用的IAM角色?
有两种可靠的方式可以获取并记录S3Client实际使用的IAM角色信息:
1. 通过代码直接获取凭证中的角色详情
AWS SDK v2的S3Client会使用默认凭证链加载凭证,你可以通过客户端的配置获取凭证提供者,进而解析出角色相关信息(仅当使用STS角色凭证时有效):
S3Client s3Client = S3Client.builder() .region(Region.of(region)) .build(); // 获取客户端的凭证提供者 CredentialsProvider credentialsProvider = s3Client.serviceConfiguration().credentialsProvider(); // 解析当前生效的凭证 AwsCredentials credentials = credentialsProvider.resolveCredentials(); // 判断是否为STS角色凭证(通过角色临时凭证访问时会是该类型) if (credentials instanceof StsAwsCredentials) { StsAwsCredentials stsCredentials = (StsAwsCredentials) credentials; System.out.println("当前S3Client使用的IAM角色ARN: " + stsCredentials.arn()); System.out.println("角色会话名称: " + stsCredentials.sessionName()); }
如果是通过AWS_ROLE_ARN等环境变量注入的Web身份凭证,解析出的StsAwsCredentials同样会包含完整的角色ARN。
2. 启用SDK日志打印凭证获取过程
通过配置日志框架(如Logback、Log4j),将AWS SDK凭证相关包的日志级别设为DEBUG,就能在日志中看到凭证加载的详细过程,包括使用的角色信息:
以Logback为例,在配置文件中添加:
<logger name="software.amazon.awssdk.auth.credentials" level="DEBUG"/>
日志输出中会包含类似如下的内容:
Loading credentials from WebIdentityTokenCredentialsProvider(...)
Retrieved credentials from STS: StsAwsCredentials(arn=arn:aws:sts::123456789012:assumed-role/your-role-name/session-name, sessionName=session-name, ...)
内容的提问来源于stack exchange,提问作者user1555190
相关产品推荐
相关产品推荐

