如何为OSS PHP SDK配置访问凭证

更新时间:2025-04-21 02:34:39
重要

本文中含有需要您注意的重要提示信息,忽略该信息可能对您的业务造成影响,请务必仔细阅读。

使用PHP SDK发起OSS请求,您需要配置访问凭证。阿里云服务会通过访问凭证验证您的身份信息和访问权限。您可以根据使用场景对认证和授权的要求,选择不同类型的访问凭证。

注意事项

  • 如果您希望获取关于OSS支持的RegionEndpoint的对应关系,请参见OSS地域和访问域名

  • 如果您希望创建RAM用户的AccessKey,请参见创建AccessKey

  • 在配置访问凭证前,您需要安装最新的OSS PHP SDK。详情请参见安装

常用配置示例

使用RAM用户的AK

如果您的应用程序部署运行在安全、稳定且不易受外部攻击的环境中,需要长期访问您的OSS,且不能频繁轮转凭证时,您可以使用阿里云主账号或RAM用户的AK(Access Key ID、Access Key Secret)初始化凭证提供者。需要注意的是,该方式需要您手动维护一个AK,存在安全性风险和维护复杂度增加的风险。

警告
  • 阿里云账号拥有资源的全部权限,AK一旦泄露,会给系统带来巨大风险,不建议使用。推荐使用最小化授权的RAM用户的AK。

  • 如需创建RAM用户的AK,请直接访问创建AccessKey。RAM用户的Access Key ID、Access Key Secret信息仅在创建时显示,请及时保存,如若遗忘请考虑创建新的AK进行轮换。

环境变量

  1. 使用RAM用户AccessKey配置环境变量。

    Linux
    macOS
    Windows
    1. 在命令行界面执行以下命令来将环境变量设置追加到~/.bashrc 文件中。

      echo "export OSS_ACCESS_KEY_ID='YOUR_ACCESS_KEY_ID'" >> ~/.bashrc
      echo "export OSS_ACCESS_KEY_SECRET='YOUR_ACCESS_KEY_SECRET'" >> ~/.bashrc
      1. 执行以下命令使变更生效。

        source ~/.bashrc
      2. 执行以下命令检查环境变量是否生效。

        echo $OSS_ACCESS_KEY_ID
        echo $OSS_ACCESS_KEY_SECRET
    1. 在终端中执行以下命令,查看默认Shell类型。

      echo $SHELL
      1. 根据默认Shell类型进行操作。

        Zsh
        Bash
        1. 执行以下命令来将环境变量设置追加到 ~/.zshrc 文件中。

          echo "export OSS_ACCESS_KEY_ID='YOUR_ACCESS_KEY_ID'" >> ~/.zshrc
          echo "export OSS_ACCESS_KEY_SECRET='YOUR_ACCESS_KEY_SECRET'" >> ~/.zshrc
        2. 执行以下命令使变更生效。

          source ~/.zshrc
        3. 执行以下命令检查环境变量是否生效。

          echo $OSS_ACCESS_KEY_ID
          echo $OSS_ACCESS_KEY_SECRET
        1. 执行以下命令来将环境变量设置追加到 ~/.bash_profile 文件中。

          echo "export OSS_ACCESS_KEY_ID='YOUR_ACCESS_KEY_ID'" >> ~/.bash_profile
          echo "export OSS_ACCESS_KEY_SECRET='YOUR_ACCESS_KEY_SECRET'" >> ~/.bash_profile
        2. 执行以下命令使变更生效。

          source ~/.bash_profile
        3. 执行以下命令检查环境变量是否生效。

          echo $OSS_ACCESS_KEY_ID
          echo $OSS_ACCESS_KEY_SECRET
    CMD
    PowerShell
    1. CMD中运行以下命令。

      setx OSS_ACCESS_KEY_ID "YOUR_ACCESS_KEY_ID"
      setx OSS_ACCESS_KEY_SECRET "YOUR_ACCESS_KEY_SECRET"
      1. 运行以下命令,检查环境变量是否生效。

        echo %OSS_ACCESS_KEY_ID%
        echo %OSS_ACCESS_KEY_SECRET%
    1. PowerShell中运行以下命令。

      [Environment]::SetEnvironmentVariable("OSS_ACCESS_KEY_ID", "YOUR_ACCESS_KEY_ID", [EnvironmentVariableTarget]::User)
      [Environment]::SetEnvironmentVariable("OSS_ACCESS_KEY_SECRET", "YOUR_ACCESS_KEY_SECRET", [EnvironmentVariableTarget]::User)
      1. 运行以下命令,检查环境变量是否生效。

        [Environment]::GetEnvironmentVariable("OSS_ACCESS_KEY_ID", [EnvironmentVariableTarget]::User)
        [Environment]::GetEnvironmentVariable("OSS_ACCESS_KEY_SECRET", [EnvironmentVariableTarget]::User)

  2. 参考上述方式修改系统环境变量后,请重启或刷新您的编译运行环境,包括IDE、命令行界面、其他桌面应用程序及后台服务,以确保最新的系统环境变量成功加载。

  3. 使用环境变量来传递凭证信息。

    <?php
    
    // 引入自动加载文件,确保依赖库能够正确加载
    require_once __DIR__ . '/../vendor/autoload.php';
    
    use AlibabaCloud\Oss\V2 as Oss;
    
    # 填写Bucket所在地域。以华东1(杭州)为例,Region填写为cn-hangzhou
    $region = "cn-hangzhou";
    
    // 使用EnvironmentVariableCredentialsProvider从环境变量中读取Access Key ID和Access Key Secret
    $credentialsProvider = new Oss\Credentials\EnvironmentVariableCredentialsProvider();
    
    // 使用SDK的默认配置
    $cfg = Oss\Config::loadDefault();
    $cfg->setCredentialsProvider($credentialsProvider); // 设置凭证提供者
    $cfg->setRegion($region); // 设置Bucket所在的地域
    
    // 创建OSS客户端实例
    $client = new Oss\Client($cfg);
    
    // 使用创建好的client执行后续操作...

