日本熟妇hd丰满老熟妇,中文字幕一区二区三区在线不卡 ,亚洲成片在线观看,免费女同在线一区二区

Node.js如何配置訪問憑證

重要

本文中含有需要您注意的重要提示信息,忽略該信息可能對您的業務造成影響,請務必仔細閱讀。

使用Node.js SDK發起OSS請求,您需要配置訪問憑證。阿里云服務會通過訪問憑證驗證您的身份信息和訪問權限。您可以根據使用場景對認證和授權的要求,選擇不同的方式提供憑證。

前提條件

在配置訪問憑證前,您需要安裝OSS Node.js SDK。詳情請參見安裝

初始化憑證提供者

憑證提供者選型

OSS支持多種方式初始化憑證提供者,您可以根據使用場景對認證和授權的要求,選擇對應的方式初始化憑證提供者。

憑證提供者初始化方式

適用場景

是否需要提供前置的AKSTS Token

底層實現基于的憑證

憑證有效期

憑證輪轉或刷新方式

方式一:使用AK

部署運行在安全、穩定且不易受外部攻擊的環境的應用程序,無需頻繁輪轉憑證就可以長期訪問云服務

AK

長期

手動輪轉

方式二:使用STS Token

部署運行在不可信的環境的應用程序,希望能控制訪問的有效期、權限

STS Token

臨時

手動刷新

方式三:使用RAMRoleARN

需要授權訪問云服務,例如跨阿里云賬號訪問云服務的應用程序

STS Token

臨時

自動刷新

方式四:通過ECS實例元數據普通模式獲取RAM角色

部署運行在阿里云的ECS實例、ECI實例、容器服務Kubernetes版的Worker節點中的應用程序

STS Token

臨時

自動刷新

方式五:使用OIDCRoleArn

部署運行在阿里云的容器服務Kubernetes版的Worker節點中的不可信應用程序

STS Token

臨時

自動刷新

方式六:使用CredentialsURI

需要通過外部系統獲取訪問憑證的應用程序

STS Token

臨時

自動刷新

方式一:使用AK

如果您的應用程序部署運行在安全、穩定且不易受外部攻擊的環境中,需要長期訪問您的OSS,且不能頻繁輪轉憑證時,您可以使用阿里云主賬號或RAM用戶的AK(Access Key ID、Access Key Secret)初始化憑證提供者。需要注意的是,該方式需要您手動維護一個AK,存在安全性風險和維護復雜度增加的風險。如何獲取AK,請參見CreateAccessKey - 創建主賬號或RAM用戶訪問密鑰

警告

阿里云賬號擁有資源的全部權限,AK一旦泄露,會給系統帶來巨大風險,不建議使用。推薦使用最小化授權的RAM用戶的AK。

  1. 設置環境變量。

    Mac OS X/Linux/Unix

    export ALIBABA_CLOUD_ACCESS_KEY_ID=<ALIBABA_CLOUD_ACCESS_KEY_ID>
    export ALIBABA_CLOUD_ACCESS_KEY_SECRET=<ALIBABA_CLOUD_ACCESS_KEY_SECRET>

    Windows

    set ALIBABA_CLOUD_ACCESS_KEY_ID=<ALIBABA_CLOUD_ACCESS_KEY_ID>
    set ALIBABA_CLOUD_ACCESS_KEY_SECRET=<ALIBABA_CLOUD_ACCESS_KEY_SECRET>
  2. 使用AK完成客戶端初始化。

    const OSS = require("ali-oss");
    
    // 初始化OSS
    const client = new OSS({
      // 從環境變量中獲取AccessKey ID的值
      accessKeyId: process.env.ALIBABA_CLOUD_ACCESS_KEY_ID,
      // 從環境變量中獲取AccessKey Secret的值
      accessKeySecret: process.env.ALIBABA_CLOUD_ACCESS_KEY_SECRET
    });
    
    // listBuckets
    const buckets = await client.listBuckets();
    console.log(buckets);
    

方式二:使用STS Token

以一個RAM用戶的身份調用STS服務的AssumeRole - 獲取扮演角色的臨時身份憑證接口,設置Token的最大過期時間,即可換取到臨時憑證STS Token。

  1. 設置環境變量。

    Mac OS X/Linux/Unix

    export ALIBABA_CLOUD_ACCESS_KEY_ID=<ALIBABA_CLOUD_ACCESS_KEY_ID>
    export ALIBABA_CLOUD_ACCESS_KEY_SECRET=<ALIBABA_CLOUD_ACCESS_KEY_SECRET>
    export ALIBABA_CLOUD_SECURITY_TOKEN=<ALIBABA_CLOUD_SECURITY_TOKEN>

    Windows

    set ALIBABA_CLOUD_ACCESS_KEY_ID=<ALIBABA_CLOUD_ACCESS_KEY_ID>
    set ALIBABA_CLOUD_ACCESS_KEY_SECRET=<ALIBABA_CLOUD_ACCESS_KEY_SECRET>
    set ALIBABA_CLOUD_SECURITY_TOKEN=<ALIBABA_CLOUD_SECURITY_TOKEN>
  2. 使用臨時憑證完成客戶端初始化。

    const OSS = require("ali-oss");
    
    // 初始化OSS
    const client = new OSS({
      // 從環境變量中獲取AccessKey ID的值
      accessKeyId: process.env.ALIBABA_CLOUD_ACCESS_KEY_ID,
      // 從環境變量中獲取AccessKey Secret的值
      accessKeySecret: process.env.ALIBABA_CLOUD_ACCESS_KEY_SECRET,
      // 從環境變量中獲取STS Token的值
      stsToken: process.env.ALIBABA_CLOUD_SECURITY_TOKEN
    });
    
    // listBuckets
    const buckets = await client.listBuckets();
    console.log(buckets);

