- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我已经运行了以下代码段。我对 aws 的调用工作正常,但现在我不得不转换角色,它遇到了问题,使它生效,因为它似乎我仍然停留在原来的角色。
public void awsAssumeRoleUsingEnvironmentVariable(Regions region, String roleARN, String roleSessionName) throws Exception {
AWSSecurityTokenService stsClient = AWSSecurityTokenServiceClientBuilder.standard()
.withCredentials(new EnvironmentVariableCredentialsProvider())
.withRegion(region)
.build();
GetCallerIdentityRequest request = new GetCallerIdentityRequest();
GetCallerIdentityResult response = stsClient.getCallerIdentity(request);
System.out.println("CURRENT ROLE ASSUMED IS: " + response.toString());
request = new GetCallerIdentityRequest();
System.out.println("EXECUTING ASSUME ROLE");
AssumeRoleRequest roleRequest = new AssumeRoleRequest()
.withRoleArn(roleARN)
.withRoleSessionName(roleSessionName);
AssumeRoleResult roleResponse = stsClient.assumeRole(roleRequest);
Credentials sessionCredentials = roleResponse.getCredentials();
response = stsClient.getCallerIdentity(request);
System.out.println("CURRENT ROLE ASSUMED IS: " + response.toString());
}
getCallerIdentity 每次都返回相同的角色
编辑:只是试图解决这个问题,这绝对是我通过尝试使用使用 AWSCLI 返回的凭证进行编码的方式的问题。当我在运行我的应用程序时生成的 sessionCredentials
变量上执行 System.out.println()
,然后使用以下命令手动导出返回的 key ...
export AWS_ACCESS_KEY_ID=RoleAccessKeyID
export AWS_SECRET_ACCESS_KEY=RoleSecretKey
export AWS_SESSION_TOKEN=RoleSessionToken
接着是一个..
aws sts 获取调用者身份
返回了正确的角色,因此我的 java 代码 assumeRole 似乎可以正常工作并获得凭据,但我没有正确设置客户端,所以它没有使用它刚刚承担的角色。
非常感谢
最佳答案
如评论中所述,使用 sessionCredentials
创建一个新的 BasicSessionCredentials
,它可以传递给任何资源客户端。
示例代码在这里 https://docs.aws.amazon.com/AmazonS3/latest/dev/AuthUsingTempSessionTokenJava.html
import com.amazonaws.AmazonServiceException;
import com.amazonaws.SdkClientException;
import com.amazonaws.auth.AWSStaticCredentialsProvider;
import com.amazonaws.auth.BasicSessionCredentials;
import com.amazonaws.auth.profile.ProfileCredentialsProvider;
import com.amazonaws.services.s3.AmazonS3;
import com.amazonaws.services.s3.AmazonS3ClientBuilder;
import com.amazonaws.services.s3.model.ObjectListing;
import com.amazonaws.services.securitytoken.AWSSecurityTokenService;
import com.amazonaws.services.securitytoken.AWSSecurityTokenServiceClientBuilder;
import com.amazonaws.services.securitytoken.model.AssumeRoleRequest;
import com.amazonaws.services.securitytoken.model.AssumeRoleResult;
import com.amazonaws.services.securitytoken.model.Credentials;
public class MakingRequestsWithIAMTempCredentials {
public static void main(String[] args) {
String clientRegion = "*** Client region ***";
String roleARN = "*** ARN for role to be assumed ***";
String roleSessionName = "*** Role session name ***";
String bucketName = "*** Bucket name ***";
try {
// Creating the STS client is part of your trusted code. It has
// the security credentials you use to obtain temporary security credentials.
AWSSecurityTokenService stsClient = AWSSecurityTokenServiceClientBuilder.standard()
.withCredentials(new ProfileCredentialsProvider())
.withRegion(clientRegion)
.build();
// Obtain credentials for the IAM role. Note that you cannot assume the role of an AWS root account;
// Amazon S3 will deny access. You must use credentials for an IAM user or an IAM role.
AssumeRoleRequest roleRequest = new AssumeRoleRequest()
.withRoleArn(roleARN)
.withRoleSessionName(roleSessionName);
AssumeRoleResult roleResponse = stsClient.assumeRole(roleRequest);
Credentials sessionCredentials = roleResponse.getCredentials();
// Create a BasicSessionCredentials object that contains the credentials you just retrieved.
BasicSessionCredentials awsCredentials = new BasicSessionCredentials(
sessionCredentials.getAccessKeyId(),
sessionCredentials.getSecretAccessKey(),
sessionCredentials.getSessionToken());
// Provide temporary security credentials so that the Amazon S3 client
// can send authenticated requests to Amazon S3. You create the client
// using the sessionCredentials object.
AmazonS3 s3Client = AmazonS3ClientBuilder.standard()
.withCredentials(new AWSStaticCredentialsProvider(awsCredentials))
.withRegion(clientRegion)
.build();
// Verify that assuming the role worked and the permissions are set correctly
// by getting a set of object keys from the bucket.
ObjectListing objects = s3Client.listObjects(bucketName);
System.out.println("No. of Objects: " + objects.getObjectSummaries().size());
}
catch(AmazonServiceException e) {
// The call was transmitted successfully, but Amazon S3 couldn't process
// it, so it returned an error response.
e.printStackTrace();
}
catch(SdkClientException e) {
// Amazon S3 couldn't be contacted for a response, or the client
// couldn't parse the response from Amazon S3.
e.printStackTrace();
}
}
}
关于java - aws sdk assumeRole 没有生效,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61902906/
我试图在我的 PHP 程序中使用 AWS sts 调用 AssumeRole 函数,因为我想创建临时凭证以允许用户为 AWS 存储桶创建对象。 下面是我调用 PHP 的函数: $sts = Sts
我已经运行了以下代码段。我对 aws 的调用工作正常,但现在我不得不转换角色,它遇到了问题,使它生效,因为它似乎我仍然停留在原来的角色。 public void awsAssumeRoleUs
我有一个 cloudformation 模板,它创建 lambda 函数以及该 lambda 函数的角色。我尝试假设 lambda 函数中的角色,但不断收到错误: An error occurred
我正在尝试使用新的 DynamoDB BatchResolvers 写入 AppSync 解析器中的两个 DynamoDB 表(目前使用 Lambda 函数来执行此操作)。但是,在查看 CloudWa
我在 iOS AWS sdk 中使用“AssumeRole”api 来生成临时安全凭证。任何人都可以告诉这个步骤或为此提供示例应用程序吗? TSC = [[AmazonSecurityTokenSe
我正在尝试执行包含以下资源的 cloudformation 堆栈: 代码构建项目 Codepipeline 管道 所需角色 尝试执行堆栈时,失败并出现以下错误: arn:aws:iam::ACCOUN
我在 中使用以下 IAM 角色创建了一个 lambda 函数( lambda-get-details )账号-A 角色名称 : lambda 角色 { "Version": "2012-10-
我正在尝试使用云形成堆栈模板创建代码管道资源,该管道用于跨帐户中的 lamda 部署。 通过云形成堆栈创建代码管道时,我遇到以下错误 arn:aws:iam::{AccountA}:role/test
我在这里做错了什么?如果我使用,我可以通过 aws cli 和 boto 担任角色: boto3.setup_default_session(profile_name="ROLE_TO_ASSUME"
调用 STS 的 assume role 方法时出现错误。它表示用户无权对资源 xxx 执行 sts:AsumeRole。 我做了以下事情: 我创建了一个角色来访问 S3 存储桶。 我对策略模拟器进行
我想向现有用户颁发临时凭证,允许他们访问 AWS 管理控制台,方法是向他们提供使用这些临时凭证创建的 URL。 我正在关注通过 AWS 文档给出的书面示例:Example Code Using IAM
我正在尝试生成临时凭据访问 key 和 secret key 。我用过 AssumeRole .描述说它生成一个访问 key 和 secret key 。但是GetSessionTokenResult
我试图以这样一种方式使用 AssumeRole,以便我遍历多个帐户并检索这些帐户的 Assets 。我已经做到了这一点: import boto3 stsclient = boto3.client('
这个 AWS 角色究竟是做什么的? 最相关的位似乎是:"Action": "sts:AssumeRole",和"Service": "ec2.amazonaws.com" 完整的角色在这里: reso
几天来,我一直无法弄清楚为什么一个 AWS 角色无权在另一个角色上执行 AssumeRole。在本例中,我有一个带有 AWS CodeCommit 的开发帐户和一个带有 CodePipeline 的工
我有一个 CloudFormation 堆栈,可以创建多个 IAM 角色。我有一个听起来有些不寻常的要求,即在角色的 AssumeRole 策略中包含一个声明,以防止角色自行承担。角色名称是使用 Fn
我是 AWS iOS SDK 的新手。我正在尝试使用来自 iPhone 应用程序的 "assumeRole" api 生成临时安全凭证。我在我的项目中添加了 AWSSecurityTokenServi
我想将我的代码部署到 EC2 实例,但我不想加入 AWS Key 和 Secret。 AWS 提供 IAM 服务,允许我为我的 EC2 实例分配一个角色,这将允许这些实例使用临时 key 进行访问。
我是 aws 的新手。我想为 aws 调用生成临时凭证。为此,我使用了 Making Requests Using IAM User Temporary Credentials - AWS SDK f
我正在尝试计算 AWS CloudFormation 模板的逻辑流程,该模板将承担一个 IAM 角色,可以从另一个 AWS 账户的 S3 存储桶中提取文件。 到目前为止我所拥有的是: 账户A有一个角色
我是一名优秀的程序员,十分优秀!