静态凭证

以下示例代码展示了如何对访问凭据直接进行硬编码,显式设置要使用的访问密钥。

警告

请勿将访问凭据嵌入到生产环境的应用程序中,此方法仅用于测试目的。

<?php

// 引入自动加载文件,确保依赖库能够正确加载
require_once __DIR__ . '/../vendor/autoload.php';

use AlibabaCloud\Oss\V2 as Oss;

# 填写Bucket所在地域。以华东1(杭州)为例,Region填写为cn-hangzhou
$region = "cn-hangzhou";

# 创建静态凭证提供者,显式设置访问密钥和密钥密码,请替换为您的RAM用户的AccessKey ID和AccessKey Secret
$credentialsProvider = new Oss\Credentials\StaticCredentialsProvider("RAM AccessKey ID","RAM AccessKey Secret");

// 使用SDK的默认配置
$cfg = Oss\Config::loadDefault();
$cfg->setCredentialsProvider($credentialsProvider); // 设置凭证提供者
$cfg->setRegion($region); // 设置Bucket所在的地域

// 创建OSS客户端实例
$client = new Oss\Client($cfg);

// 使用创建好的client执行后续操作...

使用STS临时访问凭证

如果您的应用程序需要临时访问OSS,您可以使用通过STS服务获取的临时身份凭证(Access Key ID、Access Key SecretSecurity Token)初始化凭证提供者。需要注意的是,该方式需要您手动维护一个STS Token,存在安全性风险和维护复杂度增加的风险。此外,如果您需要多次临时访问OSS,您需要手动刷新STS Token。

重要

