【问题标题】:How to set up AWS S3 credentials for PHP如何为 PHP 设置 AWS S3 凭证
【发布时间】:2018-03-23 06:09:18
【问题描述】:

我是 S3 的新手,很难通过文件设置我的凭据。这是我目前使用硬编码凭据的有效解决方案(IAM_KEY 和 IAM_SECRET 是用于存储我的密钥的变量):

// Using hard-coded credentials
    $s3 = new S3Client([
        'version'     => 'latest',
        'region'      => 'us-east-1',
        'credentials' => [
            'key'    => $IAM_KEY,
            'secret' => $IAM_SECRET ,
        ],
    ]);

但是,我想将密钥和秘密存储在一个文件中,以便在我将文件推送到 GitHub 时不可见。这是我失败的尝试:

// using credential file - not working :(
$s3 = S3Client::factory(
     array(
        'profile' => 'my_profile',
        'version' => 'latest',
        'region'  => 'us-east-1'
    ));

我的凭证文件如下:

[my_profile]
aws_access_key_id = someKey
aws_secret_access_key = someKey

我已阅读 AWS (https://docs.aws.amazon.com/cli/latest/userguide/cli-config-files.html) 上的文档,但仍然卡住了。它提到我必须将我的凭证文件存储在 ~/.aws/credentials 中,但是,我找不到该目录(我需要先为 AWS 安装命令行工具吗?)。另外,凭证文件的扩展名是什么?

我已经坚持了几个小时,因此我们将不胜感激。

【问题讨论】:

    标签: php amazon-web-services amazon-s3


    【解决方案1】:

    您可以将您的 AWS 凭证存储在通过 .gitignore 文件忽略的文件中。

    例如:

    aws-credentials.php

    <?php
    
        $IAM_KEY = 'key';
        $IAM_SECRET = 'secret';
    
    ?>
    

    index.php

    <?php                                                                           
    
    require_once('aws-credentials.php');                                            
    
    echo $IAM_KEY . "\n\n";                                                         
    echo $IAM_SECRET . "\n\n";                                                      
    
    ?> 
    

    .gitignore

    aws-credentials.php
    

    由于 .gitignore 文件中引用了文件“aws-credentials.php”,因此在您将更改提交到 git 时不会包含该文件。

    自从我在生产环境中使用 PHP 已经有一段时间了,但将 aws-credentials.php 文件存储在您的 Web 根目录之外也是一个好习惯,只是为了排除文件内容被远程访问的可能性在 Web 服务器未配置为正确执行 PHP 文件的情况下暴露。

    如果您在 Amazon EC2 上托管应用程序,最好不要使用 IAM 凭证,而是使用 IAM roles

    【讨论】:

    • 成功了!谢谢你。我花了几个小时尝试为 aws 设置命令行工具,以便可以将我的凭据存储在 ~/aws 中,但它不起作用。您的解决方案要简单得多。
    【解决方案2】:
    1. 对于 AWS 配置文件(Creds 文件)

      是的,您需要安装 AWS CLI 工具,然后使用以下命令设置配置文件

      aws configure

      访问此link 进行 CLI 配置。

    2. 要在您的应用程序中使用步骤 1 中配置的凭证,您应该使用 AWS SDK 中的凭证提供程序。请阅读此link

    3. 我的建议:阅读 IAM 配置文件 -> here
      您的应用程序可以从附加到 AWS 资源的 IAM 角色获取 S3 权限,无论是其 lambda 还是 EC2

      您应该跳过将凭据传递给客户端或使用凭据提供程序。

      因为当您在代码中创建 S3 客户端时。

      在本地环境中:配置 CLI 后。 S3 客户端将自动在多个位置查找凭据,例如 env vars 或 ~/.aws 目录。

      部署时:它将从附加到 AWS 资源的 IAM 角色中选择权限,并在其中部署 lambda 或 EC2。

    【讨论】:

    • 我按照安装 aws 命令行工具的说明进行操作,它安装成功,因为我可以看到 /Users/jasonvl/Library/Python/3.6/bin/aws 中的文件,但是 aws - -version 命令不起作用。我尝试将 export PATH=$Users/Library/Frameworks/Python.framework/Versions/3.5/bin:$PATH 添加到我的 bash 配置文件中,但仍然没有运气。不过感谢您的帮助!
    猜你喜欢
    • 1970-01-01
    • 2020-04-08
    • 1970-01-01
    • 1970-01-01
    • 2020-09-05
    • 1970-01-01
    • 1970-01-01
    • 2017-03-23
    • 2020-11-03
    相关资源
    最近更新 更多