すべてのプロダクト
Search
ドキュメントセンター

Object Storage Service:OSS SDK for PHPのアクセス資格情報の設定

最終更新日:Dec 06, 2024

Object Storage Service (OSS) SDK for PHPを使用してリクエストを開始するには、アクセス資格情報を設定する必要があります。 Alibaba Cloudサービスは、アクセス資格情報を使用してID情報とアクセス許可を検証します。 認証と承認の要件に基づいて、さまざまなタイプのアクセス資格情報を選択できます。 このトピックでは、一時的なアクセス資格情報と長期的なアクセス資格情報を設定する方法について説明します。

前提条件

OSS SDK for PHPは、アクセス資格情報を設定する前にインストールされます。 詳細については、「インストール」をご参照ください。

資格情報プロバイダーの初期化

資格情報プロバイダー

OSSは、資格情報プロバイダーを初期化する複数の方法をサポートしています。 実際のシナリオの認証と承認の要件に基づいて、適切な方法を選択できます。

初期化メソッド

シナリオ

AccessKeyペアまたはセキュリティトークンが必要

基礎となる資格

資格情報の有効期間

資格情報のローテーションまたは更新方法

方法1: AccessKeyペアの使用

アプリケーションは、外部からの攻撃に対して脆弱ではなく、頻繁な資格情報のローテーションなしに長期間クラウドサービスにアクセスする必要がある、安全で安定した環境でデプロイおよび実行されます。

必須

AK

長期

手動ローテーション

方法2: セキュリティトークンの使用

アプリケーションは信頼できない環境で展開され、実行されます。この場合、資格情報の有効性とアクセス可能なリソースを管理します。

必須

STS Token

一時的

手動更新

方法3: RAMRoleARNを使用する

アプリケーションは、クラウドサービスへのアクセスを許可される必要があります。 たとえば、この方法を使用して、OSSへのクロスアカウントアクセスを許可できます。

必須

STS Token

一時的

自動更新

方法4: ECSRAMRoleの使用

アプリケーションは、Elastic Compute Service (ECS) インスタンス、elasticコンテナインスタンス、およびcontainer Service for Kubernetes (ACK) ワーカーノードでデプロイされ、実行されます。

選択可能

STS Token

一時的

自動更新

方法5: Function ComputeのコンテキストでCredentialsパラメーターを使用する

アプリケーションは、function Computeの関数でデプロイおよび実行されます。

選択可能

STS Token

一時的

更新する必要はありません

方法6: OIDCRoleARNを使用する

信頼できないアプリケーションは、ACKワーカーノードにデプロイされ、実行されます。

選択可能

STS Token

一時的

自動更新

方法7: CredentialsURIの使用

アプリケーションには、外部システムからのアクセス資格情報が必要です。

選択可能

STS Token

一時的

自動更新

方法8: カスタムメソッドを使用してアクセス資格情報を取得

上記の方法のいずれも要件を満たしていない場合は、カスタム方法を使用してアクセス資格情報を取得できます。

Custom

Custom

Custom

Custom

方法1: AccessKeyペアの使用

アプリケーションが、外部攻撃に対して脆弱ではなく、OSSへの長期アクセスを必要とする安全で安定した環境にデプロイされている場合、Alibaba CloudアカウントまたはRAMユーザーのAccessKeyペアを使用して、認証情報プロバイダーを初期化できます。 AccessKeyペアは、AccessKey IDとAccessKeyシークレットで構成されます。 この方法では、AccessKeyペアを手動で維持する必要があることに注意してください。 これにより、セキュリティリスクが生じ、メンテナンスが複雑になります。 AccessKeyペアを取得する方法の詳細については、「CreateAccessKey」をご参照ください。

環境変数

警告