环境变量

  1. 使用临时身份凭证设置环境变量。

    Mac OS X/Linux/Unix
    Windows
    警告
    • 请注意,此处使用的是通过STS服务获取的临时身份凭证(Access Key ID、Access Key SecretSecurity Token),而非RAM用户的Access KeyAccess Key Secret。

    • 请注意区分STS服务获取的Access Key IDSTS开头,例如“STS.****************”。

    export OSS_ACCESS_KEY_ID=<STS_ACCESS_KEY_ID>
    export OSS_ACCESS_KEY_SECRET=<STS_ACCESS_KEY_SECRET>
    export OSS_SESSION_TOKEN=<STS_SECURITY_TOKEN>
    警告
    • 请注意,此处使用的是通过STS服务获取的临时身份凭证(Access Key ID、Access Key SecretSecurity Token),而非RAM用户的AK(Access Key ID、Access Key Secret)。

    • 请注意区分STS服务获取的Access Key IDSTS开头,例如“STS.L4aBSCSJVMuKg5U1****”。

    set OSS_ACCESS_KEY_ID=<STS_ACCESS_KEY_ID>
    set OSS_ACCESS_KEY_SECRET=<STS_ACCESS_KEY_SECRET>
    set OSS_SESSION_TOKEN=<STS_SECURITY_TOKEN>
  2. 通过环境变量来传递凭证信息。

    <?php
    
    // 引入自动加载文件,确保依赖库能够正确加载
    require_once __DIR__ . '/../vendor/autoload.php';
    
    use AlibabaCloud\Oss\V2 as Oss;
    
    # 填写Bucket所在地域。以华东1(杭州)为例,Region填写为cn-hangzhou
    $region = "cn-hangzhou";
    
    // 使用EnvironmentVariableCredentialsProvider从环境变量中读取Access Key ID,Access Key Secret和Security Token
    $credentialsProvider = new Oss\Credentials\EnvironmentVariableCredentialsProvider();
    
    // 使用SDK的默认配置
    $cfg = Oss\Config::loadDefault();
    $cfg->setCredentialsProvider($credentialsProvider); // 设置凭证提供者
    $cfg->setRegion($region); // 设置Bucket所在的地域
    
    // 创建OSS客户端实例
    $client = new Oss\Client($cfg);
    
    // 使用创建好的client执行后续操作...

静态凭证

以下示例代码展示了如何对访问凭据直接进行硬编码,显式设置要使用的临时访问密钥。

警告

请勿将访问凭据嵌入到生产环境的应用程序中,此方法仅用于测试目的。

<?php

// 引入自动加载文件,确保依赖库能够正确加载
require_once __DIR__ . '/../vendor/autoload.php';

use AlibabaCloud\Oss\V2 as Oss;

# 填写Bucket所在地域。以华东1(杭州)为例,Region填写为cn-hangzhou
$region = "cn-hangzhou";

# 填写获取的临时访问密钥AccessKey ID和AccessKey Secret,非阿里云账号AccessKey ID和AccessKey Secret
# 请注意区分STS服务获取的Access Key ID是以STS开头,如下所示
$stsAccessKeyId = 'STS.****************';
$stsAccessKeySecret = 'yourAccessKeySecret';
# 填写获取的STS安全令牌(SecurityToken)
$stsSecurityToken = 'yourSecurityToken';

# 创建静态凭证提供者,显式设置临时访问密钥AccessKey ID和AccessKey Secret,以及STS安全令牌
$credentialsProvider = new Oss\Credentials\StaticCredentialsProvider($stsAccessKeyId, $stsAccessKeySecret, $stsSecurityToken);

// 使用SDK的默认配置
$cfg = Oss\Config::loadDefault();
$cfg->setCredentialsProvider($credentialsProvider); // 设置凭证提供者
$cfg->setRegion($region); // 设置Bucket所在的地域

// 创建OSS客户端实例
$client = new Oss\Client($cfg);

// 使用创建好的client执行后续操作...

更多场景化配置示例

使用RAMRoleARN

如果您的应用程序需要授权访问OSS,例如跨阿里云账号访问OSS,您可以使用RAMRoleARN初始化凭证提供者。该方式底层实现是STS Token。通过指定RAM角色的ARN(Alibabacloud Resource Name),Credentials工具会前往STS服务获取STS Token,并在会话到期前调用AssumeRole接口申请新的STS Token。此外,您还可以通过为policy赋值来限制RAM角色到一个更小的权限集合。

