Tüm Ürünler
Search
Belge Merkezi

Object Storage Service:OSS SDK for Node.js

Son Güncelleme:Oct 01, 2026

Node.js için OSS SDK, Object Storage Service (OSS) ile Node.js uygulamalarınızın entegrasyonunu basitleştirir. Dosya yükleme, indirme ve izin yönetimi gibi temel özellikleri destekleyerek bulut tabanlı dosya depolama ve yönetim işlevlerini hızlıca uygulamanıza olanak tanır.

Hızlı entegrasyon

Node.js için OSS SDK'yı hızlıca entegre etmek için aşağıdaki adımları izleyin.

image

Ortamı hazırlayın

Node.js çalışma zamanı ortamını indirin ve yükleyin. En iyi uyumluluk ve performans için Node.js 8,0 veya sonraki bir sürümü kullanmanızı öneririz.

  • Node.js sürümünü kontrol etmek için node -v komutunu çalıştırın.

  • npm sürümünü kontrol etmek için npm -v komutunu çalıştırın.

SDK'yı yükleyin

Node.js sürümüne göre uygun SDK sürümünü seçin.

  • Node.js 8,0 veya üzeri: En son SDK 6.x sürümünü kullanın.

  • Node.js 8,0'dan önceki sürümler: SDK 4.x sürümünü kullanın.

Sürüm 6.x'i yükleyin (önerilen)

npm install ali-oss@^6.x --save

Sürüm 4.x'i yükleyin

npm install ali-oss@^4.x --save

Kurulum tamamlandıktan sonra npm list ali-oss komutunu çalıştırarak kurulumu doğrulayabilirsiniz. Kurulum başarılı olursa SDK sürümü görüntülenir.

Erişim kimlik bilgilerini yapılandırın

Bir RAM kullanıcısının AccessKey çiftini kullanarak erişim kimlik bilgilerini yapılandırın.

  1. RAM konsolu üzerinden Permanent AccessKey Pair seçeneğiyle bir RAM kullanıcısı oluşturun. AccessKey çiftini kaydedin ve kullanıcıya AliyunOSSFullAccess iznini atayın.

  2. RAM kullanıcısının AccessKey çiftini kullanarak ortam değişkenlerini yapılandırın.

    Linux

    1. Komut satırı arayüzünde aşağıdaki komutları çalıştırarak ortam değişkeni ayarlarını ~/.bashrc dosyasına ekleyin.

      echo "export OSS_ACCESS_KEY_ID='YOUR_ACCESS_KEY_ID'" >> ~/.bashrc
      echo "export OSS_ACCESS_KEY_SECRET='YOUR_ACCESS_KEY_SECRET'" >> ~/.bashrc
    2. Değişiklikleri uygulamak için aşağıdaki komutu çalıştırın.

      source ~/.bashrc
    3. Ortam değişkenlerinin doğru yapılandırıldığını doğrulamak için aşağıdaki komutları çalıştırın.

      echo $OSS_ACCESS_KEY_ID
      echo $OSS_ACCESS_KEY_SECRET

    macOS

    1. Varsayılan kabuk türünü görüntülemek için terminalde aşağıdaki komutu çalıştırın.

      echo $SHELL
    2. Varsayılan kabuk türüne göre aşağıdaki işlemleri gerçekleştirin.

      Zsh

      1. Aşağıdaki komutları çalıştırarak ortam değişkeni ayarlarını ~/.zshrc dosyasına ekleyin.

        echo "export OSS_ACCESS_KEY_ID='YOUR_ACCESS_KEY_ID'" >> ~/.zshrc
        echo "export OSS_ACCESS_KEY_SECRET='YOUR_ACCESS_KEY_SECRET'" >> ~/.zshrc
      2. Değişiklikleri uygulamak için aşağıdaki komutu çalıştırın.

        source ~/.zshrc
      3. Ortam değişkenlerinin doğru yapılandırıldığını doğrulamak için aşağıdaki komutları çalıştırın.

        echo $OSS_ACCESS_KEY_ID
        echo $OSS_ACCESS_KEY_SECRET

      Bash

      1. Aşağıdaki komutları çalıştırarak ortam değişkeni ayarlarını ~/.bash_profile dosyasına ekleyin.

        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. Değişiklikleri uygulamak için aşağıdaki komutu çalıştırın.

        source ~/.bash_profile
      3. Ortam değişkenlerinin doğru yapılandırıldığını doğrulamak için aşağıdaki komutları çalıştırın.

        echo $OSS_ACCESS_KEY_ID
        echo $OSS_ACCESS_KEY_SECRET

    Windows

    CMD

    1. CMD'de aşağıdaki komutları çalıştırın.

      setx OSS_ACCESS_KEY_ID "YOUR_ACCESS_KEY_ID"
      setx OSS_ACCESS_KEY_SECRET "YOUR_ACCESS_KEY_SECRET"
    2. Ortam değişkenlerinin doğru yapılandırıldığını doğrulamak için aşağıdaki komutları çalıştırın.

      echo %OSS_ACCESS_KEY_ID%
      echo %OSS_ACCESS_KEY_SECRET%

    PowerShell

    1. PowerShell'de aşağıdaki komutları çalıştırın.

      [Environment]::SetEnvironmentVariable("OSS_ACCESS_KEY_ID", "YOUR_ACCESS_KEY_ID", [EnvironmentVariableTarget]::User)
      [Environment]::SetEnvironmentVariable("OSS_ACCESS_KEY_SECRET", "YOUR_ACCESS_KEY_SECRET", [EnvironmentVariableTarget]::User)
    2. Ortam değişkenlerinin doğru yapılandırıldığını doğrulamak için aşağıdaki komutları çalıştırın.

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