Alibaba Cloudアカウントには、アカウント内のリソースに対する完全な権限があります。 Alibaba CloudアカウントのAccessKeyペアの漏洩は、重大なセキュリティ上の脅威をもたらします。 したがって、資格情報プロバイダーを初期化するために必要最小限の権限が付与されているRAMユーザーのAccessKeyペアを使用することをお勧めします。

  1. AccessKeyペアを使用して環境変数を指定します。

    Mac OS X/Linux/Unix

    export OSS_ACCESS_KEY_ID=<ALIBABA_CLOUD_ACCESS_KEY_ID>
    export OSS_ACCESS_KEY_SECRET=<ALIBABA_CLOUD_ACCESS_KEY_SECRET>

    Windows

    set OSS_ACCESS_KEY_ID=<ALIBABA_CLOUD_ACCESS_KEY_ID>
    set OSS_ACCESS_KEY_SECRET=<ALIBABA_CLOUD_ACCESS_KEY_SECRET>
  2. 環境変数を使用して資格情報を渡します。

    <?php
    require_once __DIR__ . '/vendor/autoload.php';
    use OSS\Credentials\EnvironmentVariableCredentialsProvider;
    use OSS\OssClient;
    use OSS\Core\OssException;
    
    try {
        // Obtain access credentials from environment variables and save the credentials in the provider. Before you run the sample code, make sure that the OSS_ACCESS_KEY_ID and OSS_ACCESS_KEY_SECRET environment variables are configured. 
        $provider = new EnvironmentVariableCredentialsProvider();
        // Specify the endpoint of the region in which the bucket is located. For example, if the bucket is located in the China (Hangzhou) region, set the endpoint to https://oss-cn-hangzhou.aliyuncs.com. 
        $endpoint = "http://oss-cn-hangzhou.aliyuncs.com";
        $bucket = "bucket";
        $config = array(
            "provider" => $provider,
            "endpoint" => $endpoint,
            "signatureVersion" => OssClient::OSS_SIGNATURE_VERSION_V4,
            "region"=> "cn-hangzhou"
        );
        $ossClient = new OssClient($config);
        var_dump($ossClient);
    } catch (OssException $e) {
        printf($e->getMessage() . "\n");
        return;
    }
    

静的な資格情報

コード内の変数を使用してアクセス資格情報を定義できます。 コードの実行中、これらの変数には、環境変数、構成ファイル、またはその他の外部の場所から取得した実際の資格情報の値が入力されます。

次の手順では、構成ファイルを使用して資格情報を提供する方法について説明します。

  1. config.iniという名前の設定ファイルを作成します。

    [credentials]
    alibaba_cloud_access_key_id = <ALIBABA_CLOUD_ACCESS_KEY_ID>
    alibaba_cloud_access_key_secret = <ALIBABA_CLOUD_ACCESS_KEY_SECRET>
  2. 設定ファイルを使用して資格情報を渡します。

    <?php
    if (is_file(__DIR__ . '/../autoload.php')) {
        require_once __DIR__ . '/../autoload.php';
    }
    if (is_file(__DIR__ . '/../vendor/autoload.php')) {
        require_once __DIR__ . '/../vendor/autoload.php';
    }
    use OSS\Credentials\StaticCredentialsProvider;
    use OSS\OssClient;
    use OSS\Core\OssException;
    
    try {
        $config = parse_ini_file('config.ini');
        // Obtain the AccessKey ID and AccessKey secret.
        $accessKeyId = $config['alibaba_cloud_access_key_id'];
        $accessKeySecret = $config['alibaba_cloud_access_key_secret'];
        $provider = new StaticCredentialsProvider($accessKeyId,$accessKeySecret);
        $endpoint = "http://oss-cn-hangzhou.aliyuncs.com";
        $config = array(
            "provider" => $provider,
            "endpoint" => $endpoint,
            "signatureVersion" => OssClient::OSS_SIGNATURE_VERSION_V4,
            "region"=> "cn-hangzhou"
        );
        $ossClient = new OssClient($config);
        printf($ossClient);
    } catch (OssException $e) {
        printf($e->getMessage() . "\n");
        return;
    }
    

方法2: セキュリティトークンの使用

