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

Object Storage Service:OSS SDK for PHP 1.0 を使用したアクセス資格情報の設定

最終更新日:Nov 07, 2025

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

前提条件

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

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

資格情報プロバイダー

OSS は、資格情報プロバイダーを初期化するための複数のメソッドをサポートしています。実際のシナリオの認証と権限付与の要件に基づいて、適切なメソッドを選択できます。

初期化メソッド

シナリオ

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

基になる資格情報

資格情報の有効期間

資格情報のローテーションまたはリフレッシュ方法

方法 1: AccessKey ペアを使用する

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

はい

AK

長期

手動ローテーション

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

アプリケーションは信頼できない環境にデプロイおよび実行されます。この場合、資格情報の有効期間とアクセス可能なリソースを管理します。

はい

STS トークン

一時的

手動リフレッシュ

方法 3: RAMRoleARN を使用する

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

はい

STS トークン

一時的

自動リフレッシュ

方法 4: ECSRAMRole を使用する

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

いいえ

STS トークン

一時的

自動リフレッシュ

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

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

いいえ

STS トークン

一時的

リフレッシュ不要

方法 6: OIDCRoleARN を使用する

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

いいえ

STS トークン

一時的

自動リフレッシュ

方法 7: CredentialsURI を使用する

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

いいえ

STS トークン

一時的

自動リフレッシュ

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

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

カスタム

カスタム

カスタム

カスタム

方法 1: AccessKey ペアを使用する