重要
  • 阿里云账号拥有资源的全部权限,AK一旦泄露,会给系统带来巨大风险,不建议使用。推荐使用最小化授权的RAM用户的AK。

  • 如需创建RAM用户的AK,请直接访问创建AccessKey。RAM用户的Access Key ID、Access Key Secret信息仅在创建时显示,请及时保存,如若遗忘请考虑创建新的AK进行轮换。

  • 如需获取RAMRoleARN,请直接访问CreateRole - 创建角色

  1. 添加阿里云凭证库credentials-php

    composer require alibabacloud/credentials
  2. 配置AKRAMRoleARN作为访问凭证。

    <?php
    
    // 引入自动加载文件,确保依赖库能够正确加载
    require_once __DIR__ . '/../vendor/autoload.php';
    
    use AlibabaCloud\Oss\V2 as Oss;
    use AlibabaCloud\Credentials\Credential;
    
    // 创建配置对象,用于定义凭证类型及相关信息
    $config = new Credential\Config([
        // 指定凭证类型,这里使用的是 RAM 角色的 ARN 类型
        'type' => 'ram_role_arn',
    
        // AccessKeyId 是阿里云账号的访问密钥 ID
        'accessKeyId' => 'AccessKeyId',
    
        // AccessKeySecret 是阿里云账号的访问密钥
        'accessKeySecret' => 'AccessKeySecret',
    
        // RoleArn 是 RAM 角色的 ARN 格式,例如:acs:ram::USER_Id:role/ROLE_NAME
        'roleArn' => 'RoleArn',
    
        // RoleSessionName 是角色会话名称,用于标识当前会话
        'roleSessionName' => 'yourRoleSessionName',
    
        // 可选参数,用于限制 STS Token 的权限范围
        'policy' => 'Policy',
    ]);
    
    // 使用配置对象初始化凭证实例
    $credential = new Credential($config);
    
    // 加载SDK默认配置
    $cfg = Oss\Config::loadDefault();
    
    // 设置凭证提供者,通过回调函数动态生成凭证
    $cfg->setCredentialsProvider(new Oss\Credentials\CredentialsProviderFunc(function () use ($credential) {
        // 获取临时凭证(STS Token)
        $cred = $credential->getCredential();
    
        // 返回包含 AccessKeyId、AccessKeySecret 和 SecurityToken 的凭证对象
        return new Oss\Credentials\Credentials(
            accessKeyId: $cred->getAccessKeyId(),       // 临时访问密钥 ID
            accessKeySecret: $cred->getAccessKeySecret(),   // 临时访问密钥
            securityToken: $cred->getSecurityToken()      // 安全令牌(STS Token)
        );
    }));
    
    // 设置 OSS 客户端的地域信息,以华东1(杭州)为例,Region 填写为 cn-hangzhou
    $region = 'cn-hangzhou';
    $cfg->setRegion($region);
    
    // 创建OSS客户端实例
    $client = new Oss\Client($cfg);
    
    // 使用创建好的client执行后续操作...

使用ECSRAMRole

如果您的应用程序运行在ECS实例、ECI实例、容器服务KubernetesWorker节点中,建议您使用ECSRAMRole初始化凭证提供者。该方式底层实现是STS Token。ECSRAMRole允许您将一个角色关联到ECS实例、ECI实例或容器服务 Kubernetes 版Worker节点,实现在实例内部自动刷新STS Token。该方式无需您提供一个AKSTS Token,消除了手动维护AKSTS Token的风险。如何获取ECSRAMRole,请参见CreateRole - 创建角色

  1. 添加阿里云凭证库credentials-php

    composer require alibabacloud/credentials
  2. 配置ECSRAMRole作为访问凭证。

    <?php
    
    // 引入自动加载文件,确保依赖库能够正确加载
    require_once 'vendor/autoload.php';
    
    use AlibabaCloud\Oss\V2 as Oss;
    use AlibabaCloud\Credentials\Credential;
    
    // 创建配置对象,用于定义凭证类型及相关信息
    $config = new Credential\Config([
        // 指定凭证类型,这里使用的是 ECS 实例 RAM 角色类型,固定值为 ecs_ram_role
        'type' => 'ecs_ram_role',
    
        // 填写 ECS 实例绑定的 RAM 角色名称
        'roleName' => "<role_name>",  // 替换为实际的 RAM 角色名称
    ]);
    
    // 使用配置对象初始化凭证实例
    $credential = new Credential($config);
    
    // 加载默认配置并获取 OSS 配置对象
    $cfg = Oss\Config::loadDefault();
    
    // 设置凭证提供者,通过回调函数动态生成凭证
    $cfg->setCredentialsProvider(new Oss\Credentials\CredentialsProviderFunc(function () use ($credential) {
        // 获取临时凭证(STS Token)
        $cred = $credential->getCredential();
    
        // 返回包含 AccessKeyId、AccessKeySecret 和 SecurityToken 的凭证对象
        return new Oss\Credentials\Credentials(
            accessKeyId: $cred->getAccessKeyId(),       // 临时访问密钥 ID
            accessKeySecret: $cred->getAccessKeySecret(), // 临时访问密钥
            securityToken: $cred->getSecurityToken()   // 安全令牌(STS Token)
        );
    }));
    
    // 设置 OSS 客户端的地域信息,以华东1(杭州)为例,Region 填写为 cn-hangzhou
    $region = 'cn-hangzhou';
    $cfg->setRegion($region);
    
    // 创建OSS客户端实例
    $client = new Oss\Client($cfg);
    
    // 使用创建好的client执行后续操作...
    