アプリケーションがOSSに一時的にアクセスする必要がある場合は、security token Service (STS) から取得した、AccessKeyペアとセキュリティトークンで構成される一時的なアクセス資格情報を使用できます。 この方法では、セキュリティトークンを手動で管理する必要があることに注意してください。 これにより、セキュリティリスクが生じ、メンテナンスが複雑になります。 OSSに複数回アクセスする場合は、セキュリティトークンを手動で更新する必要があります。 セキュリティトークンの取得方法の詳細については、「AssumeRole」をご参照ください。

  1. 一時的なアクセス資格情報を使用して、環境変数を指定します。

    Mac OS X/Linux/Unix

    export OSS_ACCESS_KEY_ID=<ALIBABA_CLOUD_ACCESS_KEY_ID>
    export OSS_ACCESS_KEY_SECRET=<ALIBABA_CLOUD_ACCESS_KEY_SECRET>
    export OSS_SESSION_TOKEN=<ALIBABA_CLOUD_SECURITY_TOKEN>

    Windows

    set OSS_ACCESS_KEY_ID=<ALIBABA_CLOUD_ACCESS_KEY_ID>
    set OSS_ACCESS_KEY_SECRET=<ALIBABA_CLOUD_ACCESS_KEY_SECRET>
    set OSS_SESSION_TOKEN=<ALIBABA_CLOUD_SECURITY_TOKEN>
  2. 環境変数を使用して資格情報を渡します。

    <?php
    require_once __DIR__ . '/vendor/autoload.php';
    use OSS\Credentials\EnvironmentVariableCredentialsProvider;
    use OSS\OssClient;
    use OSS\Core\OssException;
    
    try {
        // Obtain access credentials from environment variables and save the credentials in the provider. Before you run the sample code, make sure that the OSS_ACCESS_KEY_ID, OSS_ACCESS_KEY_SECRET, and OSS_SESSION_TOKEN environment variables are configured. 
        $provider = new EnvironmentVariableCredentialsProvider();
        // Specify the endpoint of the region in which the bucket is located. For example, if the bucket is located in the China (Hangzhou) region, set the endpoint to https://oss-cn-hangzhou.aliyuncs.com. 
        $endpoint = "http://oss-cn-hangzhou.aliyuncs.com";
        $bucket = "bucket";
        $config = array(
            "provider" => $provider,
            "endpoint" => $endpoint,
            "signatureVersion" => OssClient::OSS_SIGNATURE_VERSION_V4,
            "region"=> "cn-hangzhou"
        );
        $ossClient = new OssClient($config);
        var_dump($ossClient);
    } catch (OssException $e) {
        printf($e->getMessage() . "\n");
        return;
    }
    

方法3: RAMRoleARNを使用する

重要

このメソッドには、alibabacloud/credentials 1.2.0以降が必要です。

アプリケーションが別のAlibaba CloudアカウントのOSSリソースへのアクセスを必要とする場合など、アプリケーションにOSSへのアクセスを許可する必要がある場合は、RAMRoleARNを使用して資格情報プロバイダーを初期化できます。 この方法の基本的なロジックは、STSから取得したセキュリティトークンを使用してアクセス資格情報を設定することです。 RAMロールのAlibaba Cloud Resource Name (ARN) を指定すると、CredentialsツールはSTSからセキュリティトークンを取得し、セッションの有効期限が切れる前にセキュリティトークンを自動的に更新します。 policyパラメーターに値を割り当てて、RAMロールの権限を制限できます。 この方法では、AccessKeyペアを手動で提供する必要があることに注意してください。 これにより、セキュリティリスクが生じ、メンテナンスが複雑になります。 AccessKeyペアを取得する方法の詳細については、「CreateAccessKey」をご参照ください。 RAMロールARNを取得する方法の詳細については、「CreateRole」をご参照ください。

  1. 資格情報クライアントの依存関係を追加します。

    composer require alibabacloud/credentials
  2. アクセス資格情報を設定します。

    <?php
    
    require_once __DIR__ . '/vendor/autoload.php';
    
    use AlibabaCloud\Credentials\Credential;
    use OSS\Core\OssException;
    use OSS\OssClient;
    use OSS\Credentials\CredentialsProvider;
    use OSS\Credentials\StaticCredentialsProvider;
    
    class AlibabaCloudCredentialsWrapper implements CredentialsProvider
    {
        /**
         * @var Credential
         */
        private $wrapper;
    
        public function __construct($wrapper)
        {
            $this->wrapper = $wrapper;
        }
    
        public function getCredentials()
        {
            $cred = $this->wrapper->getCredential();
            $ak = $cred->getAccessKeyId();
            $sk = $cred->getAccessKeySecret();
            $token = $cred->getSecurityToken();
            return new StaticCredentialsProvider($ak, $sk, $token);
        }
    }
    
    try {
        $config = new Credential\Config([
            // Set the credential type to ram_role_arn. 
            'type' => 'ram_role_arn',
            // Obtain the AccessKey pair of the RAM user from the environment variables. The AccessKey pair consists of an AccessKey ID and an AccessKey secret. 
            'accessKeyId' => getenv('OSS_ACCESS_KEY_ID'),
            'accessKeySecret' => getenv('OSS_ACCESS_KEY_SECRET'),
            // Obtain the ARN of the RAM role from the environment variable, which is the ID of the RAM role to be assumed. Format: acs:ram::$accountID:role/$roleName. 
            'roleArn' => getenv('OSS_STS_ROLE_ARN'),
            // Specify a custom session name for the role to distinguish different tokens. 
            'roleSessionName' => 'yourRoleSessionName',
            // Specify a custom policy. 
            'policy' => '',
        ]);
    
        $credential = new Credential($config);
        $providerWrapper = new AlibabaCloudCredentialsWrapper($credential);
        $provider = $providerWrapper->getCredentials();
        $config = array(
            'provider' => $provider,
            // Specify the endpoint of the region in which the bucket is located. For example, if the bucket is located in the China (Hangzhou) region, set the endpoint to https://oss-cn-hangzhou.aliyuncs.com. Specify your actual endpoint. 
            'endpoint' => 'https://oss-cn-hangzhou.aliyuncs.com'
            "signatureVersion" => OssClient::OSS_SIGNATURE_VERSION_V4,
            "region"=> "cn-hangzhou"
        );
        $ossClient = new OssClient($config);
        var_dump($ossClient);
    } catch (OssException $e) {
        print $e->getMessage();
    }

