首页 > 解决方案 > 如何在 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

标签: javaamazon-web-servicesamazon-ec2amazon-sqs

解决方案


对于 EC2,首选方法是将 IAM 角色分配给具有所需 SQS 权限的实例。

我建议阅读默认凭据提供程序的工作原理。只要您提供默认凭据提供程序查找的凭据方法之一,您无需在代码中执行任何特殊操作即可使用这些凭据。

例如,当您的代码在 EC2 上运行时,它可以自动获取分配给实例的 IAM 角色,您的代码可能如下所示:

sqsClient = SqsClient.builder().build();

请注意,没有凭据提供程序传递给客户端。此外,默认情况下,它将使用 EC2 实例运行所在的同一区域,因此您也不需要传递该区域。


对于在本地运行,您可以AWS_PROFILE在运行代码之前简单地设置环境变量。


推荐阅读