2

我有一个用Java编写的Lambda函数,我希望它访问S3(putObject)。使用AWS Lambda仅使用角色访问S3

我不想在我的Lambda函数中使用或存储凭据以访问S3。相反,我想使用IAM角色。

如何在我的java代码(这将由Lambda运行)中编写AWS S3客户端,该客户端不需要任何凭据并假定Lambda具有适当的角色?

回答

5

您不需要在您的lambda函数中存储凭证。所有功能都以角色运行 - 您在创建功能时设置的角色。由于拉姆达功能有一定的作用,你可以根据需要添加或从这个角色中删除的权限,在不改变函数本身

管理权限:使用IAM角色(执行角色)

每个拉姆达函数具有与其关联的IAM角色(执行角色) 。 您在创建Lambda函数时指定IAM角色。 您授予此角色的权限决定AWS Lambda在承担角色时可以执行的操作 。有两种类型的权限,你 授权到该IAM角色:

如果你的lambda函数的代码访问其他AWS资源,如 从S3存储读取的对象或写入日志CloudWatch的日志,你 需要为该角色授予相关Amazon S3和CloudWatch 操作的权限。如果事件源基于数据流(AWS Kinesis Streams和DynamoDB数据流),AWS Lambda会代表您以这些数据流轮询 。 AWS Lambda需要权限来轮询流,并且 会读取流上的新记录,因此您需要将相关 权限授予此角色。

http://docs.aws.amazon.com/lambda/latest/dg/intro-permission-model.html

+0

谢谢你的快速回复。但是,我在网上找到的所有示例都是使用存储凭据或JavaScript。我似乎无法找到任何示例说明如何在不使用凭据的情况下在* Java *中创建新的S3客户端。 – yuz

+0

也许你可以发布有问题的代码 - 不确定我是否清楚。 –

+0

我的问题是,如果有创建s3客户端的方式如下: AmazonS3 s3Client = AmazonS3ClientBuilder.standard()。build() 要创建没有凭据在Java? – yuz