方法4: ECSRAMRoleの使用

説明

このメソッドには、alibabacloud /資格情報1.2.0以降が必要です。

アプリケーションがECSインスタンス、エラスティックコンテナインスタンス、またはACKワーカーノードで実行されている場合、ECSRAMRoleを使用して資格情報プロバイダーを初期化することを推奨します。 この方法の基本的なロジックは、STSから取得したセキュリティトークンを使用してアクセス資格情報を設定することです。 ECSRAMRoleを使用すると、ECSインスタンス、エラスティックコンテナインスタンス、またはACKワーカーノードにRAMロールをアタッチして、インスタンスのセキュリティトークンを自動的に更新できます。 この方法では、AccessKeyペアまたはセキュリティトークンを手動で管理する場合に発生するリスクを排除します。 ECSRAMRoleの取得方法の詳細については、「CreateRole」をご参照ください。

  1. 資格情報クライアントの依存関係を追加します。

    composer require alibabacloud/credentials
  2. アクセス資格情報としてECSRAMRoleを設定します。

    <?php
    
    require_once __DIR__ . '/vendor/autoload.php';
    
    use AlibabaCloud\Credentials\Credential;
    use OSS\Core\OssException;
    use OSS\OssClient;
    use OSS\Credentials\CredentialsProvider;
    use OSS\Credentials\StaticCredentialsProvider;
    
    class AlibabaCloudCredentialsWrapper implements CredentialsProvider
    {
        /**
         * @var Credential
         */
        private $wrapper;
    
        public function __construct($wrapper)
        {
            $this->wrapper = $wrapper;
        }
    
        public function getCredentials()
        {
            $cred = $this->wrapper->getCredential();
            $ak = $cred->getAccessKeyId();
            $sk = $cred->getAccessKeySecret();
            $token = $cred->getSecurityToken();
            return new StaticCredentialsProvider($ak, $sk, $token);
        }
    }
    
    try {
        $config = new Credential\Config([
            // Set the credential type to ecs_ram_role. 
            'type' => 'ecs_ram_role',
            'roleName' => "<role_name>",
        ]);
        $credential = new Credential($config);
        $providerWrapper = new AlibabaCloudCredentialsWrapper($credential);
        $provider = $providerWrapper->getCredentials();
        $config = array(
            'provider' => $provider,
            // Specify the endpoint of the region in which the bucket is located. For example, if the bucket is located in the China (Hangzhou) region, set the endpoint to https://oss-cn-hangzhou.aliyuncs.com. Specify your actual endpoint. 
            'endpoint' => 'https://oss-cn-hangzhou.aliyuncs.com'
            "signatureVersion" => OssClient::OSS_SIGNATURE_VERSION_V4,
            "region"=> "cn-hangzhou"
        );
        $ossClient = new OssClient($config);
        var_dump($ossClient);
    } catch (OssException $e) {
        print $e->getMessage();
    }