İstemciyi başlatın

Aşağıdaki örnek kod, Çin (Hangzhou) bölgesinin genel uç noktasını kullanarak bir istemcinin nasıl başlatılacağını ve hesabınızdaki paketleri listeleyerek SDK yapılandırmasının nasıl doğrulanacağını gösterir. Bölgeler ve uç noktaların tam listesi için bkz. Bölgeler ve uç noktalar.

// Sample code for initializing an OSS client using the OSS SDK for Node.js

const OSS = require('ali-oss');

async function main() {
    
    // Obtain access credentials from environment variables. You must set the OSS_ACCESS_KEY_ID and OSS_ACCESS_KEY_SECRET environment variables.
    const client = new OSS({
        // Set the region to oss-cn-hangzhou, which is the China (Hangzhou) region.
        region: 'oss-cn-hangzhou',
        // Obtain access credentials from environment variables.
        accessKeyId: process.env.OSS_ACCESS_KEY_ID,
        accessKeySecret: process.env.OSS_ACCESS_KEY_SECRET,
        // Enable Signature V4.
        authorizationV4: true,
    });

    try {
        // List all buckets.
        const result = await client.listBuckets();
        
        // Print the list of buckets.
        console.log(`Found ${result.buckets.length} buckets:`);
        
        for (const bucket of result.buckets) {
            console.log(bucket.name);
        }
        
    } catch (err) {
        console.log('Failed to list buckets. Details:');
        console.error(err);
        return;
    }
}

// Execute the main function.
main().catch(console.error);

İstemci yapılandırması

OSS istemcisi, farklı ağ ortamlarına ve performans gereksinimlerine uyum sağlamak için çeşitli yapılandırma seçeneklerini destekler. Uç nokta türü, zaman aşımı süresi ve bağlantı sayısı gibi parametreleri özelleştirerek istemcinin erişim performansını ve kararlılığını optimize edebilirsiniz. Yapılandırma seçenekleri hakkında daha fazla bilgi için bkz. İstemci yapılandırma öğeleri.

Dahili uç nokta kullanın

Veri aktarım maliyetlerinden kaçınmak, daha yüksek erişim hızları ve daha güçlü güvenlik elde etmek için OSS'e dahili ağ üzerinden erişebilirsiniz. Dahili ağ üzerinden OSS'e erişmek için istemci başlatma sırasında uç noktayı dahili uç nokta olarak ayarlayın.

const client = new OSS({
    // Set the region to oss-cn-hangzhou, which is the China (Hangzhou) region.
    region: 'oss-cn-hangzhou',
    // Obtain access credentials from environment variables.
    accessKeyId: process.env.OSS_ACCESS_KEY_ID,
    accessKeySecret: process.env.OSS_ACCESS_KEY_SECRET,
    // Enable Signature V4.
    authorizationV4: true,
    // Use an internal endpoint. This example uses the internal endpoint of the China (Hangzhou) region.
    endpoint: 'https://oss-cn-hangzhou-internal.aliyuncs.com',
});

Özel alan adı kullanın

OSS'e özel alan adı kullanarak erişmek için uç noktayı özel alan adı olarak ayarlayın ve istemci başlatma sırasında cname: true parametresini ayarlayarak CNAME seçeneğini etkinleştirin.

Özel alan adı kullanmadan önce özel alan adının bir pakete eşlendiğinden emin olun. Daha fazla bilgi için bkz. Özel alan adı kullanarak OSS'e erişin .
Not

Özel alan adı kullanırken client.listBuckets() yöntemini çağırmanız mümkün değildir.

// Obtain access credentials from environment variables. You must set the OSS_ACCESS_KEY_ID and OSS_ACCESS_KEY_SECRET environment variables.
const client = new OSS({
    // Set the region to oss-cn-hangzhou, which is the China (Hangzhou) region.
    region: 'oss-cn-hangzhou',
    // Obtain access credentials from environment variables.
    accessKeyId: process.env.OSS_ACCESS_KEY_ID,
    accessKeySecret: process.env.OSS_ACCESS_KEY_SECRET,
    // Enable Signature V4.
    authorizationV4: true,
    // Use a custom domain name.
    endpoint: 'http://example.com',
    // Specify the bucket name. The bucket name must be mapped to the custom domain name.
    bucket: 'example-bucket',
    // Enable the CNAME option.
    cname: true,
});

Hızlandırma uç noktası kullanın

Erişimi hızlandırmak için OSS istemcisini başlatırken uç noktayı hızlandırma uç noktası olarak ayarlayın.

// Obtain access credentials from environment variables. You must set the OSS_ACCESS_KEY_ID and OSS_ACCESS_KEY_SECRET environment variables.
const client = new OSS({
    // Set the region to oss-cn-hangzhou, which is the China (Hangzhou) region.
    region: 'oss-cn-hangzhou',
    // Obtain access credentials from environment variables.
    accessKeyId: process.env.OSS_ACCESS_KEY_ID,
    accessKeySecret: process.env.OSS_ACCESS_KEY_SECRET,
    // Enable Signature V4.
    authorizationV4: true,
    // Use an acceleration endpoint.
    endpoint: 'https://oss-accelerate.aliyuncs.com',
    // Specify the bucket name. Transfer acceleration must be enabled for the bucket.
    bucket: 'example-bucket',
});

İmza sürümü

Önemli