使用OIDCRoleARN

容器服务Kubernetes中设置了Worker节点RAM角色后,对应节点内的Pod中的应用也就可以像ECS上部署的应用一样,通过元数据服务(Meta Data Server)获取关联角色的STS Token。但如果容器集群上部署的是不可信的应用(比如部署您的客户提交的应用,代码也没有对您开放),您可能并不希望它们能通过元数据服务获取Worker节点关联实例RAM角色的STS Token。为了避免影响云上资源的安全,同时又能让这些不可信的应用安全地获取所需的STS Token,实现应用级别的权限最小化,您可以使用RRSA(RAM Roles for Service Account)功能。该方式底层实现是STS Token。阿里云容器集群会为不同的应用Pod创建和挂载相应的服务账户OIDC Token文件,并将相关配置信息注入到环境变量中,Credentials工具通过获取环境变量的配置信息,调用STS服务的AssumeRoleWithOIDC接口换取绑定角色的STS Token。该方式无需您提供一个AKSTS Token,消除了手动维护AKSTS Token的风险。详情请参见通过RRSA配置ServiceAccountRAM权限实现Pod权限隔离

  1. 添加阿里云凭证库credentials-php

    composer require alibabacloud/credentials
  1. 配置OIDCRoleArn作为访问凭证。

    <?php
    
    // 引入自动加载文件,确保依赖库能够正确加载
    require_once 'vendor/autoload.php';
    
    use AlibabaCloud\Oss\V2 as Oss;
    use AlibabaCloud\Credentials\Credential;
    
    
    // 创建配置对象,用于定义凭证类型及相关信息
    $config = new Credential\Config([
        // 指定凭证类型,这里使用的是 OIDC 角色 ARN 类型
        'type' => 'oidc_role_arn',
    
        // 指定 OIDC 身份提供商的 ARN(可以通过环境变量 ALIBABA_CLOUD_OIDC_PROVIDER_ARN 设置)
        'oidcProviderArn' => '<oidc_provider_arn>',  // 替换为实际的 OIDC 提供商 ARN
    
        // 指定 OIDC Token 文件路径(可以通过环境变量 ALIBABA_CLOUD_OIDC_TOKEN_FILE 设置)
        'oidcTokenFilePath' => '<oidc_token_file_path>',  // 替换为实际的 OIDC Token 文件路径
    
        // 指定 RAM 角色的 ARN(可以通过环境变量 ALIBABA_CLOUD_ROLE_ARN 设置)
        'roleArn' => '<role_arn>',  // 替换为实际的 RAM 角色 ARN
    
        // 指定角色会话名称(可以通过环境变量 ALIBABA_CLOUD_ROLE_SESSION_NAME 设置)
        'roleSessionName' => '<role_session_name>',  // 替换为实际的角色会话名称
    
        // 可选参数:指定 RAM 角色的权限策略,限制其权限范围
        // 示例策略:{"Statement": [{"Action": ["*"],"Effect": "Allow","Resource": ["*"]}],"Version":"1"}
        'policy' => '',  // 如果需要限制权限,请替换为实际的策略 JSON 字符串
    
        // 可选参数:指定会话的有效期(单位为秒,默认值为 3600 秒)
        'roleSessionExpiration' => 3600,  // 如果需要调整有效期,请修改此值
    ]);
    
    // 使用配置对象初始化凭证实例
    $credential = new Credential($config);
    
    // 加载默认配置并获取 OSS 配置对象
    $cfg = Oss\Config::loadDefault();
    
    // 设置凭证提供者,通过回调函数动态生成凭证
    $cfg->setCredentialsProvider(new Oss\Credentials\CredentialsProviderFunc(function () use ($credential) {
        // 获取临时凭证(STS Token)
        $cred = $credential->getCredential();
    
        // 返回包含 AccessKeyId、AccessKeySecret 和 SecurityToken 的凭证对象
        return new Oss\Credentials\Credentials(
            accessKeyId: $cred->getAccessKeyId(),       // 临时访问密钥 ID
            accessKeySecret: $cred->getAccessKeySecret(), // 临时访问密钥
            securityToken: $cred->getSecurityToken()   // 安全令牌(STS Token)
        );
    }));
    
    // 设置 OSS 客户端的地域信息,以华东1(杭州)为例,Region 填写为 cn-hangzhou
    $region = 'cn-hangzhou';
    $cfg->setRegion($region);
    
    // 创建OSS客户端实例
    $client = new Oss\Client($cfg);
    
    // 使用创建好的client执行后续操作...