方法5: Function ComputeのコンテキストでCredentialsパラメーターを使用する

アプリケーションの関数がfunction Computeにデプロイされて実行されている場合、Function ComputeコンテキストのCredentialsパラメーターを使用して、資格情報プロバイダーを初期化できます。 この方法の基本的なロジックは、STSから取得したセキュリティトークンを使用してアクセス資格情報を設定することです。 Function Computeは、関数に設定されたロールに基づいてサービスロールを引き受けることによってセキュリティトークンを取得します。 次に、セキュリティトークンは、コンテキストでCredentials変数を使用してアプリケーションに渡されます。 セキュリティトークンは36時間有効です。 有効期間は変更できません。 関数の最大実行時間は24時間です。 したがって、関数の実行時に有効期限が切れないため、セキュリティトークンを更新する必要はありません。 この方法では、AccessKeyペアまたはセキュリティトークンを手動で管理する場合に発生するリスクを排除します。 Function ComputeにOSSへのアクセスを許可する方法の詳細については、「他のAlibaba Cloudサービスへのアクセス権限の付与」をご参照ください。

  • Function ComputeコンテキストのCredentialsパラメーターを使用して、資格情報プロバイダーを初期化します。

    <?php
    
    use OSS\OssClient;
    use OSS\Core\OssException;
    
    function handler($event, $context) {
        /*
          The AccessKey pair of an Alibaba Cloud account has permissions on all API operations. Using these credentials to perform operations in OSS is a high-risk operation. We recommend that you use a RAM user to call API operations or perform routine O&M. 
          We recommend that you do not save the AccessKey ID and AccessKey secret in your project code. Otherwise, the AccessKey pair may be leaked and the security of all resources in your account may be compromised. 
          In this example, the AccessKey ID and AccessKey secret are obtained from the context. 
        */
        $creds = $context["credentials"];
        $accessKeyId = $creds["accessKeyId"];
        $accessKeySecret = $creds["accessKeySecret"];
        $securityToken = $creds["securityToken"];
        $endpoint = "https://oss-cn-hangzhou-internal.aliyuncs.com";
    
        try{
            $ossClient = new OssClient($accessKeyId, $accessKeySecret, $endpoint, false, $securityToken);
            print_r($ossClient);
        } catch(OssException $e) {
            printf(__FUNCTION__ . ": FAILED\n");
            printf($e->getMessage() . "\n");
            return $e->getMessage();
        }
        return 'hello world';
    }

方法6: OIDCRoleARNを使用する

説明

このメソッドには、alibabacloud /資格情報1.2.0以降が必要です。