Alibaba Cloud Object Storage Service İmza V1 aşağıdaki plana göre kullanım dışı bırakılacaktır. Hizmet kesintilerini önlemek için en kısa sürede İmza V4'e yükseltme yapmanızı öneririz.

  • 1 Mart 2025 tarihinden itibaren yeni kullanıcılar İmza V1'i kullanamaz.

  • 1 Eylül 2025 tarihinden itibaren İmza V1 güncellenmeyecek veya bakımı yapılmayacak ve yeni paketler İmza V1'i kullanamayacaktır.

Aşağıdaki örnek kod, İmza V1 kullanarak bir istemcinin nasıl başlatılacağını gösterir. İmza V4 kullanarak bir istemcinin nasıl başlatılacağına ilişkin örnek için bkz. İstemciyi başlatın.

// Sample code for initializing an OSS client using the OSS SDK for Node.js

const OSS = require('ali-oss');

async function main() {
    
    // Obtain access credentials from environment variables. You must set the OSS_ACCESS_KEY_ID and OSS_ACCESS_KEY_SECRET environment variables.
    const client = new OSS({
        // Obtain access credentials from environment variables.
        accessKeyId: process.env.OSS_ACCESS_KEY_ID,
        accessKeySecret: process.env.OSS_ACCESS_KEY_SECRET,
    });

    try {
        // List all buckets.
        const result = await client.listBuckets();
        
        // Print the list of buckets.
        console.log(`Found ${result.buckets.length} buckets:`);
        
        for (const bucket of result.buckets) {
            console.log(bucket.name);
        }
        
    } catch (err) {
        console.log('Failed to list buckets. Details:');
        console.error(err);
        return;
    }
}

// Execute the main function.
main().catch(console.error);

Örnek kod

Aşağıdaki örnek kod, dosya yükleme, indirme, silme ve listeleme gibi temel dosya işlemlerinin nasıl gerçekleştirileceğini gösterir. Bu örnekler, Node.js için OSS SDK'nın temel kullanımını hızlıca öğrenmenize yardımcı olur. Daha fazla örnek için GitHub örneklerine veya belirli özellikler için SDK referansına bakın.

Dosya yükleyin

Aşağıdaki örnek, yerel bir dosyanın bir OSS paketine nasıl yükleneceğini gösterir. Ayrıca, depolama sınıfları, erişim izinleri ve etiketler üzerinde hassas kontrol sağlamak için özel istek üstbilgileri kullanarak dosya özelliklerinin nasıl ayarlanacağını da gösterir.

// Sample code for uploading a file using the OSS SDK for Node.js

const OSS = require('ali-oss');
const path = require('path');

async function main() {
    
    // Obtain access credentials from environment variables. You must set the OSS_ACCESS_KEY_ID and OSS_ACCESS_KEY_SECRET environment variables.
    const client = new OSS({
        // Set the region to oss-cn-hangzhou, which is the China (Hangzhou) region.
        region: 'oss-cn-hangzhou',
        // Obtain access credentials from environment variables.
        accessKeyId: process.env.OSS_ACCESS_KEY_ID,
        accessKeySecret: process.env.OSS_ACCESS_KEY_SECRET,
        // Enable Signature V4.
        authorizationV4: true,
        // Specify the bucket name.
        bucket: 'example-bucket',
    });

    // Custom request headers.
    const headers = {
        // Specify the storage class of the object.
        'x-oss-storage-class': 'Standard',
        // Specify the access control list (ACL) of the object.
        'x-oss-object-acl': 'private',
        // Specify that the file is downloaded as an attachment when accessed through a URL.
        'Content-Disposition': 'attachment',
        // Set tags for the object. You can set multiple tags.
        'x-oss-tagging': 'Tag1=1&Tag2=2',
        // Specify whether to overwrite an object that has the same name. In this example, this parameter is set to true, which indicates that an object with the same name is not overwritten.
        'x-oss-forbid-overwrite': 'true',
    };

    try {
        // Configure file information.
        const key = 'dest.jpg';                    // The path of the file in OSS.
        const localFilePath = path.normalize('dest.jpg'); // The full path of the local file.
        
        // Upload the local file to the specified path in OSS.
        const result = await client.put(key, localFilePath, { headers });
        
        console.log(`File uploaded: ${localFilePath} -> ${key}`);
        console.log('Upload result:', result);
        
    } catch (err) {
        console.log('Upload failed. Details:');
        console.error(err);
        return;
    }
}

// Execute the main function.
main().catch(console.error);

Dosya indirin

Aşağıdaki örnek, bir dosyanın OSS paketinden belirtilen yerel yola nasıl indirileceğini gösterir.

// Sample code for downloading a file using the OSS SDK for Node.js

const OSS = require('ali-oss');

async function main() {
    
    // Obtain access credentials from environment variables. You must set the OSS_ACCESS_KEY_ID and OSS_ACCESS_KEY_SECRET environment variables.
    const client = new OSS({
        // Set the region to oss-cn-hangzhou, which is the China (Hangzhou) region.
        region: 'oss-cn-hangzhou',
        // Obtain access credentials from environment variables.
        accessKeyId: process.env.OSS_ACCESS_KEY_ID,
        accessKeySecret: process.env.OSS_ACCESS_KEY_SECRET,
        // Enable Signature V4.
        authorizationV4: true,
        // Specify the bucket name.
        bucket: 'example-bucket',
    });

    try {
        // Configure file information.
        const key = 'dest.jpg';       // The path of the file in OSS.
        const filePath = 'dest.jpg';  // The local path to save the file.
        
        // Download the file from OSS to the specified local path.
        const result = await client.get(key, filePath);
        
        console.log(`File downloaded: ${key} -> ${filePath}`);
        
    } catch (err) {
        console.log('Download failed. Details:');
        console.error(err);
        return;
    }
}