方式三:使用RAMRoleARN

該方式底層實現是STS Token。通過指定RAM角色的ARN(Alibabacloud Resource Name),Credentials工具可以幫助開發者前往STS換取STS Token。您也可以通過為policy賦值來限制RAM角色到一個更小的權限集合。

使用AKRAMRoleARN初始化Credentials,完成客戶端初始化。

const Credential = require("@alicloud/credentials");
const OSS = require("ali-oss");

// 使用RamRoleArn初始化Credentials Client。
const credentialsConfig = new Credential.Config({
  // 憑證類型。
  type: "ram_role_arn",
  // 從環境變量中獲取AccessKey ID的值
  accessKeyId: process.env.ALIBABA_CLOUD_ACCESS_KEY_ID,
  // 從環境變量中獲取AccessKey Secret的值
  accessKeySecret: process.env.ALIBABA_CLOUD_ACCESS_KEY_SECRET,
  // 要扮演的RAM角色ARN,示例值:acs:ram::123456789012****:role/adminrole,可以通過環境變量ALIBABA_CLOUD_ROLE_ARN設置roleArn
  roleArn: '<RoleArn>',
  // 角色會話名稱,可以通過環境變量ALIBABA_CLOUD_ROLE_SESSION_NAME設置RoleSessionName
  roleSessionName: '<RoleSessionName>',
  // 設置更小的權限策略,非必填。示例值:{"Statement": [{"Action": ["*"],"Effect": "Allow","Resource": ["*"]}],"Version":"1"}
  // policy: '<Policy>',
  roleSessionExpiration: 3600
});
const credentialClient = new Credential.default(credentialsConfig);
const credential = await credentialClient.getCredential();

// 初始化OSS
const client = new OSS({
  accessKeyId:credential.accessKeyId,
  accessKeySecret: credential.accessKeySecret,
  stsToken: credential.securityToken,
  refreshSTSTokenInterval: 0, // 由Credential控制accessKeyId、accessKeySecret和stsToken值的更新
  refreshSTSToken: async () => {
    const { accessKeyId, accessKeySecret, securityToken } = await credentialClient.getCredential();
    return {
      accessKeyId,
      accessKeySecret,
      stsToken: securityToken,
    };
  }
});

// listBuckets
const buckets = await client.listBuckets();
console.log( buckets);

方式四:通過ECS實例元數據普通模式獲取RAM角色

該方式底層實現是STS Token。Credentials工具會自動獲取ECS實例綁定的RAM角色,調用ECS的元數據服務(Meta Data Server)換取STS Token,完成憑據客戶端初始化。通過Credentials工具讀取STS Token,完成客戶端初始化。

const Credential = require("@alicloud/credentials");
const OSS = require("ali-oss");

// 使用RamRoleArn初始化Credentials Client。
const credentialsConfig = new Credential.Config({
  // 憑證類型。
  type: "ecs_ram_role",
  // 選填,該ECS角色的角色名稱,不填會自動獲取,但是建議加上以減少請求次數,可以通過環境變量ALIBABA_CLOUD_ECS_METADATA設置roleName
  roleName: '<RoleName>'
});
const credentialClient = new Credential.default(credentialsConfig);

const { accessKeyId, accessKeySecret, securityToken } = await credentialClient.getCredential();

// 初始化OSS Client
const client = new OSS({
  accessKeyId,
  accessKeySecret,
  stsToken: securityToken,
  refreshSTSTokenInterval: 0, // 由Credential控制accessKeyId、accessKeySecret和stsToken值的更新
  refreshSTSToken: async () => {
    const { accessKeyId, accessKeySecret, securityToken } = await credentialClient.getCredential();
    
    return {
      accessKeyId,
      accessKeySecret,
      stsToken: securityToken,
    };
  }
});

// listBuckets
const buckets = await client.listBuckets();
console.log(buckets);

方式五:使用OIDCRoleArn

