java - 如何在 EC2 和 SQS 以及本地机器到 SQS 之间进行身份验证
问题描述
我正在尝试在我的本地计算机和EC2 实例上使用 SQS 进行身份验证。在我的本地机器上,我可以成功使用配置文件:
ProfileCredentialsProvider p = ProfileCredentialsProvider.builder().profileName("my-profile").build();
但是,我不确定我需要做什么才能从 EC2 进行身份验证,我是否需要添加一个 IAM 角色并将 EC2 权限授予 SQS(我对 AWS Auth 很陌生)?
我以为我可以InstanceProfileCredentialsProvider
用于 EC2,但那不起作用,但这可能是因为我错过了上面的角色权限步骤?
SqsClient sqsClient = SqsClient.builder().credentialsProvider(p)
.region(Region.US_WEST_2)
.build();
我猜,但我认为最终结果将是:
ProfileCredentialsProvider p = ProfileCredentialsProvider.builder().profileName("my-profile").build();
InstanceProfileCredentialsProvider i = InstanceProfileCredentialsProvider.builder().build();
sqsClient = SqsClient.builder()
.credentialsProvider(p)
.credentialsProvider(i)
.region(Region.US_WEST_2)
.build();
我正在使用 aws SDK 版本 2software.amazon.awssdk:sqs:2.17.24
解决方案
对于 EC2,首选方法是将 IAM 角色分配给具有所需 SQS 权限的实例。
我建议阅读默认凭据提供程序的工作原理。只要您提供默认凭据提供程序查找的凭据方法之一,您无需在代码中执行任何特殊操作即可使用这些凭据。
例如,当您的代码在 EC2 上运行时,它可以自动获取分配给实例的 IAM 角色,您的代码可能如下所示:
sqsClient = SqsClient.builder().build();
请注意,没有凭据提供程序传递给客户端。此外,默认情况下,它将使用 EC2 实例运行所在的同一区域,因此您也不需要传递该区域。
对于在本地运行,您可以AWS_PROFILE
在运行代码之前简单地设置环境变量。
推荐阅读
- bpmn - 如何在 mxGraph 中创建 draw.io 形状?
- java - 如何修复“从 Ios 发送到 android 的图像并在 android 中旋转 90cw 但如果我检查 exif 信息它显示方向 0?
- ios - PDFview 滚动视图缩放
- arrays - 对numpy数组做一些数学运算
- python - 如何通过 HttpNtlmAuth 使用 Web 代理 - auth_header_value 是协商的
- python - 如何在使用 pandas 数据框进行绘图时固定 x 刻度
- testing - ZAP 在断点处自动返回相同的响应
- scala - 从 spark 的每个分区中选择 N 个元素
- javascript - 如何从静态地图的latlng中找到像素值?
- spring - 在 Spring Batch 处理器或编写器中使用 EJB 连接 IBM MQ 是否更好?