详情页标题前

阿里云对象存储OSSGo配置访问凭证-云淘科技

详情页1

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

前提条件

在配置访问凭证前,您需要安装Go SDK。详情请参见Go安装。

访问凭证

您可以选择以下类型的访问凭证。

  • 临时访问凭证:对于需要高安全性的场景,例如临时授权应用访问OSS,建议使用临时访问凭证。临时访问凭证可以限制访问的有效期,从而减少访问凭证泄露的风险。此外,临时访问凭证支持权限控制,可以有效地避免权限过大的问题。更多信息,请参见使用临时访问凭证。

  • 长期访问凭证:出于安全性考虑,不建议您使用长期访问凭证,建议您使用临时访问凭证。对于需要便利性的场景,长期访问凭证可以在较长时间内免除多次刷新的麻烦。建议每三个月更换一次长期访问凭证,以提高账号的安全性。当长期访问凭证泄露或者不再使用时,应该及时删除或者禁用相关的访问凭证,以免造成安全风险。更多信息,请参见使用长期访问凭证。

使用临时访问凭证

当您准备临时使用Go SDK访问OSS服务时,您可以选择以下方式配置临时访问凭证。

  • 配置STS临时访问凭证:如果您需要在规定时间内访问您的OSS,您可以通过STS服务颁发一个STS临时访问凭证。临时访问凭证无需透露您的RAM用户访问密钥,使您的OSS访问更加安全。

  • 配置RAM角色:如果您需要授权访问或跨账号访问OSS,您可以通过RAM用户扮演对应RAM角色的方式授权访问或跨账号访问OSS。

  • 配置ECS的RAM角色:如果你需要在阿里云的云服务器ECS中访问您的OSS,您可以通过ECS实例RAM角色的方式访问OSS。实例RAM角色允许您将一个角色关联到云服务器实例,在实例内部基于STS临时凭证通过指定方法访问OSS。STS临时凭证由系统自动生成和更新,应用程序可以使用指定的实例元数据URL获取临时凭证,无需特别管理。

