java - 使用 AWS Java SDK 为基于角色的联合用户创建 SQS,无需凭证
问题描述
我正在尝试使用 AWS Java SDK 创建 SQS。我没有访问密钥和密钥 ID,我使用我公司提供的链接进入 AWS 控制台。它是基于角色的 SAML 访问(联合登录)。每当我尝试从 Java 代码创建 SQS 时,我会收到 403 错误(如果我没有为凭证编写任何代码),或者如果我尝试使用 AWS 博客中为联合用户指定的代码会遇到更多错误。
我尝试了以下代码,但它不起作用:
AWSSecurityTokenService stsClient = AWSSecurityTokenServiceClientBuilder
.standard()
.withCredentials(new DefaultAWSCredentialsProviderChain())
.withRegion(Regions.EU_WEST_1)
.build();
GetFederationTokenRequest getFederationTokenRequest = new GetFederationTokenRequest();
getFederationTokenRequest.setDurationSeconds(7200);
getFederationTokenRequest.setName("<username>@<company>.com");
// Define the policy and add it to the request.
Policy policy = new Policy();
policy.withStatements(new Statement(Statement.Effect.Allow)
.withActions(SQSActions.AllSQSActions)
.withResources(new Resource("arn:aws:sqs:::test-queue")));
getFederationTokenRequest.setPolicy(policy.toJson());
// Get the temporary security credentials.
GetFederationTokenResult federationTokenResult = stsClient.getFederationToken(getFederationTokenRequest);
Credentials sessionCredentials = federationTokenResult.getCredentials();
// Package the session credentials as a BasicSessionCredentials BasicSessionCredentials basicSessionCredentials = new BasicSessionCredentials(
sessionCredentials.getAccessKeyId(),
sessionCredentials.getSecretAccessKey(),
sessionCredentials.getSessionToken());
AmazonSQSAsync amazonSQS = AmazonSQSAsyncClientBuilder.standard().withCredentials(new AWSStaticCredentialsProvider(basicSessionCredentials))
.withRegion(Regions.EU_WEST_1)
.build();
CreateQueueRequest request = new CreateQueueRequest("wifi-test-queue");
String result = amazonSQS.createQueue(request).getQueueUrl();
不幸的是,上面的代码不起作用。我确信我的帐户有权创建/访问 SQS,因为我能够使用 Terraform 实现类似的事情。
有人可以帮我如何使用这样的帐户创建资源吗?
解决方案
您需要包含 AWS 区域和帐号的通配符
new Resource("arn:aws:sqs:*:*:test-queue")
您可以使用IAM 模拟器测试等效的 IAM 策略
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": "sqs:CreateQueue",
"Resource": "arn:aws:sqs:*:*:test-queue"
}
]
}
推荐阅读
- java - Prometheus 客户端是同步的还是异步的?
- php - 在占位符中添加按钮和链接的问题
- delphi - 如何使 TSynEdit 的 Wordwrap 与 TMemo 的一样?
- azure - 应用内容安全策略后 Azure 交换不起作用
- php - 即使在 ajax 上设置最小输入数量添加到 Woocommerce 中的购物车
- php - 使用 ISSET() 并且值永远不会 False 与 Html 选择选项代码
- flutter - 如何从网络图像中获取 ui.Image(dart:ui)?
- android - 在 ARCORE 中获取接触点
- python - 如何在函数参数中留出空格?
- css - :hover 上的 CSS 动画和动画