在容器服務 Kubernetes 版中設置了Worker節點RAM角色后,對應節點內的Pod中的應用也就可以像ECS上部署的應用一樣,通過元數據服務(Meta Data Server)獲取關聯角色的STS Token。但如果容器集群上部署的是不可信的應用(比如部署您的客戶提交的應用,代碼也沒有對您開放),您可能并不希望它們能通過元數據服務獲取Worker節點關聯實例RAM角色的STS Token。為了避免影響云上資源的安全,同時又能讓這些不可信的應用安全地獲取所需的 STS Token,實現應用級別的權限最小化,您可以使用RRSA(RAM Roles for Service Account)功能。阿里云容器集群會為不同的應用Pod創建和掛載相應的服務賬戶OIDC Token文件,并將相關配置信息注入到環境變量中,Credentials工具通過獲取環境變量的配置信息,調用STS服務的AssumeRoleWithOIDC - OIDC角色SSO時獲取扮演角色的臨時身份憑證接口換取綁定角色的STS Token。詳情請參見通過RRSA配置ServiceAccountRAM權限實現Pod權限隔離

配置OIDCRAM角色作為訪問憑證,完成客戶端初始化。

const OSS = require("ali-oss");
const Credential = require("@alicloud/credentials");

const credentialsConfig = new Credential.Config({
  // 憑證類型。
  type: "oidc_role_arn",
  // RAM角色名稱ARN,可以通過環境變量ALIBABA_CLOUD_ROLE_ARN設置roleArn
  roleArn: '<RoleArn>',
  // OIDC提供商ARN,可以通過環境變量ALIBABA_CLOUD_OIDC_PROVIDER_ARN設置oidcProviderArn
  oidcProviderArn: '<OidcProviderArn>',
  // OIDC Token文件路徑,可以通過環境變量ALIBABA_CLOUD_OIDC_TOKEN_FILE設置oidcTokenFilePath
  oidcTokenFilePath: '<OidcTokenFilePath>',
  // 角色會話名稱,可以通過環境變量ALIBABA_CLOUD_ROLE_SESSION_NAME設置roleSessionName
  roleSessionName: '<RoleSessionName>',
  // 設置更小的權限策略,非必填。示例值:{"Statement": [{"Action": ["*"],"Effect": "Allow","Resource": ["*"]}],"Version":"1"}
  // policy: "<Policy>",
  // 設置session過期時間
  roleSessionExpiration: 3600
});
const credentialClient = new Credential.default(credentialsConfig);
const { accessKeyId, accessKeySecret, securityToken } = await credentialClient.getCredential();
const client = new OSS({
  accessKeyId,
  accessKeySecret,
  stsToken: securityToken,
  refreshSTSTokenInterval: 0, // 由Credential控制accessKeyId、accessKeySecret和stsToken值的更新
  refreshSTSToken: async () => {
    const { accessKeyId, accessKeySecret, securityToken } = await credentialClient.getCredential();
    
    return {
      accessKeyId,
      accessKeySecret,
      stsToken: securityToken,
    };
  }
});
const buckets = await client.listBuckets();

console.log(buckets);

方式六:使用CredentialsURI

如果您的應用程序需要通過外部系統獲取阿里云憑證,從而實現靈活的憑證管理和無密鑰訪問,您可以使用CredentialsURI初始化憑證提供者。該方式底層實現是STS Token。Credentials工具通過您提供的URI獲取STS Token,完成憑證客戶端初始化。該方式無需您提供一個AKSTS Token,消除了手動維護AKSTS Token的風險。需要注意的是,提供CredentialsURI響應的后端服務需要實現STS Token的自動刷新邏輯,確保您的應用程序始終能獲取到有效憑證。

  1. 為了使Credentials工具正確解析和使用STS Token,URI必須遵循以下響應協議:

    • 響應狀態碼:200

    • 響應體結構:

      {
        "Code": "Success",
        "AccessKeySecret": "AccessKeySecret",
        "AccessKeyId": "AccessKeyId",
        "Expiration": "2021-09-26T03:46:38Z",
        "SecurityToken": "SecurityToken"
      }
  2. 配置CredentialsURI作為訪問憑證,完成客戶端初始化。

    const OSS = require("ali-oss");
    const Credential = require("@alicloud/credentials");
    
    // 通過憑證的 URI 初始化Credentials Client。
    const credentialsConfig = new Credential.Config({
      // 憑證類型。
      type: "credentials_uri",
      // 獲取憑證的 URI,格式為http://local_or_remote_uri/,可以通過環境變量ALIBABA_CLOUD_CREDENTIALS_URI設置credentialsUri
      credentialsURI: '<CredentialsUri>'
    });
    const credentialClient = new Credential.default(credentialsConfig);
    const credential = await credentialClient.getCredential();
    
    // 初始化OSS
    const client = new OSS({
      accessKeyId: credential.accessKeyId,
      accessKeySecret: credential.accessKeySecret,
      stsToken: credential.securityToken,
      refreshSTSTokenInterval: 0, // 由Credential控制accessKeyId、accessKeySecretstsToken值的更新
      refreshSTSToken: async () => {
        const { accessKeyId, accessKeySecret, securityToken } = await credentialClient.getCredential();
    
        return {
          accessKeyId,
          accessKeySecret,
          stsToken: securityToken,
        };
      }
    });
    
    // listBuckets
    const buckets = await client.listBuckets();
    console.log(buckets);
    

后續步驟

初始化憑證提供者后,您需要使用憑證提供者來創建OSSClient實例。詳情請參見初始化