使用自定义访问凭证

当以上凭证配置方式不满足要求时,您可以自定义获取凭证的方式。SDK 支持多种实现方式。

  1. 通过 Oss\Credentials\CredentialsProviderFunc

    Oss\Credentials\CredentialsProviderFunc 是 Oss\Credentials\CredentialsProvider 的易用性封装。

    <?php
    
    // 引入自动加载文件,确保依赖库能够正确加载
    require_once 'vendor/autoload.php';
    
    // 引入必要的命名空间
    use AlibabaCloud\Oss\V2 as Oss;
    use AlibabaCloud\Oss\V2\Credentials\Credentials;
    
    // 创建一个凭证提供者,通过匿名函数动态生成凭证
    $provider = new Oss\Credentials\CredentialsProviderFunc(
        function () {
            // 返回长期凭证(仅包含 AccessKeyId 和 AccessKeySecret)
            return new Credentials(
                accessKeyId: 'id',         // 替换为实际的RAM AccessKeyId
                accessKeySecret: 'secret'  // 替换为实际的RAM AccessKeySecret
            );
    
            // 如果需要返回临时凭证(包含 SecurityToken),可以取消以下代码的注释并替换实际值
            /*
            return new Credentials(
                accessKeyId: 'id',          // 替换为实际的STS临时凭证 AccessKeyId
                accessKeySecret: 'secret', // 替换为实际的STS临时凭证 AccessKeySecret
                securityToken: 'token'     // 替换为实际的STS临时凭证安全令牌(STS Token)
            );
            */
        }
    );
    
    // 加载默认配置并获取 OSS 配置对象
    $cfg = Oss\Config::loadDefault();
    
    // 设置凭证提供者为动态生成的凭证提供者
    $cfg->setCredentialsProvider($provider);
    
    // 设置 OSS 客户端的地域信息,以华东1(杭州)为例,Region 填写为 cn-hangzhou
    $region = 'cn-hangzhou';
    $cfg->setRegion($region);
    
    // 创建 OSS 客户端实例
    $client = new Oss\Client($cfg);
    
    // 使用创建好的 client 执行后续操作...
    
  2. 实现 Oss\Credentials\CredentialsProvider

    <?php
    
    // 引入自动加载文件,确保依赖库能够正确加载
    require_once 'vendor/autoload.php';
    
    // 引入必要的命名空间
    use AlibabaCloud\Oss\V2 as Oss;
    use AlibabaCloud\Oss\V2\Credentials\Credentials;
    
    // 自定义凭证提供者类,实现 CredentialsProvider 接口
    class CustomerCredentialsProvider implements Oss\Credentials\CredentialsProvider
    {
        /**
         * 获取凭证的方法,返回长期或临时凭证
         *
         * @return Credentials 返回包含访问密钥信息的凭证对象
         */
        public function getCredentials(): Credentials
        {
            // 返回长期凭证(仅包含 AccessKeyId 和 AccessKeySecret)
            return new Credentials(
                accessKeyId: 'id',         // 替换为实际的RAM AccessKeyId
                accessKeySecret: 'secret'  // 替换为实际的RAM AccessKeySecret
            );
    
            // 如果需要返回临时凭证(包含 SecurityToken),可以取消以下代码的注释并替换实际值
            /*
            return new Credentials(
                accessKeyId: 'id',          // 替换为实际的STS临时凭证AccessKeyId
                accessKeySecret: 'secret', // 替换为实际的STS临时凭证 AccessKeySecret
                securityToken: 'token'     // 替换为实际的STS临时凭证安全令牌(STS Token)
            );
            */
        }
    }
    
    // 实例化自定义凭证提供者
    $provider = new CustomerCredentialsProvider();
    
    // 加载默认配置并获取 OSS 配置对象
    $cfg = Oss\Config::loadDefault();
    
    // 设置凭证提供者为自定义的凭证提供者
    $cfg->setCredentialsProvider($provider);
    
    // 设置 OSS 客户端的地域信息,以华东1(杭州)为例,Region 填写为 cn-hangzhou
    $region = 'cn-hangzhou';
    $cfg->setRegion($region);
    
    // 创建 OSS 客户端实例
    $client = new Oss\Client($cfg);
    
    // 使用创建好的 client 执行后续操作...
    