配置STS临时访问凭证

  1. 创建RAM用户。

    具体操作,请参见创建RAM用户。

  2. 为RAM用户授予 AliyunSTSAssumeRoleAccess权限。

    具体操作,请参见为RAM用户授权。

  3. 使用RAM用户调用STS服务的AssumeRole接口获取STS临时访问凭证。

    具体操作,请参见AssumeRole。

  4. 配置STS临时访问凭证。

    环境变量

    1. 使用获取的STS临时访问凭证配置环境变量。

      macOS

      1. 打开终端。

      2. 执行以下命令。

        nano ~/.bash_profile
      3. 在文件末尾添加从STS服务获取的临时访问凭证(包括AccessKeyId、AccessKeySecret、SecurityToken)。

        export OSS_ACCESS_KEY_ID=STS.NV5ZCwphFSXqscqUHAKbH****
        export OSS_ACCESS_KEY_SECRET=IrVTNZNy5yQelTETg0cZML3TQn**** 
        export OSS_SESSION_TOKEN=CAES+wMIARKAAZhjH0EUOIhJMQBMjRywXq7MQ/cjLYg80Aho1ek0Jm63XMhr9Oc5s˙∂˙∂3qaPer8p1YaX1NTDiCFZWFkvlHf1pQhuxfKBc+mRR9KAbHUefqH+rdjZqjTF7p2m1wJXP8S6k+G2MpHrUe6TYBkJ43GhhTVFMuM3BZajY3VjZWOXBIODRIR1FKZjIiEjMzMzE0MjY0NzM5MTE4NjkxMSoLY2xpZGSSDgSDGAGESGTETqOio6c2RrLWRlbW8vKgoUYWNzOm9zczoqOio6c2RrLWRlbW9KEDExNDg5MzAxMDcyNDY4MThSBTI2ODQyWg9Bc3N1bWVkUm9sZVVzZXJgAGoSMzMzMTQyNjQ3MzkxMTg2OTExcglzZGstZGVt****
      4. Ctrl+X,按Y键确认保存,然后按Enter键退出文件。

      5. 执行以下命令以使更改生效。

        source ~/.bash_profile
      6. 执行以下命令验证环境变量配置。

        echo $OSS_ACCESS_KEY_ID
        echo $OSS_ACCESS_KEY_SECRET
        echo $OSS_SESSION_TOKEN

        成功返回示例如下:

        STS.NV5ZCwphFSXqscqUHAKbH****
        IrVTNZNy5yQelTETg0cZML3TQn**** 
        CAES+wMIARKAAZhjH0EUOIhJMQBMjRywXq7MQ/cjLYg80Aho1ek0Jm63XMhr9Oc5s˙∂˙∂3qaPer8p1YaX1NTDiCFZWFkvlHf1pQhuxfKBc+mRR9KAbHUefqH+rdjZqjTF7p2m1wJXP8S6k+G2MpHrUe6TYBkJ43GhhTVFMuM3BZajY3VjZWOXBIODRIR1FKZjIiEjMzMzE0MjY0NzM5MTE4NjkxMSoLY2xpZGSSDgSDGAGESGTETqOio6c2RrLWRlbW8vKgoUYWNzOm9zczoqOio6c2RrLWRlbW9KEDExNDg5MzAxMDcyNDY4MThSBTI2ODQyWg9Bc3N1bWVkUm9sZVVzZXJgAGoSMzMzMTQyNjQ3MzkxMTg2OTExcglzZGstZGVt****

      Linux

      1. 打开终端。

      2. 执行以下命令。

        sudo vim /etc/profile
      3. 在文件末尾添加从STS服务获取的临时访问凭证(包括AccessKeyId、AccessKeySecret、SecurityToken)。

        export OSS_ACCESS_KEY_ID=STS.NV5ZCwphFSXqscqUHAKbH****
        export OSS_ACCESS_KEY_SECRET=IrVTNZNy5yQelTETg0cZML3TQn****
        export OSS_SESSION_TOKEN=CAES+wMIARKAAZhjH0EUOIhJMQBMjRywXq7MQ/cjLYg80Aho1ek0Jm63XMhr9Oc5s˙∂˙∂3qaPer8p1YaX1NTDiCFZWFkvlHf1pQhuxfKBc+mRR9KAbHUefqH+rdjZqjTF7p2m1wJXP8S6k+G2MpHrUe6TYBkJ43GhhTVFMuM3BZajY3VjZWOXBIODRIR1FKZjIiEjMzMzE0MjY0NzM5MTE4NjkxMSoLY2xpZGSSDgSDGAGESGTETqOio6c2RrLWRlbW8vKgoUYWNzOm9zczoqOio6c2RrLWRlbW9KEDExNDg5MzAxMDcyNDY4MThSBTI2ODQyWg9Bc3N1bWVkUm9sZVVzZXJgAGoSMzMzMTQyNjQ3MzkxMTg2OTExcglzZGstZGVt****
      4. ESC键退出编辑模式,输入:wq,然后按Enter键保存并退出文件。

      5. 输入以下命令以使更改生效。

        source /etc/profile
      6. 执行以下命令验证环境变量配置。

        echo $OSS_ACCESS_KEY_ID
        echo $OSS_ACCESS_KEY_SECRET
        echo $OSS_SESSION_TOKEN

        成功返回示例如下:

        STS.NV5ZCwphFSXqscqUHAKbH****
        IrVTNZNy5yQelTETg0cZML3TQn**** 
        CAES+wMIARKAAZhjH0EUOIhJMQBMjRywXq7MQ/cjLYg80Aho1ek0Jm63XMhr9Oc5s˙∂˙∂3qaPer8p1YaX1NTDiCFZWFkvlHf1pQhuxfKBc+mRR9KAbHUefqH+rdjZqjTF7p2m1wJXP8S6k+G2MpHrUe6TYBkJ43GhhTVFMuM3BZajY3VjZWOXBIODRIR1FKZjIiEjMzMzE0MjY0NzM5MTE4NjkxMSoLY2xpZGSSDgSDGAGESGTETqOio6c2RrLWRlbW8vKgoUYWNzOm9zczoqOio6c2RrLWRlbW9KEDExNDg5MzAxMDcyNDY4MThSBTI2ODQyWg9Bc3N1bWVkUm9sZVVzZXJgAGoSMzMzMTQyNjQ3MzkxMTg2OTExcglzZGstZGVt****

      Windows

      1. 打开命令行。

      2. 执行以下命令配置从STS服务获取的临时访问凭证(包括AccessKeyId、AccessKeySecret、SecurityToken)。

        set OSS_ACCESS_KEY_ID=STS.NV5ZCwphFSXqscqUHAKbH****
        set OSS_ACCESS_KEY_SECRET=IrVTNZNy5yQelTETg0cZML3TQn****
        set OSS_SESSION_TOKEN=CAES+wMIARKAAZhjH0EUOIhJMQBMjRywXq7MQ/cjLYg80Aho1ek0Jm63XMhr9Oc5s˙∂˙∂3qaPer8p1YaX1NTDiCFZWFkvlHf1pQhuxfKBc+mRR9KAbHUefqH+rdjZqjTF7p2m1wJXP8S6k+G2MpHrUe6TYBkJ43GhhTVFMuM3BZajY3VjZWOXBIODRIR1FKZjIiEjMzMzE0MjY0NzM5MTE4NjkxMSoLY2xpZGSSDgSDGAGESGTETqOio6c2RrLWRlbW8vKgoUYWNzOm9zczoqOio6c2RrLWRlbW9KEDExNDg5MzAxMDcyNDY4MThSBTI2ODQyWg9Bc3N1bWVkUm9sZVVzZXJgAGoSMzMzMTQyNjQ3MzkxMTg2OTExcglzZGstZGVt****
      3. 执行以下命令以使更改生效。

        setx OSS_ACCESS_KEY_ID "%OSS_ACCESS_KEY_ID%"
        setx OSS_ACCESS_KEY_SECRET "%OSS_ACCESS_KEY_SECRET%"
        setx OSS_SESSION_TOKEN "%OSS_SESSION_TOKEN%"
      4. 执行以下命令验证环境变量配置。

        echo %OSS_ACCESS_KEY_ID%
        echo %OSS_ACCESS_KEY_SECRET%
        echo %OSS_SESSION_TOKEN%

        成功返回示例如下:

        STS.NV5ZCwphFSXqscqUHAKbH****
        IrVTNZNy5yQelTETg0cZML3TQn**** 
        CAES+wMIARKAAZhjH0EUOIhJMQBMjRywXq7MQ/cjLYg80Aho1ek0Jm63XMhr9Oc5s˙∂˙∂3qaPer8p1YaX1NTDiCFZWFkvlHf1pQhuxfKBc+mRR9KAbHUefqH+rdjZqjTF7p2m1wJXP8S6k+G2MpHrUe6TYBkJ43GhhTVFMuM3BZajY3VjZWOXBIODRIR1FKZjIiEjMzMzE0MjY0NzM5MTE4NjkxMSoLY2xpZGSSDgSDGAGESGTETqOio6c2RrLWRlbW8vKgoUYWNzOm9zczoqOio6c2RrLWRlbW9KEDExNDg5MzAxMDcyNDY4MThSBTI2ODQyWg9Bc3N1bWVkUm9sZVVzZXJgAGoSMzMzMTQyNjQ3MzkxMTg2OTExcglzZGstZGVt****
    2. 从环境变量中获取STS临时访问凭证。

      package main
      
      import (
      	"fmt"
      	"github.com/aliyun/aliyun-oss-go-sdk/oss"
      	"os"
      )
      
      func main() {
      	// 使用环境变量中获取的STS临时访问密钥和安全令牌配置访问凭证。
      	provider, err := oss.NewEnvironmentVariableCredentialsProvider()
      	if err != nil {
      		fmt.Println("Error:", err)
      		os.Exit(-1)
      	}
          
      	// 创建OSSClient实例。
      	// yourEndpoint填写Bucket对应的Endpoint,以华东1(杭州)为例,填写为https://oss-cn-hangzhou.aliyuncs.com。其它Region请按实际情况填写。
      	client, err := oss.New("yourEndpoint", "", "", oss.SetCredentialsProvider(&provider))
      	if err != nil {
      		fmt.Println("Error:", err)
      		os.Exit(-1)
      	}
      }

    代码嵌入

    警告

    在代码中嵌入访问凭证会导致安全问题。如果访问凭证被泄漏,攻击者就可以使用该访问凭证来访问您的资源OSS,造成损失。因此,建议您使用更安全的方式,例如从环境变量中获取访问凭证,来提高安全性。

    package main
    
    import (
        "fmt"
        "github.com/aliyun/aliyun-oss-go-sdk/oss"
        "os"
    )
    func main(){
        // yourEndpoint填写Bucket对应的Endpoint,以华东1(杭州)为例,填写为https://oss-cn-hangzhou.aliyuncs.com。其它Region请按实际情况填写。
        // yourAccessKeyId以及yourAccessKeySecret分别填写从STS服务获取的临时访问密钥(AccessKey ID和AccessKey Secret)。
        // yourSecurityToken填写从STS服务获取的安全令牌(SecurityToken)。
        client, err := oss.New("yourEndpoint", "yourAccessKeyId", "yourAccessKeySecret", oss.SecurityToken("yourSecurityToken"))
        if err != nil {
            fmt.Println("Error:", err)
            os.Exit(-1)
        }
    } 