ACKワーカーノードでRAMロールを設定すると、ノードのポッド内のアプリケーションは、ECSインスタンスにデプロイされたアプリケーションと同じ方法でメタデータサーバーを使用して、アタッチされたロールのセキュリティトークンを取得できます。 ただし、信頼されていないアプリケーション (顧客によって送信され、コードを使用できないアプリケーションなど) がワーカーノードにデプロイされている場合、アプリケーションがメタデータサーバーを使用してワーカーノードにアタッチされているRAMロールのセキュリティトークンを取得することはできません。 クラウドリソースのセキュリティを確保し、信頼できないアプリケーションが必要なセキュリティトークンを安全に取得できるようにし、アプリケーションレベルの権限を最小限に抑えるために、サービスアカウントのRAMロール (RRSA) 機能を使用できます。 この方法の基本的なロジックは、STSから取得したセキュリティトークンを使用してアクセス資格情報を設定することです。 ACKは、さまざまなアプリケーションポッドの対応するOpenID Connect (OIDC) トークンファイルを作成およびマウントし、関連する構成情報を環境変数に渡します。 資格情報ツールは、環境変数の構成情報を取得し、STSのAssumeRoleWithOIDC操作を呼び出して、アタッチされたロールのセキュリティトークンを取得します。 この方法では、AccessKeyペアまたはセキュリティトークンを手動で管理する場合に発生するリスクを排除します。 詳細については、「RRSAを使用して異なるポッドに異なるクラウドサービスへのアクセスを許可する」をご参照ください。

  1. 資格情報クライアントの依存関係を追加します。

    composer require alibabacloud/credentials
  2. 例:

    <?php
    
    require_once __DIR__ . '/vendor/autoload.php';
    
    use OSS\Credentials\CredentialsProvider;
    use AlibabaCloud\Credentials\Credential;
    use OSS\Credentials\StaticCredentialsProvider;
    use OSS\Core\OssException;
    use OSS\OssClient;
    
    class AlibabaCloudCredentialsWrapper implements CredentialsProvider
    {
        /**
         * @var Credential
         */
        private $wrapper;
    
        public function __construct($wrapper)
        {
            $this->wrapper = $wrapper;
        }
    
        public function getCredentials()
        {
            $cred = $this->wrapper->getCredential();
            $ak = $cred->getAccessKeyId();
            $sk = $cred->getAccessKeySecret();
            $token = $cred->getSecurityToken();
            return new StaticCredentialsProvider($ak, $sk, $token);
        }
    }
    
    try {
        // Use the RAM role of an OIDC IdP to initialize a Credentials client. 
        $config = new Credential\Config([
            // Specify the credential type. 
            'type' => 'oidc_role_arn',
            // Specify the ARN of the OIDC IdP by specifying the ALIBABA_CLOUD_OIDC_PROVIDER_ARN environment variable.
            'oidcProviderArn' => '<OidcProviderArn>',
            // Specify the path of the OIDC token file by specifying the ALIBABA_CLOUD_OIDC_TOKEN_FILE environment variable.
            'oidcTokenFilePath' => '<OidcTokenFilePath>',
            // Specify the ARN of the RAM role by specifying the ALIBABA_CLOUD_ROLE_ARN environment variable. Example: acs:ram::123456789012****:role/adminrole.
            'roleArn' => '<RoleArn>',
            // Specify the role session name by specifying the ALIBABA_CLOUD_ROLE_SESSION_NAME environment variable.
            'roleSessionName' => '<RoleSessionName>',
            // Optional. Specify limited permissions for the RAM role. Example: {"Statement": [{"Action": ["*"],"Effect": "Allow","Resource": ["*"]}],"Version":"1"}.
            'policy' => '<Policy>',
            # Specify the validity period of the session.
            'durationSeconds' => 3600,
        ]);
        $credential = new Credential($config);
        $providerWrapper = new AlibabaCloudCredentialsWrapper($credential);
        $provider = $providerWrapper->getCredentials();
        $config = array(
            'provider' => $provider,
            // Specify the endpoint of the region in which the bucket is located. For example, if the bucket is located in the China (Hangzhou) region, set the endpoint to https://oss-cn-hangzhou.aliyuncs.com. Specify your actual endpoint. 
            'endpoint' => 'https://oss-cn-hangzhou.aliyuncs.com'
            "signatureVersion" => OssClient::OSS_SIGNATURE_VERSION_V4,
            "region"=> "cn-hangzhou"
        );
        $ossClient = new OssClient($config);
        var_dump($ossClient);
    } catch (OssException $e) {
        print $e->getMessage();
    }

方法7: CredentialsURIの使用

説明

このメソッドには、alibabacloud /資格情報1.2.0以降が必要です。

