php - 适用于 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 策略模拟器中尝试了相同的方法。可能策略设置不正确。但不太确定需要什么。尝试了一堆不同的变化,但没有任何成功。不断收到“拒绝隐式拒绝(没有匹配的陈述)”。用于以下操作:加密、解密,即使策略具有这些操作。我在本地机器上这样做的问题是什么?但后来我会认为非加密写入/读取会以同样的方式失败。
解决方案
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.
推荐阅读
- pandas - 同一数据框中具有相同日期但不同时间的多个文件
- reactjs - 物化下拉菜单在导航栏中不起作用(React)
- javascript - ng-repeat 在 html 表中
- python - 通过合并两个连续的列来读取 numpy 数组中的文本文件
- python - 使用 POST 请求时数据未通过
- visual-studio-code - 我可以在vscode中打开终端吗?
- jquery - 在 jQuery 中将最接近()和 html()放在一起的问题
- mysql - 如何将 to_timestamp('12-10-18 12:00:16.565736000 PM','DD-MM-RR HH12:MI:SSXFF AM') 转换为 MySQL
- powershell - Powershell:ForEach将找到的所有值连接成一个并且脚本失败
- swift - 多于一个动态表与动态列 swift 4