// Execute the main function.
main().catch(console.error);

Dosya silin

Aşağıdaki örnek, belirtilen bir dosyanın OSS paketinden nasıl silineceğini gösterir.

// Sample code for deleting a file using the OSS SDK for Node.js

const OSS = require('ali-oss');

async function main() {
    
    // Obtain access credentials from environment variables. You must set the OSS_ACCESS_KEY_ID and OSS_ACCESS_KEY_SECRET environment variables.
    const client = new OSS({
        // Set the region to oss-cn-hangzhou, which is the China (Hangzhou) region.
        region: 'oss-cn-hangzhou',
        // Obtain access credentials from environment variables.
        accessKeyId: process.env.OSS_ACCESS_KEY_ID,
        accessKeySecret: process.env.OSS_ACCESS_KEY_SECRET,
        // Enable Signature V4.
        authorizationV4: true,
        // Specify the bucket name.
        bucket: 'example-bucket',
    });

    try {
        // Configure file information.
        const key = 'dest.jpg';  // The path of the file to delete in OSS.
        
        // Delete the specified file from OSS.
        const result = await client.delete(key);
        
        console.log(`File deleted: ${key}`);
        console.log('Delete result:', result);
        
    } catch (err) {
        console.log('Delete failed. Details:');
        console.error(err);
        return;
    }
}

// Execute the main function.
main().catch(console.error);

Dosyaları listeleyin

Aşağıdaki örnek, bir OSS paketindeki dosyaların nasıl listeleneceğini gösterir. Varsayılan olarak en fazla 100 dosyanın ayrıntıları döndürülür.

// Sample code for listing files using the OSS SDK for Node.js

const OSS = require('ali-oss');

async function main() {
    
    // Obtain access credentials from environment variables. You must set the OSS_ACCESS_KEY_ID and OSS_ACCESS_KEY_SECRET environment variables.
    const client = new OSS({
        // Set the region to oss-cn-hangzhou, which is the China (Hangzhou) region.
        region: 'oss-cn-hangzhou',
        // Obtain access credentials from environment variables.
        accessKeyId: process.env.OSS_ACCESS_KEY_ID,
        accessKeySecret: process.env.OSS_ACCESS_KEY_SECRET,
        // Enable Signature V4.
        authorizationV4: true,
        // Specify the bucket name.
        bucket: 'example-bucket',
    });

    try {
        // By default, a maximum of 100 files are returned if no parameters are specified.
        const result = await client.list();
        
        console.log(`Found ${result.objects ? result.objects.length : 0} files:`);
        
        // Print the list of files.
        if (result.objects && result.objects.length > 0) {
            for (const object of result.objects) {
                console.log(`File name: ${object.name}, Size: ${object.size} bytes, Last modified: ${object.lastModified}`);
            }
        } else {
            console.log('No files found in the bucket.');
        }
        
    } catch (err) {
        console.log('Failed to list files. Details:');
        console.error(err);
        return;
    }
}

// Execute the main function.
main().catch(console.error);

Özel durum işleme

Node.js için OSS SDK'yı kullanarak OSS'e erişirken bir hata oluşursa OSS, HTTP durum kodu, hata mesajı ve istek kimliği gibi ayrıntıları içeren bir hata yanıtı döndürür. Örneğin, var olmayan bir nesneyi indirmeye çalışırsanız aşağıdakine benzer bir hata mesajı döndürülür (bazı bilgiler atlanmıştır):

Error [NoSuchKeyError]: Object not exists {
  status: 404,
  code: 'NoSuchKey',
  requestId: '6904202CA7BABC37395E28AB'
}

Hataya neden olan sorunu belirlemek ve çözüm bulmak için hata kodunu kullanabilirsiniz. Hata kodları hakkında daha fazla bilgi için bkz. HTTP durum kodları. Bir sorunla karşılaşırsanız istek kimliğini sağlayarak çevrimiçi teknik destekten de yardım alabilirsiniz.

Erişim kimlik bilgisi yapılandırması

OSS, birden çok kimlik bilgisi başlatma yöntemini destekler. Kimlik doğrulama ve yetkilendirme gereksinimlerinize göre uygun bir yöntem seçin.

Erişim kimlik bilgilerinin nasıl seçileceğini görüntülemek için tıklayın


Kimlik bilgisi sağlayıcısı başlatma yöntemi


Senaryolar


Önceden yapılandırılmış AccessKey çifti veya Security Token Service (STS) belirteci gerektirir


Alt düzey kimlik bilgileri


Kimlik bilgisi geçerliliği


Kimlik bilgisi döndürme veya yenileme yöntemi


RAM kullanıcısının AccessKey çiftini kullanın


Dış saldırılara karşı savunmasız olmayan güvenli ve kararlı bir ortamda dağıtılan, sık kimlik bilgisi döndürmesi gerektirmeyen ve Alibaba Cloud hizmetlerine uzun süreli erişim isteyen uygulamalar.


Evet


AccessKey


Uzun vadeli


Manuel döndürme


STS belirteci kullanın


Güvenilmeyen bir ortamda dağıtılan ve kontrollü kimlik bilgisi geçerliliği ile izinler gerektiren uygulamalar.


Evet


Security Token Service belirteci


Geçici


Manuel yenileme


RAM rolü ARN'si kullanın


Hesaplar arası erişim gibi yetkili erişim gerektiren uygulamalar.


Evet


Security Token Service belirteci


Geçici


Otomatik yenileme


ECS RAM rolü kullanın