常见问题

在使用通过STS服务获取的临时身份凭证去初始化凭证提供者时,误使用RAM用户的AK

当您使用通过STS服务获取的临时身份凭证(Access Key ID、Access Key SecretSecurity Token)初始化访问凭证时,请勿混淆STS服务返回的AKRAM用户的AK,STS对应的AK是以STS开头,示例如下:

image

如何查看RAM用户的AK?是否可以查看旧的AccessKey Secret?

  1. 如需查看RAM用户的AK,请直接参考文档查看RAM用户的AccessKey信息

  2. RAM用户的AccessKey Secret仅在创建时显示,之后无法查看,若您已经遗忘了的话无法找回。您可以直接访问RAM控制台选择具体用户,并创建新的AccessKey进行轮换。详细请参见创建AccessKey

使用RAM用户的AK进行上传文件时,报错AccessDenied如何排查?

上传文件时出现AccessDenied的问题,通常是因为使用了错误的AK信息或没有给RAM用户添加上传文件的权限,您可以按照以下步骤检查:

  1. 检查您使用的RAM用户的AK是否正确,请直接参考文档查看RAM用户的AccessKey信息

  2. RAM用户的AccessKey Secret仅在创建时显示,之后无法查看,若您已经遗忘了的话无法找回。您可以直接访问RAM控制台选择具体用户,并创建新的AccessKey进行轮换。详细请参见创建AccessKey

  3. 登录RAM控制台选择具体用户,给RAM用户添加上传文件到OSS的权限。

在使用外网Endpoint访问OSS时,报错无法连接该如何排查?

出现外网Endpoint无法连接的问题,通常是因为使用了错误的Endpoint地址或Bucket所在地域与请求的Endpoint不匹配。请您按照以下步骤检查:

  1. 确认Bucket所在地域:登录阿里云控制台,找到您的Bucket,确认其所在地域。

  2. 使用正确的Endpoint:根据Bucket所在地域,使用对应的外网Endpoint。例如,如果Bucket位于华东1(杭州),则应使用oss-cn-hangzhou.aliyuncs.com。各地域的Endpoint信息请参见OSS地域和访问域名

  3. 检查网络连接:确保您的网络环境可以正常访问互联网,避免因网络问题导致连接失败。

如果遇到报错问题该如何查询具体的错误类型?

关于错误类型的查询,OSS文档提供了EC错误码供您参阅,例如关于认证方面的常见报错问题,请参见02-AUTH

  • 本页导读 (1)
  • 注意事项
  • 常用配置示例
  • 使用RAM用户的AK
  • 使用STS临时访问凭证
  • 更多场景化配置示例
  • 使用RAMRoleARN
  • 使用ECSRAMRole
  • 使用OIDCRoleARN
  • 使用自定义访问凭证
  • 常见问题
  • 在使用通过STS服务获取的临时身份凭证去初始化凭证提供者时,误使用RAM用户的AK
  • 如何查看RAM用户的AK?是否可以查看旧的AccessKey Secret?
  • 使用RAM用户的AK进行上传文件时,报错AccessDenied如何排查?
  • 在使用外网Endpoint访问OSS时,报错无法连接该如何排查?
  • 如果遇到报错问题该如何查询具体的错误类型?