アプリケーションが外部システムからAlibaba Cloudの資格情報を取得して、柔軟な資格情報管理とキーレスアクセスを実装する必要がある場合は、CredentialsURIを使用して資格情報プロバイダーを初期化できます。 この方法の基本的なロジックは、STSから取得したセキュリティトークンを使用してアクセス資格情報を設定することです。 Credentialsツールは、クライアントでOSSClientインスタンスを初期化するために指定したURIを使用してセキュリティトークンを取得します。 この方法では、AccessKeyペアまたはセキュリティトークンを手動で管理する場合に発生するリスクを排除します。 CredentialsURI応答を提供するバックエンドサービスは、アプリケーションが常に有効な資格情報を取得できるように、セキュリティトークンを自動的に更新する必要があることに注意してください。

  1. 資格情報クライアントの依存関係を追加します。

    composer require alibabacloud/credentials
  2. 例:

    <?php
    
    require_once __DIR__ . '/vendor/autoload.php';
    
    use AlibabaCloud\Credentials\Credential;
    use OSS\Core\OssException;
    use OSS\Credentials\CredentialsProvider;
    use OSS\Credentials\StaticCredentialsProvider;
    use OSS\OssClient;
    
    class AlibabaCloudCredentialsWrapper implements CredentialsProvider
    {
        /**
         * @var Credential
         */
        private $wrapper;
    
        public function __construct($wrapper)
        {
            $this->wrapper = $wrapper;
        }
    
        public function getCredentials()
        {
            $cred = $this->wrapper->getCredential();
            $ak = $cred->getAccessKeyId();
            $sk = $cred->getAccessKeySecret();
            $token = $cred->getSecurityToken();
            return new StaticCredentialsProvider($ak, $sk, $token);
        }
    }
    
    try {
        $config = new Credential\Config([
            // Specify the credential type. 
            'type' => 'credentials_uri',
            // Obtain the URI of the credential in the http://local_or_remote_uri/ format by specifying the ALIBABA_CLOUD_CREDENTIALS_URI environment variable.
            'credentialsURI' => '<CredentialsUri>',
        ]);
        $credential = new Credential($config);
        $providerWrapper = new AlibabaCloudCredentialsWrapper($credential);
        $provider = $providerWrapper->getCredentials();
        $config = array(
            'provider' => $provider,
            // Specify the endpoint of the region in which the bucket is located. For example, if the bucket is located in the China (Hangzhou) region, set the endpoint to https://oss-cn-hangzhou.aliyuncs.com. Specify your actual endpoint. 
            'endpoint' => 'https://oss-cn-hangzhou.aliyuncs.com'
            "signatureVersion" => OssClient::OSS_SIGNATURE_VERSION_V4,
            "region"=> "cn-hangzhou"
        );
        $ossClient = new OssClient($config);
        var_dump($ossClient);
    } catch (OssException $e) {
        print $e->getMessage();
    }

方法8: カスタムメソッドを使用してアクセス資格情報を取得する

上記のメソッドのいずれも要件を満たしていない場合は、カスタムメソッドを使用して、Credential Providers操作を呼び出してアクセス資格情報を取得できます。

<?php
  if (is_file(__DIR__ . '/../autoload.php')) {
  require_once __DIR__ . '/../autoload.php';
  }
  if (is_file(__DIR__ . '/../vendor/autoload.php')) {
  require_once __DIR__ . '/../vendor/autoload.php';
  }

use OSS\Credentials\CredentialsProvider;
use OSS\OssClient;
use OSS\Core\OssException;

class CustomerCredentialsProvider implements CredentialsProvider
{
  public function getCredentials()
  {
    // Return long-term credentials.
    return [
      'AccessKeyId' => 'id',
      'AccessKeySecret' => 'secret',
      ];
    // Return temporary credentials.
    //return [
    //    'AccessKeyId' => 'id',
    //    'AccessKeySecret' => 'secret',
    //    'SecurityToken' => 'token',
    //];
  }
}

$provider = new CustomerCredentialsProvider();

try {
  $provider = new CustomerCredentialsProvider();
  $endpoint = "http://oss-cn-hangzhou.aliyuncs.com";
  $config = array(
    "provider" => $provider,
    "endpoint" => $endpoint,
    "signatureVersion" => OssClient::OSS_SIGNATURE_VERSION_V4,
    "region"=> "cn-hangzhou"
  );
  $ossClient = new OssClient($config);
  printf($ossClient);
} catch (OssException $e) {
  printf($e->getMessage() . "\n");
  return;
}

次に何をすべきか

資格情報プロバイダーを初期化した後、資格情報プロバイダーを使用してOSSClientインスタンスを作成します。 詳細については、「初期化」をご参照ください。