Alibaba Cloud ECS örneklerinde, ECI örneklerinde veya Container Service for Kubernetes çalışan düğümlerinde dağıtılan uygulamalar.


Hayır


Security Token Service belirteci


Geçici


Otomatik yenileme


OIDC rolü ARN'si kullanın


Alibaba Cloud'daki Container Service for Kubernetes kümelerinin çalışan düğümlerinde dağıtılan güvenilmeyen uygulamalar.


Hayır


Security Token Service belirteci


Geçici


Otomatik yenileme


Kimlik bilgisi URI'si kullanın


Erişim kimlik bilgilerini harici bir sistemden alması gereken uygulamalar.


Hayır


Security Token Service belirteci


Geçici


Otomatik yenileme

RAM kullanıcısının AccessKey çiftini kullanın

Bu yöntem, güvenli ve kararlı bir ortamda dağıtılan, OSS'e uzun süreli erişim gerektiren ve sık kimlik bilgisi döndürmesine ihtiyaç duymayan uygulamalar için uygundur. Kimlik bilgisi sağlayıcısını bir Alibaba Cloud hesabının veya RAM kullanıcısının AccessKey çifti (AccessKey ID ve AccessKey secret) kullanarak başlatabilirsiniz. Bu yöntem, AccessKey çiftinin manuel olarak bakımını gerektirdiğinden güvenlik riskleri oluşturabilir ve bakım karmaşıklığını artırabilir.

Önemli
  • Bir Alibaba Cloud hesabı tüm kaynaklar üzerinde tam yetkiye sahiptir. Bir Alibaba Cloud hesabının AccessKey çiftinin sızdırılması sisteminizi önemli güvenlik risklerine maruz bırakır. Güvenlik nedeniyle bir Alibaba Cloud hesabının AccessKey çiftini kullanmanızı önermiyoruz. Bunun yerine, minimum gerekli izinlere sahip bir RAM kullanıcısının AccessKey çiftini kullanmanızı öneririz.

  • Bir RAM kullanıcısı için AccessKey çifti oluşturmak için bkz. AccessKey çifti oluşturun. Bir RAM kullanıcısının AccessKey ID'si ve AccessKey secret'ı yalnızca AccessKey çifti oluşturulurken görüntülenir. Bunları güvenli bir şekilde saklamalısınız. AccessKey çiftini unutursanız yeni bir tane oluşturmanız gerekir.

  1. RAM kullanıcısının AccessKey çiftini kullanarak ortam değişkenlerini yapılandırın.

    Linux

    1. Komut satırı arayüzünde aşağıdaki komutları çalıştırarak ortam değişkeni ayarlarını ~/.bashrc dosyasına ekleyin.

      echo "export OSS_ACCESS_KEY_ID='YOUR_ACCESS_KEY_ID'" >> ~/.bashrc
      echo "export OSS_ACCESS_KEY_SECRET='YOUR_ACCESS_KEY_SECRET'" >> ~/.bashrc
    2. Değişiklikleri uygulamak için aşağıdaki komutu çalıştırın.

      source ~/.bashrc
    3. Ortam değişkenlerinin doğru yapılandırıldığını doğrulamak için aşağıdaki komutları çalıştırın.

      echo $OSS_ACCESS_KEY_ID
      echo $OSS_ACCESS_KEY_SECRET

    macOS

    1. Varsayılan kabuk türünü görüntülemek için terminalde aşağıdaki komutu çalıştırın.

      echo $SHELL
    2. Varsayılan kabuk türüne göre aşağıdaki işlemleri gerçekleştirin.

      Zsh

      1. Aşağıdaki komutları çalıştırarak ortam değişkeni ayarlarını ~/.zshrc dosyasına ekleyin.

        echo "export OSS_ACCESS_KEY_ID='YOUR_ACCESS_KEY_ID'" >> ~/.zshrc
        echo "export OSS_ACCESS_KEY_SECRET='YOUR_ACCESS_KEY_SECRET'" >> ~/.zshrc
      2. Değişiklikleri uygulamak için aşağıdaki komutu çalıştırın.

        source ~/.zshrc
      3. Ortam değişkenlerinin doğru yapılandırıldığını doğrulamak için aşağıdaki komutları çalıştırın.

        echo $OSS_ACCESS_KEY_ID
        echo $OSS_ACCESS_KEY_SECRET

      Bash

      1. Aşağıdaki komutları çalıştırarak ortam değişkeni ayarlarını ~/.bash_profile dosyasına ekleyin.

        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. Değişiklikleri uygulamak için aşağıdaki komutu çalıştırın.

        source ~/.bash_profile
      3. Ortam değişkenlerinin doğru yapılandırıldığını doğrulamak için aşağıdaki komutları çalıştırın.

        echo $OSS_ACCESS_KEY_ID
        echo $OSS_ACCESS_KEY_SECRET

    Windows

    CMD

    1. CMD'de aşağıdaki komutları çalıştırın.

      setx OSS_ACCESS_KEY_ID "YOUR_ACCESS_KEY_ID"
      setx OSS_ACCESS_KEY_SECRET "YOUR_ACCESS_KEY_SECRET"
    2. Ortam değişkenlerinin doğru yapılandırıldığını doğrulamak için aşağıdaki komutları çalıştırın.

      echo %OSS_ACCESS_KEY_ID%
      echo %OSS_ACCESS_KEY_SECRET%

    PowerShell

    1. PowerShell'de aşağıdaki komutları çalıştırın.

      [Environment]::SetEnvironmentVariable("OSS_ACCESS_KEY_ID", "YOUR_ACCESS_KEY_ID", [EnvironmentVariableTarget]::User)
      [Environment]::SetEnvironmentVariable("OSS_ACCESS_KEY_SECRET", "YOUR_ACCESS_KEY_SECRET", [EnvironmentVariableTarget]::User)
    2. Ortam değişkenlerinin doğru yapılandırıldığını doğrulamak için aşağıdaki komutları çalıştırın.

      [Environment]::GetEnvironmentVariable("OSS_ACCESS_KEY_ID", [EnvironmentVariableTarget]::User)
      [Environment]::GetEnvironmentVariable("OSS_ACCESS_KEY_SECRET", [EnvironmentVariableTarget]::User)
  2. Sistem ortam değişkenlerini değiştirdikten sonra IDE, komut satırı arayüzü, diğer masaüstü uygulamaları ve arka uç hizmetleri gibi derleme ve çalışma zamanı ortamını yeniden başlatın veya yenileyin. Böylece en son sistem ortam değişkenlerinin yüklendiğinden emin olursunuz.

  3. Kimlik bilgisi bilgilerini ortam değişkenleri aracılığıyla iletin.

    const OSS = require("ali-oss");
    
    // Initialize OSS.
    const client = new OSS({
      // Obtain the value of AccessKey ID from an environment variable.
      accessKeyId: process.env.OSS_ACCESS_KEY_ID,
      // Obtain the value of AccessKey secret from an environment variable.
      accessKeySecret: process.env.OSS_ACCESS_KEY_SECRET
    });
    
    // listBuckets
    const buckets = await client.listBuckets();
    console.log(buckets);

