• 在AWS中自定义Credential Provider实现Client连接


    今天在使用AWS中,由于原来的 key和secrect是放在配置文件ini里面的。现在需要改成从DB里面获取,所以需要自定义Credential.在AWS中重写这个挺简单的。

    我这里是继承原先的CredentialProvider类,然后写了一个bucketProvider方法

    使用方法:

    
    //调用自定义provider
    $provider = applibraryAwsS3CredentialProvider::bucketProvider();
    $provider = AwsCredentialsCredentialProvider::memoize($provider);
    try {
        $s3Client = new AwsS3S3Client([
        'region'      => $region,
        'version'     => '2006-03-01',
        'credentials' => $provider,
        ]);
    }catch (AwsExceptionCredentialsException $ex){
    	return null;
    }
    
    <?php
    namespace applibraryAws;
    
    use YafRegistry;
    
    use AwsCredentialsCredentialProvider;
    use GuzzleHttpPromise;
    use AwsExceptionCredentialsException;
    use GuzzleHttpPromiseRejectedPromise;
    use AwsCredentialsCredentials;
    
    /**
     * Class DB
     * @package applibraryAws
     * awazon 自定义credential,根椐存储桶,去获取access_id 和 access_secrect;
     */
    class S3CredentialProvider extends CredentialProvider
    {
    
    
        public static function bucketProvider()
        {
            return function () {
                $bucketInfo = [];
                try {
                    $bucketInfo = applibraryAwsBucket::instance()->getBucketRegion(); //获取bucket信息。
                }catch(Exception $ex){                
                    return new PromiseRejectedPromise(new CredentialsException("获取s3认证文件失败"));
                }
    
                $accessKey = isset($bucketInfo['accessKey']) && $bucketInfo['accessKey'] ? json_decode($bucketInfo['accessKey'],true) : [];
                $key = isset($accessKey['id']) && $accessKey['id'] ? $accessKey['id'] : '';
                $secret = isset($accessKey['key']) && $accessKey['key'] ? $accessKey['key'] : '';
                if ($key && $secret) {
                    return Promisepromise_for(
                        new Credentials($key, $secret,NULL)
                    );
                }            
                return new PromiseRejectedPromise(new CredentialsException("找不到s3的key,secrect用于认证"));
            };
        }
    
    }
    
  • 相关阅读:
    网络性能评估
    HTML5 historyState pushState、replaceState
    pre换行段落间距
    2、hibernate七步走完成增删改查
    8.多线程和Socket通信
    7..使用反射动态创建数组和访问数组
    5. Java反射机制
    11、触发器
    10.程序包
    9.函数
  • 原文地址:https://www.cnblogs.com/smartrui/p/10238041.html
Copyright © 2020-2023  润新知