配置RAM角色

  1. 执行以下命令安装alibabacloud_credentials

    pip install alibabacloud_credentials
  2. 获取RAM用户的访问密钥。

    具体操作,请参见创建RAM用户的AccessKey。

    重要

    为降低RAM用户的访问密钥被泄露的风险,对于超过3个月的RAM用户的访问密钥,建议及时轮换。对于长期不用的RAM用户的访问密钥,建议及时禁用并删除。

  3. 获取目标RAM角色的RamRoleArn。

    说明

    RamRoleArn是RAM角色的ARN信息,即需要扮演的角色ID。格式为acs:ram::$accountID:role/$roleName。$accountID为阿里云账号ID。$roleName为RAM角色名称。

    具体操作,请参见查看RAM角色。

  4. 配置RAM用户的访问密钥和目标RAM角色的RAMRoleArn作为访问凭证。

    环境变量

    1. 使用获取的RAM用户的访问密钥和目标RAM角色的RamRoleArn配置环境变量。

      macOS

      1. 打开终端。

      2. 执行以下命令。

        nano ~/.bash_profile
      3. 在文件末尾添加获取的RAM用户的访问密钥和RAM角色的RamRoleArn。

        export OSS_ACCESS_KEY_ID=LTAI4GDty8ab9W4Y1D****
        export OSS_ACCESS_KEY_SECRET=IrVTNZNy5yQelTETg0cZML3TQn****  
        export OSS_STS_ROLE_ARN=acs:ram::17464958********:role/ossststest
      4. Ctrl+X,按Y键确认保存,然后按Enter键退出文件。

      5. 执行以下命令以使更改生效。

        source /etc/profile
      6. 执行以下命令验证环境变量配置。

        echo $OSS_ACCESS_KEY_ID
        echo $OSS_ACCESS_KEY_SECRET
        echo $OSS_STS_ROLE_ARN

        成功返回示例如下:

        LTAI4GDty8ab9W4Y1D****
        IrVTNZNy5yQelTETg0cZML3TQn****  
        acs:ram::17464958********:role/ossststest

      Linux

      1. 打开终端。

      2. 执行以下命令。

        sudo vim /etc/profile
      3. 在文件末尾添加获取的RAM用户的访问密钥和RAM角色的RamRoleArn。

        export OSS_ACCESS_KEY_ID=LTAI4GDty8ab9W4Y1D****
        export OSS_ACCESS_KEY_SECRET=IrVTNZNy5yQelTETg0cZML3TQn****  
        export OSS_STS_ROLE_ARN=acs:ram::17464958********:role/ossststest
      4. ESC键退出编辑模式,输入:wq,然后按Enter键保存并退出文件。

      5. 输入以下命令以使更改生效。

        source /etc/profile
      6. 执行以下命令验证环境变量配置。

        echo $OSS_ACCESS_KEY_ID
        echo $OSS_ACCESS_KEY_SECRET
        echo $OSS_STS_ROLE_ARN

        成功返回示例如下:

        LTAI4GDty8ab9W4Y1D****
        IrVTNZNy5yQelTETg0cZML3TQn****  
        acs:ram::17464958********:role/ossststest

      Windows

      1. 打开命令行。

      2. 执行以下命令配置RAM用户的访问密钥和RAM角色的RamRoleArn。

        set OSS_ACCESS_KEY_ID=LTAI4GDty8ab9W4Y1D****
        set OSS_ACCESS_KEY_SECRET=IrVTNZNy5yQelTETg0cZML3TQn****  
        set OSS_STS_ROLE_ARN=acs:ram::17464958********:role/ossststest
      3. 执行以下命令以使更改生效。

        setx OSS_ACCESS_KEY_ID "%OSS_ACCESS_KEY_ID%"
        setx OSS_ACCESS_KEY_SECRET "%OSS_ACCESS_KEY_SECRET%"
        setx OSS_STS_ROLE_ARN "%OSS_STS_ROLE_ARN%"
      4. 执行以下命令验证环境变量配置。

        echo %OSS_ACCESS_KEY_ID%
        echo %OSS_ACCESS_KEY_SECRET%
        echo %OSS_STS_ROLE_ARN%

        成功返回示例如下:

        LTAI4GDty8ab9W4Y1D****
        IrVTNZNy5yQelTETg0cZML3TQn****  
        acs:ram::17464958********:role/ossststest
    2. 从环境变量中获取RAM用户的访问密钥RAM角色的RamRoleArn。

      package main
      
      import (
          "fmt"
          "github.com/aliyun/aliyun-oss-go-sdk/oss"
          "github.com/aliyun/credentials-go/credentials"
          "os"
      )
      type Credentials struct {
          AccessKeyId     string
          AccessKeySecret string
          SecurityToken string
      }
      
      type defaultCredentialsProvider struct {
          cred credentials.Credential
      }
      
      func (credentials *Credentials) GetAccessKeyID() string {
          return credentials.AccessKeyId
      }
      
      func (credentials *Credentials) GetAccessKeySecret() string {
          return credentials.AccessKeySecret
      }
      
      func (credentials *Credentials) GetSecurityToken() string {
          return credentials.SecurityToken
      }
      
      func (defBuild *defaultCredentialsProvider) GetCredentials() oss.Credentials {
          id,_ := defBuild.cred.GetAccessKeyId()
          secret,_ := defBuild.cred.GetAccessKeySecret()
          token,_ := defBuild.cred.GetSecurityToken()
      
          return &Credentials{
              AccessKeyId: *id,
              AccessKeySecret: *secret,
              SecurityToken: *token,
          }
      }
      
      func NewCredentialsProvider(credential credentials.Credential) defaultCredentialsProvider {
          return defaultCredentialsProvider{
              cred: credential,
          }
      }
      
      func main(){
          config := new(credentials.Config).
              // 填写Credential类型,固定值为ram_role_arn。
              SetType("ram_role_arn").
              // 从环境变量中获取RAM用户的访问密钥(AccessKeyId和AccessKeySecret)。
              SetAccessKeyId(os.Getenv("OSS_ACCESS_KEY_ID")).        
              SetAccessKeySecret(os.Getenv("OSS_ACCESS_KEY_SECRET")).
      		// 从环境变量中获取RAM角色的ARN信息,即需要扮演的角色ID。格式为acs:ram::$accountID:role/$roleName。
              SetRoleArn(os.Getenv("OSS_STS_ROLE_ARN")).
              // 自定义角色会话名称,用于区分不同的令牌。
              SetRoleSessionName("Role_Session_Name").
              // (可选)限制STS Token权限。
              SetPolicy("").
              // (可选)限制STS Token的有效时间。
              SetRoleSessionExpiration(3600)
      
      
          arnCredential, err := credentials.NewCredential(config)
          if err != nil {
              fmt.Println("Error:", err)
              os.Exit(-1)
          }
      
          provider := NewCredentialsProvider(arnCredential)
          client, err := oss.New("oss-cn-hangzhou.aliyuncs.com", "", "", oss.SetCredentialsProvider(&provider))
          if err != nil {
              fmt.Println("Error:", err)
              os.Exit(-1)
          }
      }

    代码嵌入

    警告

    在代码中嵌入访问凭证会导致安全问题。如果访问凭证被泄漏,攻击者就可以使用该访问凭证来访问您的资源OSS,造成损失。因此,建议您使用更安全的方式,例如从环境变量中获取访问凭证,来提高安全性。

    package main
    
    import (
        "fmt"
        "github.com/aliyun/aliyun-oss-go-sdk/oss"
        "github.com/aliyun/credentials-go/credentials"
        "os"
    )
    type Credentials struct {
        AccessKeyId     string
        AccessKeySecret string
        SecurityToken string
    }
    
    type defaultCredentialsProvider struct {
        cred credentials.Credential
    }
    
    func (credentials *Credentials) GetAccessKeyID() string {
        return credentials.AccessKeyId
    }
    
    func (credentials *Credentials) GetAccessKeySecret() string {
        return credentials.AccessKeySecret
    }
    
    func (credentials *Credentials) GetSecurityToken() string {
        return credentials.SecurityToken
    }
    
    func (defBuild *defaultCredentialsProvider) GetCredentials() oss.Credentials {
        id,_ := defBuild.cred.GetAccessKeyId()
        secret,_ := defBuild.cred.GetAccessKeySecret()
        token,_ := defBuild.cred.GetSecurityToken()
    
        return &Credentials{
            AccessKeyId: *id,
            AccessKeySecret: *secret,
            SecurityToken: *token,
        }
    }
    
    func NewCredentialsProvider(credential credentials.Credential) defaultCredentialsProvider {
        return defaultCredentialsProvider{
            cred: credential,
        }
    }
    
    func main(){
        config := new(credentials.Config).
            // 填写Credential类型,固定值为ram_role_arn。
            SetType("ram_role_arn").
            // 填写RAM用户的访问密钥(AccessKeyId和AccessKeySecret)。
            SetAccessKeyId("AccessKeyId").        
            SetAccessKeySecret("AccessKeySecret").
            // 填写角色的ARN信息,即需要扮演的角色ID。格式为acs:ram::$accountID:role/$roleName。
            SetRoleArn("acs:ram::15069***********:role/ram-oss-test").
            // 自定义角色会话名称,用于区分不同的令牌。
            SetRoleSessionName("Role_Session_Name").
            // (可选)限制STS Token权限。
            SetPolicy("").
            // (可选)限制STS Token的有效时间。
            SetRoleSessionExpiration(3600)
    
    
        arnCredential, err := credentials.NewCredential(config)
        if err != nil {
            fmt.Println("Error:", err)
            os.Exit(-1)
        }
    
        provider := NewCredentialsProvider(arnCredential)
        client, err := oss.New("oss-cn-hangzhou.aliyuncs.com", "", "", oss.SetCredentialsProvider(&provider))
        if err != nil {
            fmt.Println("Error:", err)
            os.Exit(-1)
        }
    }