STS belirteci kullanın

Bu yöntem, OSS'e geçici erişim gerektiren uygulamalar için uygundur. Kimlik bilgisi sağlayıcısını, STS'den aldığınız geçici kimlik kimlik bilgileri (AccessKey ID, AccessKey secret ve güvenlik belirteci) kullanarak başlatabilirsiniz. Bu yöntem, STS belirtecini manuel olarak sürdürmenizi gerektirdiğinden güvenlik riskleri oluşturabilir ve bakım karmaşıklığını artırabilir. OSS'e birden çok kez geçici olarak erişmeniz gerekiyorsa STS belirtecini manuel olarak yenilemeniz gerekir.

Önemli
  1. Geçici kimlik kimlik bilgilerini kullanarak ortam değişkenlerini ayarlayın.

    macOS, Linux ve Unix

    Önemli
    • Bir RAM kullanıcısının AccessKey çifti yerine STS'den alınan geçici kimlik kimlik bilgilerini (AccessKey ID, AccessKey secret ve güvenlik belirteci) kullanın.

    • STS'den alınan AccessKey ID "STS" ile başlar, örneğin "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>

    Windows

    Önemli
    • Bir RAM kullanıcısının AccessKey çifti (AccessKey ID ve AccessKey secret) yerine STS'den alınan geçici kimlik kimlik bilgilerini (AccessKey ID, AccessKey secret ve güvenlik belirteci) kullanın.

    • STS'den alınan AccessKey ID "STS" ile başlar, örneğin "STS.".

    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. Kimlik bilgisi bilgilerini ortam değişkenleri aracılığıyla iletin.

    const OSS = require("ali-oss");
    
    // Initialize OSS.
    const client = new OSS({
      // Obtain the value of AccessKey ID from an environment variable.
      accessKeyId: process.env.OSS_ACCESS_KEY_ID,
      // Obtain the value of AccessKey secret from an environment variable.
      accessKeySecret: process.env.OSS_ACCESS_KEY_SECRET,
      // Obtain the value of the STS token from an environment variable.
      stsToken: process.env.OSS_SESSION_TOKEN
    });
    
    // listBuckets
    const buckets = await client.listBuckets();
    console.log(buckets);

RAM rolü ARN'si kullanın

Bu yöntem, hesaplar arası erişim gibi OSS'e yetkili erişim gerektiren uygulamalar için uygundur. Kimlik bilgisi sağlayıcısını bir RAM rolünün Alibaba Cloud Resource Name (ARN) değerini belirterek başlatabilirsiniz. Bu yöntem STS belirteklerine dayanır. Kimlik bilgisi aracı, mevcut belirtecin süresi dolmadan önce STS'den bir STS belirteci alır ve yeni bir STS belirteci istemek için AssumeRole işlemi çağırır. policy parametresine bir değer atayarak RAM rolünün izinlerini daha da kısıtlayabilirsiniz.

