首页 > 解决方案 > 适用于 PHP 的 S3 S3EncryptionClient AWS 开发工具包:从实例配置文件元数据服务器检索凭证时出错

问题描述

对于我正在使用的连接,使用 AWS 共享凭证文件默认配置文件。我有 .aws/credentials 设置,其中包含 aws_access_key_id aws_secret_access_key。这适用于使用 S3Client 的 localhost 到 S3 连接。

但是,我想使用 S3EncryptionClient 进行客户端加密/解密,这就是问题开始的地方。使用 PHP 3.6 和 aws-sdk-php 3.5。我不得不手动安装 Crypto 目录,因为无论出于何种原因,即使据我所知,在 v3.38 中添加了支持,composer 也不会得到它们。

使用适用于 PHP 的 AWS 开发工具包版本 3 示例执行 Amazon S3 客户端加密后的putObject失败,并显示“从实例配置文件元数据服务器检索凭证时出错”。在使用 S3Client 或使用 S3EncryptionClient 时,我在这两种情况下都使用相同的用户、密钥和密钥。我假设 KmsMaterialsProvider 不需要指定 'credentials' => $provider,但我也尝试过。

编辑:在 IAM 策略模拟器中尝试了相同的方法。可能策略设置不正确。但不太确定需要什么。尝试了一堆不同的变化,但没有任何成功。不断收到“拒绝隐式拒绝(没有匹配的陈述)”。用于以下操作:加密、解密,即使策略具有这些操作。我在本地机器上这样做的问题是什么?但后来我会认为非加密写入/读取会以同样的方式失败。

标签: phpamazon-web-servicesamazon-s3encryptionaws-php-sdk

解决方案


Figured this out, in case anyone runs into the same issue as it looks like at least a few people did without an answer. Creating KmsClient on dev environment (localhost) needed to specify 'credentials' => $provider, even if already specified for S3EncryptionClient . Also make sure that permission policy is setup for the key and KMS service.


推荐阅读