配置ECS的RAM角色

  1. 执行以下命令安装alibabacloud_credentials

    go get github.com/aliyun/credentials-go/credentials
  2. 为ECS实例授予RAM角色。

    具体操作,请参见授予实例RAM角色。

  3. 配置ECS的RAM角色作为访问凭证。

    package main
    
    import (
        "fmt"
        "github.com/aliyun/aliyun-oss-go-sdk/oss"
        "github.com/aliyun/credentials-go/credentials"
        "os"
    )
    type Credentials struct {
        AccessKeyId     string
        AccessKeySecret string
        SecurityToken string
    }
    
    type CredentialsProvider struct {
        cred credentials.Credential
    }
    
    func (credentials *Credentials) GetAccessKeyID() string {
        return credentials.AccessKeyId
    }
    
    func (credentials *Credentials) GetAccessKeySecret() string {
        return credentials.AccessKeySecret
    }
    
    func (credentials *Credentials) GetSecurityToken() string {
        return credentials.SecurityToken
    }
    
    func (defBuild CredentialsProvider) GetCredentials() oss.Credentials {
        id,_ := defBuild.cred.GetAccessKeyId()
        secret,_ := defBuild.cred.GetAccessKeySecret()
        token,_ := defBuild.cred.GetSecurityToken()
    
        return &Credentials{
            AccessKeyId: *id,
            AccessKeySecret: *secret,
            SecurityToken: *token,
        }
    }
    
    func NewStaticCredentialsProvider(credential credentials.Credential) CredentialsProvider {
        return CredentialsProvider{
            cred: credential,
        }
    }
    
    func main(){
        config := new(credentials.Config).
            // 指定Credential类型,固定值为ecs_ram_role。
            SetType("ecs_ram_role").
            // (可选项)指定角色名称。如果不指定,OSS会自动获取角色。强烈建议指定角色名称,以降低请求次数。
            SetRoleName("RoleName")
    
        ecsCredential, err := credentials.NewCredential(config)
        if err != nil {
            return
        }
        provider := NewStaticCredentialsProvider(ecsCredential)
        client, err := oss.New("oss-cn-hangzhou.aliyuncs.com", "", "", oss.SetCredentialsProvider(&provider))
        if err != nil {
            fmt.Println("Error:", err)
            os.Exit(-1)
        }
        fmt.Printf("client:%#v
    ", client)
    
    }

使用长期访问凭证

当您准备在应用或服务中长期使用Go SDK访问OSS服务时,您可以通过以下方式配置长期访问凭证。

配置RAM用户的访问密钥:如果您需要长期访问您的OSS,您可以通过RAM用户的访问密钥的方式访问您的OSS。

配置RAM用户的访问密钥

  1. 获取RAM用户的访问密钥。

    如何获取RAM用户的访问密钥,请参见创建RAM用户的AccessKey。

    重要

    对于超过3个月的RAM用户的访问密钥,建议及时轮换。对于长期不用的RAM用户的访问密钥,建议及时禁用并删除。以此降低RAM用户的访问密钥被泄露的风险。

  2. 配置RAM用户的访问密钥。

    环境变量

    1. 配置环境变量。

      macOS

      1. 打开终端。

      2. 执行以下命令。

        nano ~/.bash_profile
      3. 在文件末尾添加RAM用户的访问密钥。

        export OSS_ACCESS_KEY_ID=LTAI4GDty8ab9W4Y1D****
        export OSS_ACCESS_KEY_SECRET=IrVTNZNy5yQelTETg0cZML3TQn**** 
      4. Ctrl+X,按Y键确认保存,然后按Enter键退出文件。

      5. 输入以下命令以使更改生效。

        source ~/.bash_profile
      6. 执行以下命令验证环境变量配置。

        echo $OSS_ACCESS_KEY_ID
        echo $OSS_ACCESS_KEY_SECRET

        成功返回示例如下:

        LTAI4GDty8ab9W4Y1D****
        IrVTNZNy5yQelTETg0cZML3TQn**** 

      Linux

      1. 打开终端。

      2. 执行以下命令。

        sudo vim /etc/profile
      3. 在文件末尾添加RAM用户的访问密钥。

        export OSS_ACCESS_KEY_ID=LTAI4GDty8ab9W4Y1D****
        export OSS_ACCESS_KEY_SECRET=IrVTNZNy5yQelTETg0cZML3TQn**** 
      4. ESC键退出编辑模式,输入:wq,然后按Enter键保存并退出文件。

      5. 输入以下命令以使更改生效。

        source /etc/profile
      6. 执行以下命令验证环境变量配置。

        echo $OSS_ACCESS_KEY_ID
        echo $OSS_ACCESS_KEY_SECRET

        成功返回示例如下:

        LTAI4GDty8ab9W4Y1D****
        IrVTNZNy5yQelTETg0cZML3TQn**** 

      Windows

      1. 打开命令行。

      2. 执行以下命令配置RAM用户的访问密钥。

        set OSS_ACCESS_KEY_ID=LTAI4GDty8ab9W4Y1D****
        set OSS_ACCESS_KEY_SECRET=IrVTNZNy5yQelTETg0cZML3TQn**** 
      3. 执行以下命令以使更改生效。

        setx OSS_ACCESS_KEY_ID "%OSS_ACCESS_KEY_ID%"
        setx OSS_ACCESS_KEY_SECRET "%OSS_ACCESS_KEY_SECRET%"
      4. 执行以下命令验证环境变量配置。

        echo %OSS_ACCESS_KEY_ID%
        echo %OSS_ACCESS_KEY_SECRET%

        成功返回示例如下:

        LTAI4GDty8ab9W4Y1D****
        IrVTNZNy5yQelTETg0cZML3TQn**** 
    2. 从环境变量中获取RAM用户的访问密钥。

      package main
      
      import (
      	"fmt"
      	"github.com/aliyun/aliyun-oss-go-sdk/oss"
      	"os"
      )
      
      func main() {
      	// 使用环境变量中获取的RAM用户的访问密钥配置访问凭证。
      	provider, err := oss.NewEnvironmentVariableCredentialsProvider()
      	if err != nil {
      		fmt.Println("Error:", err)
      		os.Exit(-1)
      	}
      
      	// 创建OSSClient实例。
      	// yourEndpoint填写Bucket对应的Endpoint,以华东1(杭州)为例,填写为https://oss-cn-hangzhou.aliyuncs.com。其它Region请按实际情况填写。
      	client, err := oss.New("yourEndpoint", "", "", oss.SetCredentialsProvider(&provider))
      	if err != nil {
      		fmt.Println("Error:", err)
      		os.Exit(-1)
      	}
      }

    代码嵌入

    警告

    在代码中嵌入访问凭证会导致安全问题。如果访问凭证被泄漏,攻击者就可以使用该访问凭证来访问您的资源OSS,造成损失。因此,建议您使用更安全的方式,例如从环境变量中获取访问凭证,来提高安全性。

    package main
    
    import (
    	"fmt"
    	"github.com/aliyun/aliyun-oss-go-sdk/oss"
    	"os"
    )
    
    func main() {
        // 创建OSSClient实例。
        // yourEndpoint填写Bucket对应的Endpoint,以华东1(杭州)为例,填写为https://oss-cn-hangzhou.aliyuncs.com。其它Region请按实际情况填写。
        // yourAccessKeyId和yourAccessKeySecret填写RAM用户的访问密钥(AccessKey ID和AccessKey Secret)。
        client, err := oss.New("yourEndpoint", "yourAccessKeyId", "yourAccessKeySecret")
        if err != nil {
            fmt.Println("Error:", err)
            os.Exit(-1)
        }
    }

后续步骤

配置访问凭证后,您需要初始化OSSClient。详情请参见Go初始化。

内容没看懂? 不太想学习?想快速解决? 有偿解决: 联系专家

阿里云企业补贴进行中: 马上申请

腾讯云限时活动1折起,即将结束: 马上收藏

同尘科技为腾讯云授权服务中心。

购买腾讯云产品享受折上折,更有现金返利:同意关联,立享优惠

转转请注明出处:https://www.yunxiaoer.com/157091.html

(0)
上一篇 2023年12月10日
下一篇 2023年12月10日
详情页2

相关推荐

  • 腾讯云负载均衡抽样采集日志

    在您开启七层访问日志或者健康检查日志后,针对一些日志量较大的场景,全量日志上报可能会导致日志成本较高。负载均衡支持抽样采集部分日志,减少数据上报量,从而降低日志成本。说明:负载均衡支持配置访问日志和健康检查日志至日志服务 CLS,实现对日志数据的检索分析、可视化和告警等服务。腾讯云日志服务 CLS 为独立计费产品,计费标准请参见 CLS 计费详情。 前提条件…

    2023年12月9日
  • 腾讯云对象存储DELETE Bucket encryption

    功能描述 DELETE Bucket encryption 接口用于删除指定存储桶下的默认加密配置。要执行此接口,必须拥有 DeleteBucketEncryption 权限。默认情况下,Bucket 的持有者直接拥有权限使用该 API 接口,Bucket 持有者也可以将权限授予其他用户。 请求 请求示例 DELETE /?encryption HTTP 1…

    腾讯云 2023年12月9日
  • 信息流广告,信息流部分建议宽度830px,只针对默认列表样式,顺序随机
  • 腾讯云对象存储高级功能

    JS-SDK 提供了高级功能可直接对文档进行操作,以下是高级功能的调用流程。 1. 等待文档加载完成 使用高级功能之前,需等待文档加载完成。此处 demo 对象是指 JS-SDK 实例化后的对象,参考自定义配置概述。 await demo.ready() // 务必等待 demo ready 之后再调用高级 api 2. 获取文档对象 // 文字const …

    腾讯云 2023年12月9日
  • 腾讯云TDSQL-C MySQL版连接与网络

    如何访问 TDSQL-C MySQL 版? 连接 TDSQL-C MySQL 版的方式如下:内网地址连接:通过内网地址连接 TDSQL-C MySQL 版,使用云服务器 CVM 直接连接云数据库的内网地址,这种连接方式使用内网高速网络,延迟低。需注意,云服务器和数据库须是同一账号,且同一个 VPC 内(保障同一个地域)。外网地址连接:通过外网地址连接 TDS…

    腾讯云 2023年12月9日
  • 腾讯云对象存储更新模板

    功能描述 更新语音识别模板。 授权说明 授权策略中 action 设置为 ci:UpdateMediaTemplate 。查看所有 action。 服务开通 使用该功能需提前开通数据万象,并绑定存储桶。详情请参见 绑定存储桶。 使用限制 使用该接口时,请先确认相关限制条件。详情请参见 使用限制。 请求 请求示例 PUT /template/<Temp…

    腾讯云 2023年12月9日

联系我们

400-800-8888

在线咨询: QQ交谈

邮件:admin@example.com

工作时间:周一至周五,9:30-18:30,节假日休息

关注微信
本站为广大会员提供阿里云、腾讯云、华为云、百度云等一线大厂的购买,续费优惠,保证底价,买贵退差。