Önemli
  • Bir Alibaba Cloud hesabı tüm kaynaklar üzerinde tam yetkiye sahiptir. Bir Alibaba Cloud hesabının AccessKey çiftinin sızdırılması sisteminizi önemli güvenlik risklerine maruz bırakır. Güvenlik nedeniyle bir Alibaba Cloud hesabının AccessKey çiftini kullanmanızı önermiyoruz. Bunun yerine, minimum gerekli izinlere sahip bir RAM kullanıcısının AccessKey çiftini kullanmanızı öneririz.

  • Bir RAM kullanıcısı için AccessKey çifti oluşturmak için bkz. AccessKey çifti oluşturun. Bir RAM kullanıcısının AccessKey ID'si ve AccessKey secret'ı yalnızca AccessKey çifti oluşturulurken görüntülenir. Bunları güvenli bir şekilde saklamalısınız. AccessKey çiftini unutursanız yeni bir tane oluşturmanız gerekir.

  • Bir RAM rolünün ARN'sini almak için bkz. Güvenilir bir Alibaba Cloud hesabı için RAM rolü oluşturun.

  1. Kimlik bilgisi bağımlılığını ekleyin.

    npm install @alicloud/credentials
  2. Erişim kimlik bilgisi olarak AccessKey çiftini ve RAM rolü ARN'sini yapılandırın.

    const Credential = require("@alicloud/credentials");
    const OSS = require("ali-oss");
    
    // Initialize the Credentials client using a RAM role ARN.
    const credentialsConfig = new Credential.Config({
      // The credential type.
      type: "ram_role_arn",
      // Obtain the value of AccessKey ID from an environment variable.
      accessKeyId: process.env.OSS_ACCESS_KEY_ID,
      // Obtain the value of AccessKey secret from an environment variable.
      accessKeySecret: process.env.OSS_ACCESS_KEY_SECRET,
      // The ARN of the RAM role to assume. Example: acs:ram::123456789012****:role/adminrole. You can set roleArn using the ALIBABA_CLOUD_ROLE_ARN environment variable.
      roleArn: '<RoleArn>',
      // The name of the role session. You can set RoleSessionName using the ALIBABA_CLOUD_ROLE_SESSION_NAME environment variable.
      roleSessionName: '<RoleSessionName>',
      // A more restrictive access policy. This parameter is optional. Example: {"Statement": [{"Action": ["*"],"Effect": "Allow","Resource": ["*"]}],"Version":"1"}
      // policy: '<Policy>',
      roleSessionExpiration: 3600
    });
    const credentialClient = new Credential.default(credentialsConfig);
    const credential = await credentialClient.getCredential();
    
    // Initialize OSS.
    const client = new OSS({
      accessKeyId:credential.accessKeyId,
      accessKeySecret: credential.accessKeySecret,
      stsToken: credential.securityToken,
      refreshSTSTokenInterval: 0, // The credential provider controls the update of accessKeyId, accessKeySecret, and 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 rolü kullanın

Bu yöntem, ECS örneklerinde, ECI örneklerinde veya Container Service for Kubernetes çalışan düğümlerinde çalışan uygulamalar için uygundur. Kimlik bilgisi sağlayıcısını bir ECS RAM rolü kullanarak başlatmanızı öneririz. Bu yöntem STS belirteklerine dayanır. Bir ECS RAM rolü, bir ECS örneğine, ECI örneğine veya Container Service for Kubernetes çalışan düğümüne bir rol eklemenize ve örnek içindeki STS belirtecini otomatik olarak yenilemenize olanak tanır. Bu yöntem, bir AccessKey çifti veya STS belirteci sağlama ihtiyacını ortadan kaldırarak manuel bakım ile ilgili riskleri azaltır. Bir ECS RAM rolünün nasıl alınacağını öğrenmek için bkz. Güvenilir bir Alibaba Cloud hesabı için RAM rolü oluşturun. Bir rolün bir ECS örneğine nasıl ekleneceğini öğrenmek için bkz. Örnek RAM rolü ekleyin.

  1. Kimlik bilgisi bağımlılığını ekleyin.

    npm install @alicloud/credentials
  2. Erişim kimlik bilgisi olarak ECS RAM rolünü yapılandırın.

    const Credential = require("@alicloud/credentials");
    const OSS = require("ali-oss");
    
    // Initialize the Credentials client using a RAM role ARN.
    const credentialsConfig = new Credential.Config({
      // The credential type.
      type: "ecs_ram_role",
      // Optional. The name of the ECS role. If you do not specify this parameter, the role name is automatically obtained. We recommend that you specify this parameter to reduce the number of requests. You can set roleName using the ALIBABA_CLOUD_ECS_METADATA environment variable.
      roleName: '<RoleName>'
    });
    const credentialClient = new Credential.default(credentialsConfig);
    
    const { accessKeyId, accessKeySecret, securityToken } = await credentialClient.getCredential();
    
    // Initialize the OSS client.
    const client = new OSS({
      accessKeyId,
      accessKeySecret,
      stsToken: securityToken,
      refreshSTSTokenInterval: 0, // The credential provider controls the update of accessKeyId, accessKeySecret, and stsToken.
      refreshSTSToken: async () => {
        const { accessKeyId, accessKeySecret, securityToken } = await credentialClient.getCredential();
        
        return {
          accessKeyId,
          accessKeySecret,
          stsToken: securityToken,
        };
      }
    });
    
    // listBuckets
    const buckets = await client.listBuckets();
    console.log(buckets);

OIDC rolü ARN'si kullanın

Container Service for Kubernetes'teki çalışan düğümler için bir RAM rolü yapılandırdıktan sonra, bu düğümlerdeki pod'lardaki uygulamalar global meta hizmeti aracılığıyla eklenen rolün STS belirtecini alabilir. Bu süreç, ECS üzerinde dağıtılan uygulamaların kimlik bilgilerini alma şekline benzer. Ancak kapalı kaynak kodlu müşteri uygulamaları gibi güvenilmeyen uygulamalar konteyner kümesinde dağıtılıyorsa bu uygulamaların çalışan düğümlere eklenen örnek RAM rolünün STS belirtecini almasını istemeyebilirsiniz. Bulut kaynaklarınızın güvenliğini sağlarken bu güvenilmeyen uygulamaların gerekli STS belirteçlerini güvenli bir şekilde almasına ve uygulama düzeyinde izin minimizasyonu sağlamasına olanak tanımak için RRSA (Service Account'lar için RAM Rolleri) özelliğini kullanabilirsiniz. Bu yöntem STS belirteklerine dayanır. Alibaba Cloud konteyner kümesi, farklı uygulama pod'ları için ilgili hizmet hesabı OIDC belirteci dosyasını oluşturur ve bağlar, ayrıca ilgili yapılandırma bilgilerini ortam değişkenlerine enjekte eder. Kimlik bilgisi aracı, yapılandırma bilgilerini ortam değişkenlerinden alır ve bağlı rolün STS belirtecini almak için STS'nin AssumeRoleWithOIDC işlemini çağırır. Bu yöntem, bir AccessKey çifti veya STS belirteci sağlama ihtiyacını ortadan kaldırarak manuel bakım ile ilgili riskleri azaltır. Daha fazla bilgi için bkz. RRSA kullanarak bir ServiceAccount'un RAM izinlerini yapılandırın ve pod düzeyinde izin yalıtımı sağlayın.

  1. Kimlik bilgisi bağımlılığını ekleyin.

    npm install @alicloud/credentials
  2. Erişim kimlik bilgisi olarak OIDC RAM rolünü yapılandırın.

    const OSS = require("ali-oss");
    const Credential = require("@alicloud/credentials");
    
    const credentialsConfig = new Credential.Config({
      // The credential type.
      type: "oidc_role_arn",
      // The ARN of the RAM role. You can set roleArn using the ALIBABA_CLOUD_ROLE_ARN environment variable.
      roleArn: '<RoleArn>',
      // The ARN of the OIDC provider. You can set oidcProviderArn using the ALIBABA_CLOUD_OIDC_PROVIDER_ARN environment variable.
      oidcProviderArn: '<OidcProviderArn>',
      // The path of the OIDC token file. You can set oidcTokenFilePath using the ALIBABA_CLOUD_OIDC_TOKEN_FILE environment variable.
      oidcTokenFilePath: '<OidcTokenFilePath>',
      // The name of the role session. You can set roleSessionName using the ALIBABA_CLOUD_ROLE_SESSION_NAME environment variable.
      roleSessionName: '<RoleSessionName>',
      // A more restrictive access policy. This parameter is optional. Example: {"Statement": [{"Action": ["*"],"Effect": "Allow","Resource": ["*"]}],"Version":"1"}
      // policy: "<Policy>",
      // Set the session expiration time.
      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, // The credential provider controls the update of accessKeyId, accessKeySecret, and stsToken.
      refreshSTSToken: async () => {
        const { accessKeyId, accessKeySecret, securityToken } = await credentialClient.getCredential();
        
        return {
          accessKeyId,
          accessKeySecret,
          stsToken: securityToken,
        };
      }
    });
    const buckets = await client.listBuckets();
    
    console.log(buckets);

Kimlik bilgisi URI'si kullanın

Bu yöntem, esnek kimlik bilgisi yönetimi ve anahtarsız erişim için Alibaba Cloud kimlik bilgilerini harici bir sistemden alması gereken uygulamalar için uygundur. Kimlik bilgisi sağlayıcısını bir kimlik bilgisi URI'si kullanarak başlatabilirsiniz. Bu yöntem STS belirteklerine dayanır. Kimlik bilgisi aracı, kimlik bilgisi istemcisini başlatmak için sağlanan URI'den bir STS belirteci alır. Bu yöntem, bir AccessKey çifti veya STS belirteci sağlama ihtiyacını ortadan kaldırarak manuel bakım ile ilgili riskleri azaltır.

Önemli
  • Kimlik bilgisi URI'si, STS belirtecinin alındığı sunucu adresidir.

  • Kimlik bilgisi URI'si yanıtını sağlayan arka uç hizmeti, STS belirtecini otomatik olarak yenileme mantığını uygulamalıdır. Bu sayede uygulamanın her zaman geçerli kimlik bilgileri alması sağlanır.

  1. Kimlik bilgisi aracının STS belirtecini doğru şekilde ayrıştırıp kullanabilmesi için URI aşağıdaki yanıt protokolüne uygun olmalıdır:

    • Yanıt durum kodu: 200

    • Yanıt gövdesi yapısı:

      {
          "Code": "Success",
          "AccessKeySecret": "AccessKeySecret",
          "AccessKeyId": "AccessKeyId",
          "Expiration": "2021-09-26T03:46:38Z",
          "SecurityToken": "SecurityToken"
      }
  2. Kimlik bilgisi bağımlılığını ekleyin.

    npm install @alicloud/credentials
  3. Erişim kimlik bilgisi olarak kimlik bilgisi URI'sini yapılandırın.

    const OSS = require("ali-oss");
    const Credential = require("@alicloud/credentials");
    
    // Initialize the Credentials client using a credentials URI.
    const credentialsConfig = new Credential.Config({
      // The credential type.
      type: "credentials_uri",
      // The URI from which to obtain the credentials. The format is http://local_or_remote_uri/. You can set credentialsUri using the ALIBABA_CLOUD_CREDENTIALS_URI environment variable.
      credentialsURI: '<CredentialsUri>'
    });
    const credentialClient = new Credential.default(credentialsConfig);
    const credential = await credentialClient.getCredential();
    
    // Initialize OSS.
    const client = new OSS({
      accessKeyId: credential.accessKeyId,
      accessKeySecret: credential.accessKeySecret,
      stsToken: credential.securityToken,
      refreshSTSTokenInterval: 0, // The credential provider controls the update of accessKeyId, accessKeySecret, and stsToken.
      refreshSTSToken: async () => {
        const { accessKeyId, accessKeySecret, securityToken } = await credentialClient.getCredential();
    
        return {
          accessKeyId,
          accessKeySecret,
          stsToken: securityToken,
        };
      }
    });
    
    // listBuckets
    const buckets = await client.listBuckets();
    console.log(buckets);

Referanslar