アプリケーションが、外部攻撃に対して脆弱でなく、OSS に長期間アクセスする必要がある安全で安定した環境にデプロイされている場合は、Alibaba Cloud アカウントまたは RAM ユーザーの AccessKey ペアを使用して資格情報プロバイダーを初期化できます。AccessKey ペアは、AccessKey ID と AccessKey Secret で構成されます。この方法では、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 {
        // 環境変数からアクセス資格情報を取得し、プロバイダーに資格情報を保存します。サンプルコードを実行する前に、OSS_ACCESS_KEY_ID および OSS_ACCESS_KEY_SECRET 環境変数が設定されていることを確認してください。
        $provider = new EnvironmentVariableCredentialsProvider();
        // バケットが配置されているリージョンのエンドポイントを指定します。たとえば、バケットが中国 (杭州) リージョンにある場合、エンドポイントを 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');
        // AccessKey ID と 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 に一時的にアクセスする必要がある場合は、セキュリティトークンサービス (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 {
        // 環境変数からアクセス資格情報を取得し、プロバイダーに資格情報を保存します。サンプルコードを実行する前に、OSS_ACCESS_KEY_ID、OSS_ACCESS_KEY_SECRET、および OSS_SESSION_TOKEN 環境変数が設定されていることを確認してください。
        $provider = new EnvironmentVariableCredentialsProvider();
        // バケットが配置されているリージョンのエンドポイントを指定します。たとえば、バケットが中国 (杭州) リージョンにある場合、エンドポイントを 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 以降が必要です。

アプリケーションに OSS へのアクセスを承認する必要がある場合 (たとえば、アプリケーションが別の Alibaba Cloud アカウントの OSS リソースにアクセスする必要がある場合)、RAMRoleARN を使用して資格情報プロバイダーを初期化できます。この方法の基本的なロジックは、STS から取得したセキュリティトークンを使用してアクセス資格情報を設定することです。指定された RAM ロールの Alibaba Cloud リソースネーム (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([
            // 資格情報の種類を ram_role_arn に設定します。
            'type' => 'ram_role_arn',
            // 環境変数から RAM ユーザーの AccessKey ペアを取得します。AccessKey ペアは、AccessKey ID と AccessKey Secret で構成されます。
            'accessKeyId' => getenv('OSS_ACCESS_KEY_ID'),
            'accessKeySecret' => getenv('OSS_ACCESS_KEY_SECRET'),
            // 環境変数から RAM ロールの ARN を取得します。これは、偽装する RAM ロールの ID です。フォーマット: acs:ram::$accountID:role/$roleName。
            'roleArn' => getenv('OSS_STS_ROLE_ARN'),
            // 異なるトークンを区別するために、ロールのカスタムセッション名を指定します。
            'roleSessionName' => 'yourRoleSessionName',
            // カスタムポリシーを指定します。
            'policy' => '',
        ]);
    
        $credential = new Credential($config);
        $providerWrapper = new AlibabaCloudCredentialsWrapper($credential);
        $provider = $providerWrapper->getCredentials();
        $config = array(
            'provider' => $provider,
            // バケットが配置されているリージョンのエンドポイントを指定します。たとえば、バケットが中国 (杭州) リージョンにある場合、エンドポイントを https://oss-cn-hangzhou.aliyuncs.com に設定します。実際のエンドポイントを指定してください。
            '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/credentials 1.2.0 以降が必要であることに注意してください。

アプリケーションが ECS インスタンス、Elastic Container Instance、または ACK ワーカーノードで実行されている場合は、ECSRAMRole を使用して資格情報プロバイダーを初期化することをお勧めします。この方法の基本的なロジックは、STS から取得したセキュリティトークンを使用してアクセス資格情報を設定することです。ECSRAMRole を使用すると、RAM ロールを ECS インスタンス、Elastic Container Instance、または ACK ワーカーノードにアタッチして、インスタンス上のセキュリティトークンを自動的にリフレッシュできます。この方法により、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([
            // 資格情報の種類を 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,
            // バケットが配置されているリージョンのエンドポイントを指定します。たとえば、バケットが中国 (杭州) リージョンにある場合、エンドポイントを https://oss-cn-hangzhou.aliyuncs.com に設定します。実際のエンドポイントを指定してください。
            '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 へのアクセスを承認する方法の詳細については、「関数ロールを使用して Function Compute に他の Alibaba Cloud サービスへのアクセスを許可する」をご参照ください。

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

    <?php
    
    use OSS\OssClient;
    use OSS\Core\OssException;
    
    function handler($event, $context) {
        /*
          Alibaba Cloud アカウントの AccessKey ペアは、すべての API 操作に対する権限を持っています。これらの資格情報を使用して OSS で操作を実行することは、リスクの高い操作です。RAM ユーザーを使用して API 操作を呼び出すか、日常の O&M を実行することをお勧めします。
          プロジェクトコードに AccessKey ID と AccessKey Secret を保存しないことをお勧めします。そうしないと、AccessKey ペアが漏洩し、アカウント内のすべてのリソースのセキュリティが侵害される可能性があります。
          この例では、AccessKey ID と AccessKey Secret はコンテキストから取得されます。
        */
        $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/credentials 1.2.0 以降が必要であることに注意してください。

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

  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 {
        // OIDC IdP の RAM ロールを使用して Credentials クライアントを初期化します。
        $config = new Credential\Config([
            // 資格情報の種類を指定します。
            'type' => 'oidc_role_arn',
            // ALIBABA_CLOUD_OIDC_PROVIDER_ARN 環境変数を指定して、OIDC IdP の ARN を指定します。
            'oidcProviderArn' => '<OidcProviderArn>',
            // ALIBABA_CLOUD_OIDC_TOKEN_FILE 環境変数を指定して、OIDC トークンファイルのパスを指定します。
            'oidcTokenFilePath' => '<OidcTokenFilePath>',
            // ALIBABA_CLOUD_ROLE_ARN 環境変数を指定して、RAM ロールの ARN を指定します。例: acs:ram::123456789012****:role/adminrole。
            'roleArn' => '<RoleArn>',
            // ALIBABA_CLOUD_ROLE_SESSION_NAME 環境変数を指定して、ロールセッション名を指定します。
            'roleSessionName' => '<RoleSessionName>',
            // オプション。RAM ロールの権限を制限します。例: {"Statement": [{"Action": ["*"],"Effect": "Allow","Resource": ["*"]}],"Version":"1"}。
            'policy' => '<Policy>',
            # セッションの有効期間を指定します。
            'durationSeconds' => 3600,
        ]);
        $credential = new Credential($config);
        $providerWrapper = new AlibabaCloudCredentialsWrapper($credential);
        $provider = $providerWrapper->getCredentials();
        $config = array(
            'provider' => $provider,
            // バケットが配置されているリージョンのエンドポイントを指定します。たとえば、バケットが中国 (杭州) リージョンにある場合、エンドポイントを https://oss-cn-hangzhou.aliyuncs.com に設定します。実際のエンドポイントを指定してください。
            '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/credentials 1.2.0 以降が必要であることに注意してください。

アプリケーションが外部システムから Alibaba Cloud 資格情報を取得して、柔軟な資格情報管理とキーレスアクセスを実装する必要がある場合は、CredentialsURI を使用して資格情報プロバイダーを初期化できます。この方法の基本的なロジックは、STS から取得したセキュリティトークンを使用してアクセス資格情報を設定することです。Credentials ツールは、指定した URI を使用してセキュリティトークンを取得し、クライアント上で OSSClient インスタンスを初期化します。この方法により、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([
            // 資格情報の種類を指定します。
            'type' => 'credentials_uri',
            // ALIBABA_CLOUD_CREDENTIALS_URI 環境変数を指定して、http://local_or_remote_uri/ 形式で資格情報の URI を取得します。
            'credentialsURI' => '<CredentialsUri>',
        ]);
        $credential = new Credential($config);
        $providerWrapper = new AlibabaCloudCredentialsWrapper($credential);
        $provider = $providerWrapper->getCredentials();
        $config = array(
            'provider' => $provider,
            // バケットが配置されているリージョンのエンドポイントを指定します。たとえば、バケットが中国 (杭州) リージョンにある場合、エンドポイントを https://oss-cn-hangzhou.aliyuncs.com に設定します。実際のエンドポイントを指定してください。
            '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 [
      'AccessKeyId' => 'id',
      'AccessKeySecret' => 'secret',
      ];
    // 一時的な資格情報を返します。
    //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 インスタンスを作成します。詳細については、「初期化 (PHP SDK V1)」をご参照ください。