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

Alibaba Cloud SDK:アクセス認証情報の管理

最終更新日:Jun 09, 2026

Alibaba Cloud SDK を使用する場合、AccessKey ペアや Security Token Service (STS) トークンなどの認証情報は、Credentials ツールによって管理されます。このトピックでは、Credentials ツールがサポートする認証情報のタイプと、その設定方法について説明します。

背景

認証情報は、Alibaba Cloud サービスへのアクセス時にユーザーのアイデンティティを検証します。主な認証情報の種類は次のとおりです。

  1. AccessKey ペアは、Alibaba Cloud アカウントまたは RAM ユーザー用の永続的な認証情報です。AccessKey ID と AccessKey Secret で構成されます。

  2. STS トークンは、有効期間と権限スコープを設定できる RAM ロール用の一時的な認証情報です。詳細については、STS とはをご参照ください。

  3. ベアラートークンは、認証と認可に使用されます。

前提条件

認証情報ツールのインストール

次の npm コマンドを実行して、パッケージをインストールします。

npm install @alicloud/credentials

すべての認証情報タイプに対応するため、最新バージョンを使用してください (Releases · aliyun/credentials-nodejs · GitHub)。

認証情報パラメーター

@alicloud/credentials モジュールの Config コンストラクターを使用して認証情報を設定します。type パラメーターは必須で、他のどのパラメーターが適用されるかを決定します。次の表に、有効な type 値とそのパラメーターを示します。 = 必須、- = オプション、× = サポート対象外。

説明

下記の認証情報タイプとパラメーターのみがサポートされています。

type

access_key

sts

ram_role_arn

ecs_ram_role

oidc_role_arn

credentials_uri

bearer

accessKeyId: アクセスキー ID。

×

×

×

×

accessKeySecret: シークレットアクセスキー。

×

×

×

×

securityToken: Security Token Service (STS) トークン。

×

-

×

×

×

×

roleArn: RAM ロールの Alibaba Cloud リソースネーム (ARN)。

×

×

×

×

×

roleSessionName: セッションのカスタム名。デフォルトのフォーマットは credentials-nodejs-<timestamp> です。

×

×

-

×

-

×

×

roleName: RAM ロールの名前。

×

×

×

-

×

×

×

disableIMDSv1: セキュリティ強化モード (IMDSv2) を強制するかどうかを指定します。デフォルト値: false

×

×

×

-

×

×

×

bearerToken: ベアラートークン。

×

×

×

×

×

×

policy: カスタムポリシー。

×

×

-

×

-

×

×

roleSessionExpiration: セッションの有効期限 (秒単位)。デフォルト値: 3600。

×

×

-

×

-

×

×

oidcProviderArn: OpenID Connect (OIDC) ID プロバイダーの ARN。

×

×

×

×

×

×

oidcTokenFilePath: OpenID Connect (OIDC) トークンファイルのパス。

×

×

×

×

×

×

externalId: 混乱した代理問題を軽減するための外部 ID。外部 ID を使用して混乱した代理問題を防ぐ

×

×

-

×

×

×

×

credentialsURI: 認証情報の URI。

×

×

×

×

×

×

STS エンドポイントです。VPC エンドポイントとパブリックエンドポイントの両方をサポートします。利用可能なエンドポイント:「エンドポイント」。デフォルト: sts.aliyuncs.com

×

×

-

×

-

×

×

timeout: HTTP リクエストの読み取りタイムアウト (ミリ秒単位)。デフォルト値は 5000 です。

×

×

-

-

-

-

×

connectTimeout: HTTP リクエストの接続タイムアウト (ミリ秒単位)。デフォルト値は 10000 です。

×

×

-

-

-

-

×

クレデンシャルクライアントの初期化

以下のセクションでは、Credentials ツールの使用方法を示すコード例を提供します。要件に基づいてメソッドを選択できます。

重要
  • プロジェクトコード内に AccessKey をプレーンテキストで保存しないでください。キーが漏洩すると、アカウント配下のすべてのリソースが侵害されます。代わりに、環境変数または設定ファイルに保存してください。

  • 認証情報ツールには シングルトンパターン を実装してください。これにより、組み込みの 認証情報キャッシュ が有効になり、過剰な API コールによる レート制限 を防止できます。詳細については、「セッション認証情報の自動更新メカニズム」をご参照ください。

メソッド 1:デフォルトの認証情報プロバイダーチェーン

パラメーターを指定せずに認証情報クライアントを初期化すると、デフォルト認証情報プロバイダーチェーンが有効になります。

const Credential = require('@alicloud/credentials');
// デフォルトの認証情報プロバイダーチェーンを使用します
const credentialClient = new Credential.default();
const credential = credentialClient.getCredential();
credential.then(credential => {
    console.log(credential);
});
import Credential from '@alicloud/credentials';
const credential = new Credential();
credential.getCredential().then(credential => {
    console.log(credential);
});

API 呼び出し

この例では、ECS の DescribeRegions API を呼び出す方法を示します。コードを実行するには、ECS SDK をインストールする必要があります。

const Ecs20140526 = require('@alicloud/ecs20140526');
const OpenApi = require('@alicloud/openapi-client');
const Util = require('@alicloud/tea-util');
const Credential = require('@alicloud/credentials');
async function main() {
    // 認証情報クライアントを、デフォルトの認証情報で初期化します。
    const credentialClient = new Credential.default();
    const ecsConfig = new OpenApi.Config({
        endpoint: 'ecs.cn-hangzhou.aliyuncs.com', // サービスエンドポイントを設定します。
        credential: credentialClient, // 認証情報クライアントを指定します。
    });
    const ecsClient = new Ecs20140526.default(ecsConfig);
    const describeRegionsRequest = new Ecs20140526.DescribeRegionsRequest();
    const runtime = new Util.RuntimeOptions();
    ecsClient.describeRegionsWithOptions(describeRegionsRequest, runtime).then((result) => {
        console.log(JSON.stringify(result.body));
    });
}
main().catch(console.error);
import Ecs20140526, * as $Ecs20140526 from '@alicloud/ecs20140526';
import OpenApi, * as $OpenApi from '@alicloud/openapi-client';
import Util, * as $Util from '@alicloud/tea-util';
import Credential from '@alicloud/credentials';
export default class Client {
    static async main(): Promise<$Ecs20140526.DescribeRegionsResponse> {
        // 認証情報インスタンスを、デフォルトの認証情報で初期化します。
        let credential = new Credential();
        let config = new $OpenApi.Config({
            credential: credential, // 認証情報インスタンスを指定します。
            endpoint: 'ecs.cn-hangzhou.aliyuncs.com', // サービスエンドポイントを設定します。
        });
        let client = new Ecs20140526(config);
        let describeRegionsRequest = new $Ecs20140526.DescribeRegionsRequest({});
        let runtime = new $Util.RuntimeOptions({});
        return await client.describeRegionsWithOptions(describeRegionsRequest, runtime);
    }
}
const response = Client.main();
response.then(res => {
    console.log(JSON.stringify(res.body));
});

方法 2:アクセスキーの使用

Credentials ツールは、AccessKey をアクセス認証情報として使用します。

警告

Alibaba Cloud アカウントは、すべてのリソースに対する完全な権限を持っています。Alibaba Cloud アカウントの AccessKey ペアが漏洩すると、システムに重大なセキュリティ上の脅威をもたらします。Alibaba Cloud アカウントの AccessKey ペアを使用することは推奨しません。

最小限の必要な権限が付与された RAM ユーザーの AccessKey ペアを使用することを推奨します。

const Credential = require('@alicloud/credentials');
const credentialsConfig = new Credential.Config({
    // 認証情報のタイプ
    type: 'access_key',
    // 環境変数から取得した AccessKey ID
    accessKeyId: process.env.ALIBABA_CLOUD_ACCESS_KEY_ID,
    // 環境変数から取得した AccessKey Secret
    accessKeySecret: process.env.ALIBABA_CLOUD_ACCESS_KEY_SECRET,
});
const credentialClient = new Credential.default(credentialsConfig);
import Credential, { Config } from '@alicloud/credentials';
const credentialsConfig  = new Config({
    // 認証情報のタイプ
    type: 'access_key',
    // 環境変数から取得した AccessKey ID
    accessKeyId: process.env.ALIBABA_CLOUD_ACCESS_KEY_ID,
    // 環境変数から取得した AccessKey Secret
    accessKeySecret: process.env.ALIBABA_CLOUD_ACCESS_KEY_SECRET,
});
const credentialClient = new Credential(credentialsConfig);

API 呼び出し

この例では、Elastic Compute Service (ECS) の DescribeRegions API を呼び出します。コードを実行するには、ECS SDK をインストールする必要があります。

const Ecs20140526 = require('@alicloud/ecs20140526');
const OpenApi = require('@alicloud/openapi-client');
const Util = require('@alicloud/tea-util');
const Credential = require('@alicloud/credentials');
async function main() {
    const credentialsConfig = new Credential.Config({
        // 認証情報タイプ。
        type: 'access_key',
        // 環境変数から読み取る AccessKey ID。
        accessKeyId: process.env.ALIBABA_CLOUD_ACCESS_KEY_ID,
        // 環境変数から読み取る AccessKey シークレット。
        accessKeySecret: process.env.ALIBABA_CLOUD_ACCESS_KEY_SECRET,
    });
    const credentialClient = new Credential.default(credentialsConfig);
    const ecsConfig = new OpenApi.Config();
    ecsConfig.endpoint = 'ecs.cn-hangzhou.aliyuncs.com'; // サービスエンドポイント。
    ecsConfig.credential = credentialClient; // 認証用の認証情報クライアント。
    const ecsClient = new Ecs20140526.default(ecsConfig);
    const describeRegionsRequest = new Ecs20140526.DescribeRegionsRequest();
    const runtime = new Util.RuntimeOptions();
    ecsClient.describeRegionsWithOptions(describeRegionsRequest, runtime).then((response) => {
        console.log(response.body.regions);
    });
}
main().catch(console.error);
import Ecs20140526, * as $Ecs20140526 from '@alicloud/ecs20140526';
import Credential, { Config } from '@alicloud/credentials';
import OpenApi, * as $OpenApi from '@alicloud/openapi-client';
import Util, * as $Util from '@alicloud/tea-util';
export default class Client {
    static async main(): Promise<$Ecs20140526.DescribeRegionsResponse> {
        const credentialsConfig = new Config({
            // 認証情報タイプ。
            type: 'access_key',
            // 環境変数から読み取る AccessKey ID。
            accessKeyId: process.env.ALIBABA_CLOUD_ACCESS_KEY_ID,
            // 環境変数から読み取る AccessKey シークレット。
            accessKeySecret: process.env.ALIBABA_CLOUD_ACCESS_KEY_SECRET,
        });
        const credentialClient = new Credential(credentialsConfig);
        let config = new $OpenApi.Config({
            credential: credentialClient, // 認証用の認証情報クライアント。
            endpoint: 'ecs.cn-hangzhou.aliyuncs.com', // サービスエンドポイント。
        });
        let client = new Ecs20140526(config);
        let describeRegionsRequest = new $Ecs20140526.DescribeRegionsRequest({});
        let runtime = new $Util.RuntimeOptions({});
        return await client.describeRegionsWithOptions(describeRegionsRequest, runtime);
    }
}
const response = Client.main();
response.then(res => {
    console.log(res.body?.regions);
});

方法 3:STS トークンの使用

Credentials ツールは、提供された静的な STS トークンをアクセス認証情報として使用します。

const Credential = require('@alicloud/credentials');
const credentialsConfig = new Credential.Config({
    type: 'sts',
    // 環境変数から取得した AccessKey ID
    accessKeyId: process.env.ALIBABA_CLOUD_ACCESS_KEY_ID,
    // 環境変数から取得した AccessKey Secret
    accessKeySecret: process.env.ALIBABA_CLOUD_ACCESS_KEY_SECRET,
    // 環境変数から取得したセキュリティトークン
    securityToken: process.env.ALIBABA_CLOUD_SECURITY_TOKEN,
});
const cred = new Credential.default(credentialsConfig);
import Credential, { Config } from '@alicloud/credentials';
const credentialsConfig = new Config({
    // 認証情報タイプ
    type: 'access_key',
    // 環境変数から取得した AccessKey ID
    accessKeyId: process.env.ALIBABA_CLOUD_ACCESS_KEY_ID,
    // 環境変数から取得した AccessKey Secret
    accessKeySecret: process.env.ALIBABA_CLOUD_ACCESS_KEY_SECRET,
});
const credentialClient = new Credential(credentialsConfig);

API 呼び出し

この例では、ECS の DescribeRegions オペレーションを呼び出します。このコードを実行するには、ECS SDK および Security Token Service SDK をインストールする必要があります。

const Ecs20140526 = require('@alicloud/ecs20140526');
const Sts20150401 = require('@alicloud/sts20150401');
const OpenApi = require('@alicloud/openapi-client');
const Util = require('@alicloud/tea-util');
const Credential = require('@alicloud/credentials');
async function assumeRole() {
    // STS トークンを取得するため、STS クライアントを作成します。
    const stsConfig = new OpenApi.Config({
        endpoint: 'sts.cn-hangzhou.aliyuncs.com', // Security Token Service (STS) のエンドポイント。
        accessKeyId: process.env.ALIBABA_CLOUD_ACCESS_KEY_ID, // 環境変数から AccessKey ID を取得します。
        accessKeySecret: process.env.ALIBABA_CLOUD_ACCESS_KEY_SECRET, // 環境変数から AccessKey secret を取得します。
    });
    const stsClient = new Sts20150401.default(stsConfig);
    const assumeRoleRequest = new Sts20150401.AssumeRoleRequest({
        durationSeconds: 3600, // STS トークンの有効期間。
        roleArn: '<RoleArn>', // 引き受ける RAM ロールの ARN。例:acs:ram::123456789012****:role/adminrole。これは ALIBABA_CLOUD_ROLE_ARN 環境変数で設定できます。 
        roleSessionName: '<RoleSessionName>', // ロールセッションのカスタム名。これは ALIBABA_CLOUD_ROLE_SESSION_NAME 環境変数で設定できます。 
        policy: '', // オプション。RAM ポリシー。例:{"Statement": [{"Action": ["*"],"Effect": "Allow","Resource": ["*"]}],"Version":"1"}
    });
    try {
        const assumeRoleResponsePromise = await stsClient.assumeRole(assumeRoleRequest);
        const assumeRoleResponseBodyCredentials = assumeRoleResponsePromise.body.credentials;
        return {
            accessKeyId: assumeRoleResponseBodyCredentials.accessKeyId,
            accessKeySecret: assumeRoleResponseBodyCredentials.accessKeySecret,
            securityToken: assumeRoleResponseBodyCredentials.securityToken,
        };
    } catch (error) {
        console.error('The AssumeRole request failed:', error);
        throw error;
    }
}
async function main() {
    const stsToken = await assumeRole()
    const credentialsConfig = new Credential.Config({
        // 認証情報のタイプ。
        type: 'sts',
        accessKeyId: stsToken.accessKeyId,
        accessKeySecret: stsToken.accessKeySecret,
        securityToken: stsToken.securityToken,
    });
    const credentialClient = new Credential.default(credentialsConfig);
    const ecsConfig = new OpenApi.Config({
        endpoint: 'ecs.cn-hangzhou.aliyuncs.com', // クラウドサービスのエンドポイント。
        credential: credentialClient, // 認証情報。
    })
    const ecsClient = new Ecs20140526.default(ecsConfig);
    const describeRegionsRequest = new Ecs20140526.DescribeRegionsRequest();
    const runtime = new Util.RuntimeOptions();
    // DescribeRegions オペレーションを呼び出します。
    ecsClient.describeRegionsWithOptions(describeRegionsRequest, runtime).then((response) => {
        console.log(response.body.regions);
    });
}
main().catch(console.error);
import Ecs20140526, * as $Ecs20140526 from '@alicloud/ecs20140526';
import Sts20150401, * as $Sts20150401 from '@alicloud/sts20150401';
import OpenApi, { Config } from '@alicloud/openapi-client';
import Util, * as $Util from '@alicloud/tea-util';
import Credential, { Config as CredentialConfig } from '@alicloud/credentials';
async function assumeRole() {
    // STS トークンを取得するため、STS クライアントを作成します。
    const stsConfig = new Config({
        endpoint: 'sts.cn-hangzhou.aliyuncs.com', // Security Token Service (STS) のエンドポイント。
        accessKeyId: process.env.ALIBABA_CLOUD_ACCESS_KEY_ID, // 環境変数から AccessKey ID を取得します。
        accessKeySecret: process.env.ALIBABA_CLOUD_ACCESS_KEY_SECRET, // 環境変数から AccessKey secret を取得します。
    });
    const stsClient = new Sts20150401(stsConfig);
    const assumeRoleRequest = new $Sts20150401.AssumeRoleRequest({
        durationSeconds: 3600, // STS トークンの有効期間。
        roleArn: '<RoleArn>', // 引き受ける RAM ロールの ARN。例:acs:ram::123456789012****:role/adminrole。これは ALIBABA_CLOUD_ROLE_ARN 環境変数で設定できます。  
        roleSessionName: '<RoleSessionName>', // ロールセッションのカスタム名。これは ALIBABA_CLOUD_ROLE_SESSION_NAME 環境変数で設定できます。 
        policy: '', // オプション。RAM ポリシー。例:{"Statement": [{"Action": ["*"],"Effect": "Allow","Resource": ["*"]}],"Version":"1"}
    });
    try {
        const assumeRoleResponsePromise = await stsClient.assumeRole(assumeRoleRequest);
        const assumeRoleResponseBodyCredentials = assumeRoleResponsePromise.body?.credentials;
        return {
            accessKeyId: assumeRoleResponseBodyCredentials?.accessKeyId,
            accessKeySecret: assumeRoleResponseBodyCredentials?.accessKeySecret,
            securityToken: assumeRoleResponseBodyCredentials?.securityToken,
        };
    } catch (error) {
        console.error('The AssumeRole request failed:', error);
        throw error;
    }
}
async function main() {
    const stsToken = await assumeRole()
    const credentialsConfig = new CredentialConfig({
        // 認証情報のタイプ。
        type: 'sts',
        accessKeyId: stsToken.accessKeyId,
        accessKeySecret: stsToken.accessKeySecret,
        securityToken: stsToken.securityToken,
    });
    const credentialClient = new Credential(credentialsConfig);
    const ecsConfig = new Config({
        endpoint: 'ecs.cn-hangzhou.aliyuncs.com', // クラウドサービスのエンドポイント。
        credential: credentialClient, // 認証情報。
    })
    const ecsClient = new Ecs20140526(ecsConfig);
    const describeRegionsRequest = new $Ecs20140526.DescribeRegionsRequest();
    const runtime = new $Util.RuntimeOptions();
    // DescribeRegions オペレーションを呼び出します。
    ecsClient.describeRegionsWithOptions(describeRegionsRequest, runtime).then((response) => {
        console.log(response.body?.regions);
    });
}
main().catch(console.error);

メソッド 4: AccessKey と RAM ロール ARN

このメソッドは内部で STS を使用します。RAM ロール ARN を指定すると、認証情報ツールは STS から STS トークンを取得します。policy パラメーターを使用すると、ロールの権限をさらに制限できます。

const { default: Credential, Config } = require('@alicloud/credentials');
const credentialsConfig = new Config({
    type: 'ram_role_arn',
    accessKeyId: process.env.ALIBABA_CLOUD_ACCESS_KEY_ID,
    accessKeySecret: process.env.ALIBABA_CLOUD_ACCESS_KEY_SECRET,
    // 引き受ける RAM ロールの ARN。例: acs:ram::123456789012****:role/adminrole。これは `ALIBABA_CLOUD_ROLE_ARN` 環境変数を使用して設定することもできます。
    roleArn: '<RoleArn>',
    // カスタムロールセッション名。これは `ALIBABA_CLOUD_ROLE_SESSION_NAME` 環境変数を使用して設定することもできます。
    roleSessionName: '<RoleSessionName>',
    // オプション。RAM ロールの権限を制限するインラインポリシー。例: {"Statement": [{"Action": ["*"],"Effect": "Allow","Resource": ["*"]}],"Version":"1"}
    policy: '<Policy>',
    roleSessionExpiration: 3600,
});
const cred = new Credential(credentialsConfig);
import Credential, { Config } from '@alicloud/credentials';
const credentialsConfig = new Config({
    type: 'ram_role_arn',
    accessKeyId: process.env.ALIBABA_CLOUD_ACCESS_KEY_ID,
    accessKeySecret: process.env.ALIBABA_CLOUD_ACCESS_KEY_SECRET,
    // 引き受ける RAM ロールの ARN。例: acs:ram::123456789012****:role/adminrole。これは `ALIBABA_CLOUD_ROLE_ARN` 環境変数を使用して設定することもできます。
    roleArn: '<RoleArn>',
    // カスタムロールセッション名。これは `ALIBABA_CLOUD_ROLE_SESSION_NAME` 環境変数を使用して設定することもできます。
    roleSessionName: '<RoleSessionName>',
    // オプション。RAM ロールの権限を制限するインラインポリシー。例: {"Statement": [{"Action": ["*"],"Effect": "Allow","Resource": ["*"]}],"Version":"1"}
    policy: '<Policy>',
    roleSessionExpiration: 3600,
});
const cred = new Credential(credentialsConfig);

API 呼び出しメソッド

この例では、ECS の DescribeRegions オペレーションを呼び出す方法を示します。コードを実行するには、ECS SDK をインストールする必要があります。

const Ecs20140526 = require('@alicloud/ecs20140526');
const OpenApi = require('@alicloud/openapi-client');
const Util = require('@alicloud/tea-util');
const Credential = require('@alicloud/credentials');
async function main() {
    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>',
        // ロールセッションのカスタム名。ALIBABA_CLOUD_ROLE_SESSION_NAME 環境変数を使用して設定することもできます。
        roleSessionName: '<RoleSessionName>',
        // オプション: RAM ロールの権限を制限するインラインポリシー。例:{"Statement": [{"Action": ["*"],"Effect": "Allow","Resource": ["*"]}],"Version":"1"}
        policy: '<Policy>',
        roleSessionExpiration: 3600,
    });
    const credentialClient = new Credential.default(credentialsConfig);
    const ecsConfig = new OpenApi.Config({
        endpoint: 'ecs.cn-hangzhou.aliyuncs.com', // サービスエンドポイント
        credential: credentialClient, // 使用する認証情報を指定します。
    });
    const ecsClient = new Ecs20140526.default(ecsConfig);
    const describeRegionsRequest = new Ecs20140526.DescribeRegionsRequest();
    const runtime = new Util.RuntimeOptions();
    // DescribeRegions オペレーションを呼び出します。
    const response = ecsClient.describeRegionsWithOptions(describeRegionsRequest, runtime);
    console.log((await response).body.regions);
}
main().catch(console.error);
import Ecs20140526, * as $Ecs20140526 from '@alicloud/ecs20140526';
import Credential, { Config } from '@alicloud/credentials';
import OpenApi, * as $OpenApi from '@alicloud/openapi-client';
import Util, * as $Util from '@alicloud/tea-util';
export default class Client {
    static async main(): Promise<$Ecs20140526.DescribeRegionsResponse> {
        const credentialsConfig = new Config({
            type: 'ram_role_arn',
            accessKeyId: process.env.ALIBABA_CLOUD_ACCESS_KEY_ID,
            accessKeySecret: process.env.ALIBABA_CLOUD_ACCESS_KEY_SECRET,
            // 引き受ける RAM ロールの ARN。例:acs:ram::123456789012****:role/adminrole。ALIBABA_CLOUD_ROLE_ARN 環境変数を使用して設定することもできます。
            roleArn: '<RoleArn>',
            // ロールセッションのカスタム名。ALIBABA_CLOUD_ROLE_SESSION_NAME 環境変数を使用して設定することもできます。
            roleSessionName: '<RoleSessionName>',
            // オプション: RAM ロールの権限を制限するインラインポリシー。例:{"Statement": [{"Action": ["*"],"Effect": "Allow","Resource": ["*"]}],"Version":"1"}
            policy: '<Policy>',
            roleSessionExpiration: 3600,
        });
        const credentialClient = new Credential(credentialsConfig);
        let config = new $OpenApi.Config({
            credential: credentialClient, // 使用する認証情報を指定します。
            endpoint: 'ecs.cn-hangzhou.aliyuncs.com', // サービスエンドポイント
        });
        let client = new Ecs20140526(config);
        let describeRegionsRequest = new $Ecs20140526.DescribeRegionsRequest({});
        let runtime = new $Util.RuntimeOptions({});
        return await client.describeRegionsWithOptions(describeRegionsRequest, runtime);
    }
}
const response = Client.main();
response.then(res => {
    console.log(res.body?.regions);
});

メソッド 5:ECS インスタンスの RAM ロール

インスタンス RAM ロールを ECS インスタンスまたはエラスティックコンテナインスタンスにアタッチします。インスタンス上のアプリケーションは、認証情報ツールを使用して、そのロールの STS トークンを自動的に取得できます。

デフォルトでは、認証情報ツールはセキュリティ強化モード (IMDSv2) で ECS メタデータサーバーにアクセスします。エラーが発生した場合は、通常モードにフォールバックします。この動作は、disableIMDSv1 パラメーターまたは ALIBABA_CLOUD_IMDSV1_DISABLE 環境変数で制御できます。

  • false (デフォルト): 失敗時に通常モードにフォールバックします。

  • true: セキュリティ強化モードのみを使用し、失敗時に例外をスローします。

IMDSv2 のサポートは、サーバーの設定に依存します。

環境変数 ALIBABA_CLOUD_ECS_METADATA_DISABLED=true を設定することで、ECS インスタンスメタデータ経由の認証情報アクセスを無効にすることもできます。

説明
const Credential = require('@alicloud/credentials');
const credentialsConfig = new Credential.Config({
    type: 'ecs_ram_role',
    // オプション。ECS RAM ロール名。指定しない場合、システムが自動的に取得します。リクエストを減らすため、名前の指定を推奨します。ALIBABA_CLOUD_ECS_METADATA 環境変数でも設定できます。
    roleName: '<RoleName>',
    // オプション。デフォルト: false。true の場合、セキュリティ強化モードを強制します。false の場合、システムはまずセキュリティ強化モードを試行し、失敗した場合は通常モード (IMDSv1) にフォールバックします。
    // disableIMDSv1: true,
});
const cred = new Credential.default(credentialsConfig);
import Credential, { Config } from '@alicloud/credentials';
const credentialsConfig = new Config({
    type: 'ecs_ram_role',
    // オプション。ECS RAM ロール名。指定しない場合、システムが自動的に取得します。リクエストを減らすため、名前の指定を推奨します。ALIBABA_CLOUD_ECS_METADATA 環境変数でも設定できます。
    roleName: '<RoleName>',
    // オプション。デフォルト: false。true の場合、セキュリティ強化モードを強制します。false の場合、システムはまずセキュリティ強化モードを試行し、失敗した場合は通常モード (IMDSv1) にフォールバックします。
    // disableIMDSv1: true,
});
const credentialClient = new Credential(credentialsConfig);

API 呼び出し

この例では、ECS の DescribeRegions API を呼び出します。コードを実行するには、まず ECS SDK をインストールしてください。

const Ecs20140526 = require('@alicloud/ecs20140526');
const OpenApi = require('@alicloud/openapi-client');
const Util = require('@alicloud/tea-util');
const Credential = require('@alicloud/credentials');
async function main() {
    const credentialsConfig = new Credential.Config({
        // 認証情報のタイプ。
        type: 'ecs_ram_role',
        // オプション。ECS RAM ロールの名前。リクエストを減らすため、これを指定することを推奨します。省略した場合、システムが自動的に取得します。roleName パラメーターは ALIBABA_CLOUD_ECS_METADATA 環境変数を使用して設定することもできます。
        roleName: '<RoleName>',
    });
    const credentialClient = new Credential.default(credentialsConfig);
    const ecsConfig = new OpenApi.Config({
        endpoint: 'ecs.cn-hangzhou.aliyuncs.com', // サービスエンドポイント。
        credential: credentialClient, // 認証に使用する認証情報。
    });
    const ecsClient = new Ecs20140526.default(ecsConfig);
    const describeRegionsRequest = new Ecs20140526.DescribeRegionsRequest();
    const runtime = new Util.RuntimeOptions();
    // DescribeRegions API を呼び出し、応答を取得します。
    const response = ecsClient.describeRegionsWithOptions(describeRegionsRequest, runtime);
    console.log((await response).body.regions);
}
main().catch(console.error);
import Ecs20140526, * as $Ecs20140526 from '@alicloud/ecs20140526';
import Credential, { Config } from '@alicloud/credentials';
import OpenApi, * as $OpenApi from '@alicloud/openapi-client';
import Util, * as $Util from '@alicloud/tea-util';
export default class Client {
    static async main(): Promise<$Ecs20140526.DescribeRegionsResponse> {
        const credentialsConfig = new Config({
            type: 'ecs_ram_role',
            // オプション。ECS RAM ロールの名前。リクエストを減らすため、これを指定することを推奨します。省略した場合、システムが自動的に取得します。roleName パラメーターは ALIBABA_CLOUD_ECS_METADATA 環境変数を使用して設定することもできます。
            roleName: '<RoleName>',
            // オプション。デフォルトは `false` です。これを `true` に設定すると、セキュリティ強化モードが強制されます。このパラメーターが false に設定されている場合、システムはまずセキュリティ強化モードで認証情報を取得しようと試み、失敗した場合は通常モード (IMDSv1) にフォールバックします。
            // disableIMDSv1: true,
        });
        const credentialClient = new Credential(credentialsConfig);
        let config = new $OpenApi.Config({
            credential: credentialClient, // 認証に使用する認証情報。
            endpoint: 'ecs.cn-hangzhou.aliyuncs.com', // サービスエンドポイント。
        });
        let client = new Ecs20140526(config);
        let describeRegionsRequest = new $Ecs20140526.DescribeRegionsRequest({});
        let runtime = new $Util.RuntimeOptions({});
        return await client.describeRegionsWithOptions(describeRegionsRequest, runtime);
    }
}
const response = Client.main();
response.then(res => {
    console.log(res.body?.regions);
});

メソッド 6: OIDCRoleArn の使用

OIDC を使用してOIDC プロバイダー用の RAM ロールを作成した場合は、OIDC プロバイダー ARN、OIDC トークン、および RAM ロール ARN を Credentials SDK に渡します。SDK は AssumeRoleWithOIDC API を呼び出して STS トークンを取得します。これらの認証情報は自動更新に対応しています。詳細については、「セッション認証情報の自動更新メカニズム」をご参照ください。例えば、RRSA が有効な ACK クラスターでは、SDK は Pod 環境変数から OIDC 設定を読み取り、STS トークンを取得して Alibaba Cloud サービスにアクセスします。

const Credential = require('@alicloud/credentials');
const credentialsConfig = new Credential.Config({
    type: 'oidc_role_arn',
    // 引き受ける RAM ロール ARN。 ALIBABA_CLOUD_ROLE_ARN 環境変数を使用して設定することもできます。
    roleArn: '<RoleArn>',
    // OIDC IdP ARN。 ALIBABA_CLOUD_OIDC_PROVIDER_ARN 環境変数を使用して設定することもできます。
    oidcProviderArn: '<OidcProviderArn>',
    // OIDC トークンファイルパス。 ALIBABA_CLOUD_OIDC_TOKEN_FILE 環境変数を使用して設定することもできます。
    oidcTokenFilePath: '<OidcTokenFilePath>',
    // カスタム ロールセッション名。 ALIBABA_CLOUD_ROLE_SESSION_NAME 環境変数を使用して設定することもできます。
    roleSessionName: '<RoleSessionName>',
    // オプション。 セッションの許可を絞り込むポリシー。 例: {"Statement": [{"Action": ["*"],"Effect": "Allow","Resource": ["*"]}],"Version":"1"}
    policy: '<Policy>',
    // セッション期間 (秒単位)。
    roleSessionExpiration: 3600,
});
const credentialClient = new Credential.default(credentialsConfig);
import Credential, { Config } from '@alicloud/credentials';
const credentialsConfig = new Config({
    type: 'oidc_role_arn',
    // 引き受ける RAM ロール ARN。 ALIBABA_CLOUD_ROLE_ARN 環境変数を使用して設定することもできます。
    roleArn: '<RoleArn>',
    // OIDC IdP ARN。 ALIBABA_CLOUD_OIDC_PROVIDER_ARN 環境変数を使用して設定することもできます。
    oidcProviderArn: '<OidcProviderArn>',
    // OIDC トークンファイルパス。 ALIBABA_CLOUD_OIDC_TOKEN_FILE 環境変数を使用して設定することもできます。
    oidcTokenFilePath: '<OidcTokenFilePath>',
    // カスタム ロールセッション名。 ALIBABA_CLOUD_ROLE_SESSION_NAME 環境変数を使用して設定することもできます。
    roleSessionName: '<RoleSessionName>',
    // オプション。 セッションの許可を絞り込むポリシー。 例: {"Statement": [{"Action": ["*"],"Effect": "Allow","Resource": ["*"]}],"Version":"1"}
    policy: '<Policy>',
    // セッション期間 (秒単位)。
    roleSessionExpiration: 3600,
});
const credentialClient = new Credential(credentialsConfig);

API 呼び出し

この例では、Elastic Compute Service (ECS) の DescribeRegions API を呼び出す方法を示します。コードを実行するには、ECS SDK をインストールしてください。

const Ecs20140526 = require('@alicloud/ecs20140526');
const OpenApi = require('@alicloud/openapi-client');
const Util = require('@alicloud/tea-util');
const Credential = require('@alicloud/credentials');
async function main() {
    const credentialsConfig = new Credential.Config({
        // 認証情報のタイプ。
        type: 'oidc_role_arn',
        // 引き受ける RAM ロールの ARN。ALIBABA_CLOUD_ROLE_ARN 環境変数を使用して設定することもできます。
        roleArn: '<RoleArn>',
        // OIDC プロバイダーの ARN。ALIBABA_CLOUD_OIDC_PROVIDER_ARN 環境変数を使用して設定することもできます。
        oidcProviderArn: '<OidcProviderArn>',
        // OIDC トークンファイルパス。ALIBABA_CLOUD_OIDC_TOKEN_FILE 環境変数を使用して設定することもできます。
        oidcTokenFilePath: '<OidcTokenFilePath>',
        // カスタムのロールセッション名。ALIBABA_CLOUD_ROLE_SESSION_NAME 環境変数を使用して設定することもできます。
        roleSessionName: '<RoleSessionName>',
        // オプション。セッションの権限を制限するポリシー。例:{"Statement": [{"Action": ["*"],"Effect": "Allow","Resource": ["*"]}],"Version":"1"}
        policy: '<Policy>',
        // セッションの有効期間 (秒単位)。
        roleSessionExpiration: 3600,
    });
    const credentialClient = new Credential.default(credentialsConfig);
    const ecsConfig = new OpenApi.Config({
        endpoint: 'ecs.cn-hangzhou.aliyuncs.com', // サービスエンドポイント。
        credential: credentialClient, // 認証情報。
    });
    const ecsClient = new Ecs20140526.default(ecsConfig);
    const describeRegionsRequest = new Ecs20140526.DescribeRegionsRequest();
    const runtime = new Util.RuntimeOptions();
    // DescribeRegions API を呼び出します。
    const response = ecsClient.describeRegionsWithOptions(describeRegionsRequest, runtime);
    console.log((await response).body.regions);
}
main().catch(console.error);
import Ecs20140526, * as $Ecs20140526 from '@alicloud/ecs20140526';
import Credential, { Config } from '@alicloud/credentials';
import OpenApi, * as $OpenApi from '@alicloud/openapi-client';
import Util, * as $Util from '@alicloud/tea-util';
export default class Client {
    static async main(): Promise<$Ecs20140526.DescribeRegionsResponse> {
        const credentialsConfig = new Config({
            type: 'oidc_role_arn',
            // 引き受ける RAM ロールの ARN。ALIBABA_CLOUD_ROLE_ARN 環境変数を使用して設定することもできます。
            roleArn: '<RoleArn>',
            // OIDC プロバイダーの ARN。ALIBABA_CLOUD_OIDC_PROVIDER_ARN 環境変数を使用して設定することもできます。
            oidcProviderArn: '<OidcProviderArn>',
            // OIDC トークンファイルパス。ALIBABA_CLOUD_OIDC_TOKEN_FILE 環境変数を使用して設定することもできます。
            oidcTokenFilePath: '<OidcTokenFilePath>',
            // カスタムのロールセッション名。ALIBABA_CLOUD_ROLE_SESSION_NAME 環境変数を使用して設定することもできます。
            roleSessionName: '<RoleSessionName>',
            // オプション。セッションの権限を制限するポリシー。例:{"Statement": [{"Action": ["*"],"Effect": "Allow","Resource": ["*"]}],"Version":"1"}
            policy: '<Policy>',
            // セッションの有効期間 (秒単位)。
            roleSessionExpiration: 3600,
        });
        const credentialClient = new Credential(credentialsConfig);
        let config = new $OpenApi.Config({
            credential: credentialClient, // 認証情報。
            endpoint: 'ecs.cn-hangzhou.aliyuncs.com', // サービスエンドポイント。
        });
        let client = new Ecs20140526(config);
        let describeRegionsRequest = new $Ecs20140526.DescribeRegionsRequest({});
        let runtime = new $Util.RuntimeOptions({});
        return await client.describeRegionsWithOptions(describeRegionsRequest, runtime);
    }
}
const response = Client.main();
response.then(res => {
    console.log(res.body?.regions);
});

メソッド 7:URI 認証情報

STS サービスを URI 経由で公開すると、外部サービスは AccessKey ペアを直接処理することなく STS トークンを取得できます。認証情報ツールは、指定された URI から STS トークンを取得し、それをアクセス認証情報として使用します。自動更新にも対応しています。詳細については、セッションタイプ認証情報の自動更新メカニズムをご参照ください。

const Credential = require('@alicloud/credentials');
const config = new Credential.Config({
    type: 'credentials_uri',
    // 認証情報を取得するエンドポイント。例: http://local_or_remote_uri/。 ALIBABA_CLOUD_CREDENTIALS_URI 環境変数でも設定できます。
    credentialsURI: '<CredentialsUri>',
});
const credentialClient = new Credential(config);
import Credential, { Config } from '@alicloud/credentials';
const credentialsConfig = new Config({
    type: 'credentials_uri',
    // 認証情報を取得するエンドポイント。例: http://local_or_remote_uri/。 ALIBABA_CLOUD_CREDENTIALS_URI 環境変数でも設定できます。
    credentialsURI: '<CredentialsUri>',
});
const credentialClient = new Credential(credentialsConfig);

URI 応答は、次の要件を満たしている必要があります:

  • ステータスコードは 200 です。

  • レスポンスボディのフォーマットは次のとおりです。

    {
      "Code": "Success",
      "AccessKeySecret": "AccessKeySecret",
      "AccessKeyId": "AccessKeyId",
      "Expiration": "2021-09-26T03:46:38Z",
      "SecurityToken": "SecurityToken"
    }

API 呼び出し

この例では、Elastic Compute Service (ECS) の DescribeRegions API を呼び出す方法を示します。コードを実行する前に、ECS SDK をインストールしてください。

const Ecs20140526 = require('@alicloud/ecs20140526');
const OpenApi = require('@alicloud/openapi-client');
const Util = require('@alicloud/tea-util');
const Credential = require('@alicloud/credentials');
async function main() {
    const credentialsConfig = new Credential.Config({
        // 認証情報タイプ。
        type: 'credentials_uri',
        // 認証情報を取得するための URI。 http://local_or_remote_uri/ の形式。または、 ALIBABA_CLOUD_CREDENTIALS_URI 環境変数を設定します。
        credentialsURI: '<CredentialsUri>',
    });
    const credentialClient = new Credential.default(credentialsConfig);
    const ecsConfig = new OpenApi.Config({
        endpoint: 'ecs.cn-hangzhou.aliyuncs.com', // サービスエンドポイント。
        credential: credentialClient, // 認証用の認証情報クライアント。
    });
    const ecsClient = new Ecs20140526.default(ecsConfig);
    const describeRegionsRequest = new Ecs20140526.DescribeRegionsRequest();
    const runtime = new Util.RuntimeOptions();
    // DescribeRegions API を呼び出します。
    const response = ecsClient.describeRegionsWithOptions(describeRegionsRequest, runtime);
    console.log((await response).body.regions);
}
main().catch(console.error);
import Ecs20140526, * as $Ecs20140526 from '@alicloud/ecs20140526';
import Credential, { Config } from '@alicloud/credentials';
import OpenApi, * as $OpenApi from '@alicloud/openapi-client';
import Util, * as $Util from '@alicloud/tea-util';
export default class Client {
    static async main(): Promise<$Ecs20140526.DescribeRegionsResponse> {
        let credentialsConfig = new Config({
            type: 'credentials_uri',
            // 認証情報を取得するための URI。 http://local_or_remote_uri/ の形式。または、 ALIBABA_CLOUD_CREDENTIALS_URI 環境変数を設定します。
            credentialsURI: '<CredentialsUri>',
        });
        let credentialClient = new Credential(credentialsConfig);
        let config = new $OpenApi.Config({
            credential: credentialClient, // 認証用の認証情報クライアント。
            endpoint: 'ecs.cn-hangzhou.aliyuncs.com', // サービスエンドポイント。
        });
        let client = new Ecs20140526(config);
        let describeRegionsRequest = new $Ecs20140526.DescribeRegionsRequest({});
        let runtime = new $Util.RuntimeOptions({});
        return await client.describeRegionsWithOptions(describeRegionsRequest, runtime);
    }
}
const response = Client.main();
response.then(res => {
    console.log(res.body?.regions);
});

方法 8:ベアラー トークンの使用

現在、ベアラートークンをサポートしているのは Cloud Call Center (CCC) のみです。

const Credential = require('@alicloud/credentials');
const config = new Credential.Config({
    type: 'bearer',
    // ご自身のベアラートークンに置き換えてください。
    bearerToken: '<BearerToken>',
});
const credentialClient = new Credential(config);
import Credential, { Config } from '@alicloud/credentials';
const credentialsConfig = new Config({
    type: 'bearer',
    // ご自身のベアラートークンに置き換えてください。
    bearerToken: '<BearerToken>',
});
const credentialClient = new Credential(credentialsConfig);

API 呼び出し

この例では、Cloud Call Center (CCC) の GetInstance API を呼び出す方法を説明します。コードを実行するには、Cloud Call Center SDK をインストールしてください。

const CCC20200701 = require('@alicloud/ccc20200701');
const OpenApi = require('@alicloud/openapi-client');
const Util = require('@alicloud/tea-util');
const Credential = require('@alicloud/credentials');
async function main() {
    let credentialsConfig = new Credential.Config({
        // 認証情報のタイプを指定します。
        type: 'bearer',
        // ベアラートークンを指定します。
        bearerToken: '<BearerToken>',
    });
    let credentialClient = new Credential.default(credentialsConfig);
    let config = new OpenApi.Config({
        endpoint: 'ccc.cn-shanghai.aliyuncs.com',
        credential: credentialClient
    });
    let client = new CCC20200701.default(config);
    let getInstanceRequest = new CCC20200701.GetInstanceRequest({
        instanceId: 'ccc-test',
    });
    let runtime = new Util.RuntimeOptions({});
    let response = client.getInstanceWithOptions(getInstanceRequest, runtime);
    console.log((await response).body);
}
main().catch(console.error);
import ccc20200701, * as $ccc20200701 from '@alicloud/ccc20200701';
import Credential, { Config } from '@alicloud/credentials';
import OpenApi, * as $OpenApi from '@alicloud/openapi-client';
import Util, * as $Util from '@alicloud/tea-util';
export default class Client {
    static async main(): Promise<$ccc20200701.GetInstanceResponse> {
        let credentialsConfig = new Config({
            type: 'bearer',
            // ベアラートークンを指定します。
            bearerToken: '<BearerToken>',
        });
        let credentialClient = new Credential(credentialsConfig);
        let config = new $OpenApi.Config({
            credential: credentialClient, // 認証情報を指定します。
            endpoint: 'ccc.cn-shanghai.aliyuncs.com', // エンドポイントを指定します。
        });
        let client = new ccc20200701(config);
        let GetInstanceRequest = new $ccc20200701.GetInstanceRequest({
            instanceId: 'ccc-test',
        });
        let runtime = new $Util.RuntimeOptions({});
        return await client.getInstanceWithOptions(GetInstanceRequest, runtime);
    }
}
let response = Client.main();
response.then(res => {
    console.log(res.body);
});

デフォルトの認証情報プロバイダーチェーン

デフォルトの認証情報プロバイダーチェーンを使用することで、環境をまたいで同じコードを使用し、外部設定を通じて認証情報の取得を制御できます。パラメーターを指定せずに new Credential() を呼び出すと、SDK は次の順序で認証情報を検索します。

1. 環境変数の使用

システムプロパティに認証情報が見つからない場合、Credentials ツールは環境変数をチェックします。

  • ALIBABA_CLOUD_ACCESS_KEY_IDALIBABA_CLOUD_ACCESS_KEY_SECRET 環境変数が存在し、空でない場合、AccessKey ペアがデフォルトの認証情報として使用されます。

  • ALIBABA_CLOUD_ACCESS_KEY_ID、ALIBABA_CLOUD_ACCESS_KEY_SECRET、および ALIBABA_CLOUD_SECURITY_TOKEN 環境変数がすべて設定されている場合、STS トークンがデフォルトの認証情報として使用されます。

2. OIDC RAM ロール

認証情報が見つからない場合、Credentials ツールは OIDC RAM ロールに関連する次の環境変数をチェックします:

  • ALIBABA_CLOUD_ROLE_ARN: RAM ロールの ARN。

  • ALIBABA_CLOUD_OIDC_PROVIDER_ARN: OIDC IdP の ARN。

  • ALIBABA_CLOUD_OIDC_TOKEN_FILE: OIDC トークンファイルのパス。

上記の 3 つの環境変数が存在し、空でない場合、Credentials ツールはこれらの環境変数の値を使用して STS の AssumeRoleWithOIDC 操作を呼び出し、STS トークンをデフォルトの認証情報として取得します。

3. Config.json

それでも認証情報が見つからない場合、Credentials ツールはデフォルトパスから config.json ファイルを読み込み、指定された認証情報をデフォルトの認証情報として使用しようとします。デフォルトのファイルパスは次のとおりです:

  • Linux/macOS: ~/.aliyun/config.json

  • Windows: C:\Users\USER_NAME\.aliyun\config.json

この方法で認証情報を設定するには、クラウドアシスタント CLI を使用するか、対応するパスに手動で config.json 設定ファイルを作成します。次のコードブロックは、コンテンツ形式の例を示しています:

{
  "current": "<PROFILE_NAME>",
  "profiles": [
    {
      "name": "<PROFILE_NAME>",
      "mode": "AK",
      "access_key_id": "<ALIBABA_CLOUD_ACCESS_KEY_ID>",
      "access_key_secret": "<ALIBABA_CLOUD_ACCESS_KEY_SECRET>"
    },
    {
      "name": "<PROFILE_NAME1>",
      "mode": "StsToken",
      "access_key_id": "<ALIBABA_CLOUD_ACCESS_KEY_ID>",
      "access_key_secret": "<ALIBABA_CLOUD_ACCESS_KEY_SECRET>",
      "sts_token": "<SECURITY_TOKEN>"
    },
    {
      "name":"<PROFILE_NAME2>",
      "mode":"RamRoleArn",
      "access_key_id":"<ALIBABA_CLOUD_ACCESS_KEY_ID>",
      "access_key_secret":"<ALIBABA_CLOUD_ACCESS_KEY_SECRET>",
      "ram_role_arn":"<ROLE_ARN>",
      "ram_session_name":"<ROLE_SESSION_NAME>",
      "expired_seconds":3600
    },
    {
      "name":"<PROFILE_NAME3>",
      "mode":"EcsRamRole",
      "ram_role_name":"<RAM_ROLE_ARN>"
    },
    {
      "name":"<PROFILE_NAME4>",
      "mode":"OIDC",
      "oidc_provider_arn":"<OIDC_PROVIDER_ARN>",
      "oidc_token_file":"<OIDC_TOKEN_FILE>",
      "ram_role_arn":"<ROLE_ARN>",
      "ram_session_name":"<ROLE_SESSION_NAME>",
      "expired_seconds":3600
    },
    {
      "name":"<PROFILE_NAME5>",
      "mode":"ChainableRamRoleArn",
      "source_profile":"<PROFILE_NAME>",
      "ram_role_arn":"<ROLE_ARN>",
      "ram_session_name":"<ROLE_SESSION_NAME>",
      "expired_seconds":3600
    }
  ]
}

パラメーター

説明

current

使用する認証情報の名前を指定します。これは profiles パラメーターの name の値に対応します。デフォルトでは、システムは ALIBABA_CLOUD_PROFILE 環境変数で指定された認証情報名を優先します。この環境変数が設定されていない場合、システムは current で指定された認証情報名を使用します。

profiles

認証情報のコレクション。mode パラメーターを使用して認証情報タイプを指定します:

  • AK: ユーザーの AccessKey ペアを認証情報として使用します。

  • StsToken: STS トークンを認証情報として使用します。

  • RamRoleArn: RAM ユーザーが RAM ロールを偽装して認証情報を取得します。

  • EcsRamRole: インスタンスメタデータから認証情報を取得します。

  • OIDC: OIDC IdP ARN、OIDC トークン、および RAM ロール ARN を使用して認証情報を取得します。

  • ChainableRamRoleArn: source_profile を使用して profiles 内の別の認証情報の名前を指定し、ロールチェーン方式で新しい認証情報を取得します。

4. ECS インスタンス RAM ロール

より優先度の高い認証情報が見つからない場合、SDK は ECS インスタンス RAM ロールから認証情報を取得します。拡張モード (IMDSv2) でインスタンスメタデータサービスにアクセスして、STS トークンを取得します。これには、ロール名用に 1 つ、認証情報用に 1 つ、合計 2 つのリクエストが必要です。これを 1 つのリクエストに減らすには、ALIBABA_CLOUD_ECS_METADATA 環境変数でロール名を設定します。拡張モードが失敗した場合、通常モードにフォールバックします。この動作は ALIBABA_CLOUD_IMDSV1_DISABLE で制御します:

  1. false : 失敗した場合、通常モードにフォールバックします。

  2. true : 拡張モードのみを使用し、失敗した場合は例外をスローします。

IMDSv2 のサポートは、インスタンスメタデータサービスの設定に依存します。

ECS インスタンスメタデータからの認証情報の取得を無効にするには、 ALIBABA_CLOUD_ECS_METADATA_DISABLED=true を設定します。

説明

5. 認証情報 URI

認証情報が見つからない場合、Credentials ツールは ALIBABA_CLOUD_CREDENTIALS_URI 環境変数をチェックします。この変数が存在し、有効な URI を指している場合、Credentials ツールはこの URI にアクセスして STS トークンをデフォルトの認証情報として取得します。

セッション認証情報の自動更新

セッション認証情報 (ram_role_arnecs_ram_roleoidc_role_arn、および credentials_uri) には、組み込みの自動更新機能が含まれています。最初の取得時に、認証情報ツールは認証情報をキャッシュします。後続のリクエストでは、キャッシュされた値が失効するまでその値が返され、失効した時点で新しい認証情報が自動的にフェッチされます。

説明

ecs_ram_role 認証情報の場合、認証情報ツールは失効する 15 分前に事前に更新します。

次の例では、シングルトンパターンを使用して認証情報クライアントを作成し、異なる間隔で認証情報を取得して自動更新を検証し、OpenAPI 呼び出しを通じて有効性を確認します。

const Credential = require('@alicloud/credentials');
const Ecs20140526 = require('@alicloud/ecs20140526');
const { Config } = require('@alicloud/openapi-client');
const { RuntimeOptions } = require('@alicloud/tea-util');
// 環境変数を取得します。
const accessKeyId = process.env.ALIBABA_CLOUD_ACCESS_KEY_ID;
const accessKeySecret = process.env.ALIBABA_CLOUD_ACCESS_KEY_SECRET;
const roleArn = process.env.ALIBABA_CLOUD_ROLE_ARN;
/**
 * Credential のシングルトンクラスは、Alibaba Cloud 認証情報インスタンスを管理します。
 */
class CredentialClient {
    constructor() {
        if (!CredentialClient.instance) {
            var credentialsConfig = new Credential.Config({
                type: 'ram_role_arn',
                accessKeyId: accessKeyId,
                accessKeySecret: accessKeySecret,
                roleArn: roleArn,
                roleSessionName: 'RoleSessionNameTest',
                roleSessionExpiration: 3600,
            });
            this.credentialsClient = new Credential.default(credentialsConfig);
            CredentialClient.instance = this;
        }
        return CredentialClient.instance;
    }
    static getInstance() {
        return new CredentialClient().credentialsClient;
    }
}
/**
 * ECS クライアントのシングルトンクラスは、ECS クライアントインスタンスを管理します。
 */
class EcsClient {
    constructor(credentialClient) {
        if (!EcsClient.instance) {
            const config = new Config({
                endpoint: 'ecs.cn-hangzhou.aliyuncs.com',
                credential: credentialClient
            });
            this.ecsClient = new Ecs20140526.default(config);
            EcsClient.instance = this;
        }
        return EcsClient.instance;
    }
    static getInstance(credentialClient) {
        return new EcsClient(credentialClient).ecsClient;
    }
}
/**
 * タスクロジックを実行します。
 */
async function executeTask() {
    try {
        const credentialClient = CredentialClient.getInstance();
        const credential = await credentialClient.getCredential();
        console.log(new Date());
        console.log(`AK ID: ${credential.accessKeyId}`);
        console.log(`AK Secret: ${credential.accessKeySecret}`);
        console.log(`STS Token: ${credential.securityToken}`);
        // この例では、ECS API を呼び出して認証情報の有効性を検証します。必要に応じてこれを変更してください。
        const ecsClient = EcsClient.getInstance(credentialClient);
        const request = new Ecs20140526.DescribeRegionsRequest();
        const runtime = new RuntimeOptions({});
        const response = await ecsClient.describeRegionsWithOptions(request, runtime);
        console.log(`Invoke result: ${response.statusCode}`);
    } catch (error) {
        throw new Error(`ECS client execution failed: ${error.message}`, { cause: error });
    }
}
/**
 * タイマーを使用してタスクの実行をスケジュールします。
 */
function scheduleTasks() {
    // タスクを一度すぐに実行します。
    executeTask();
    // 後続のタスクに遅延を設定します。
    setTimeout(executeTask, 600 * 1000); // 2 回目の実行:600 秒後。
    setTimeout(executeTask, 4200 * 1000); // 3 回目の実行:4,200 秒後。
    setTimeout(executeTask, 4300 * 1000); // 4 回目の実行:4,300 秒後。
}
// タスクのスケジューリングを開始します。
scheduleTasks();
import Credential, { Config as CredentialsConfig }  from '@alicloud/credentials';
import Ecs20140526, * as $Ecs20140526 from '@alicloud/ecs20140526';
import { Config } from '@alicloud/openapi-client';
import { RuntimeOptions } from '@alicloud/tea-util';
// 環境変数を取得します。
const accessKeyId: string | undefined = process.env.ALIBABA_CLOUD_ACCESS_KEY_ID;
const accessKeySecret: string | undefined = process.env.ALIBABA_CLOUD_ACCESS_KEY_SECRET;
const roleArn: string | undefined = process.env.ALIBABA_CLOUD_ROLE_ARN;
if (!accessKeyId || !accessKeySecret || !roleArn) {
    throw new Error('Missing required environment variables.');
}
/**
 * Credential のシングルトンクラスは、Alibaba Cloud 認証情報インスタンスを管理します。
 */
class CredentialClient {
    private static instance: CredentialClient;
    private readonly credentialsClient: InstanceType<typeof Credential>;
    private constructor() {
        const credentialsConfig = new CredentialsConfig({
            type: 'ram_role_arn',
            accessKeyId,
            accessKeySecret,
            roleArn,
            roleSessionName: 'RoleSessionNameTest',
            roleSessionExpiration: 3600,
        });
        this.credentialsClient = new Credential(credentialsConfig);
    }
    static getInstance(): InstanceType<typeof Credential> {
        if (!CredentialClient.instance) {
            CredentialClient.instance = new CredentialClient();
        }
        return CredentialClient.instance.credentialsClient;
    }
}
/**
 * ECS クライアントのシングルトンクラスは、ECS クライアントインスタンスを管理します。
 */
class EcsClient {
    private static instance: EcsClient;
    private readonly ecsClient: InstanceType<typeof Ecs20140526>;
    private constructor(credentialClient: InstanceType<typeof Credential>) {
        const config = new Config({
            endpoint: 'ecs.cn-hangzhou.aliyuncs.com',
            credential: credentialClient
        });
        this.ecsClient = new Ecs20140526(config);
    }
    static getInstance(credentialClient: InstanceType<typeof Credential>): InstanceType<typeof Ecs20140526> {
        if (!EcsClient.instance) {
            EcsClient.instance = new EcsClient(credentialClient);
        }
        return EcsClient.instance.ecsClient;
    }
}
/**
 * タスクロジックを実行します。
 */
async function executeTask(): Promise<void> {
    try {
        const credentialClient = CredentialClient.getInstance();
        const credential = await credentialClient.getCredential();
        console.log(new Date());
        console.log(`AK ID: ${credential.accessKeyId}`);
        console.log(`AK Secret: ${credential.accessKeySecret}`);
        console.log(`STS Token: ${credential.securityToken}`);
        // この例では、ECS API を呼び出して認証情報の有効性を検証します。必要に応じてこれを変更してください。
        const ecsClient = EcsClient.getInstance(credentialClient);
        const request = new $Ecs20140526.DescribeRegionsRequest();
        const runtime = new RuntimeOptions({});
        const response = await ecsClient.describeRegionsWithOptions(request, runtime);
        console.log(`Invoke result: ${response.statusCode}`);
    } catch (error) {
        throw new Error(`ECS client execution failed: ${error}`);
    }
}
/**
 * タイマーを使用してタスクの実行をスケジュールします。
 */
function scheduleTasks(): void {
    // タスクを一度すぐに実行します。
    executeTask();
    // 後続のタスクに遅延を設定します。
    setTimeout(executeTask, 600 * 1000); // 2 回目の実行:600 秒後。
    setTimeout(executeTask, 4200 * 1000); // 3 回目の実行:4,200 秒後。
    setTimeout(executeTask, 4300 * 1000); // 4 回目の実行:4,300 秒後。
}
// タスクのスケジューリングを開始します。
scheduleTasks();
2025-05-28T09:22:29.584Z
AK ID: STS.NVS9xxx7DRbao
AK Secret: 9SoQxxxmVjVsED9ad47rcgMaw5XyQyXx
STS Token:
CAISyQJ1q6Ft5B2yfSjIr5Xmcu/irrxq0pWvU0PZhvVtS7hovafKjTz2IHhMeXZoA+4YsPw2mmFW6/sdlrpJTJtIfkHfdsp36LJe9A6dbpHd4xc1LGed0s/LI3OaLjKm9u2wCryLYbGwU/OpbE++5U0X6LDmdDKkckW40JmS8/BOZcgWWQ/KB1gvRq
0hRG1YpdQdKGHa0xxxWg0/ks0aH1war1bBL+tqofMP9MfMBZskvD42Hu8VtbbfE3SJq7BxHybx71qQs+02c5onAXAELvUvYa7OKo4MyCVBjBKEhALNBoeL7kfBobmFAAkgwYnynVMMisES3LOiIqKOsk1MdI9Cywly2y
vfiZZ1prmk1pV68xxxczc4yvhD2nuNe7rmc9Z3/JHusVmo7LiTxqAARdkoKCeYBvLk0ZFWccCiM0ZvdnRtv0VDOUfD1zQELQGL+xB5NrBmdzq2ePjFJbrkBGmy5EXD714jknyzM4lFic2dUQMi14NCHMVDVjGAf0qUs
F+PQW58jGb32fmFxxxTXOx82sdRQqW0/vTd2KQmIAA=
Invoke result: 200
2025-05-28T09:32:28.137Z
AK ID: STS.NVS9xxx7DRbao
AK Secret: 9SoQxxxmVjVsED9ad47rcgMaw5XyQyXx
STS Token:
CAISyQJ1q6Ft5B2yfSjIr5Xmcu/irrxq0pWvU0PZhvVtS7hovafKjTz2IHhMeXZoA+4YsPw2mmFW6/sdlrpJTJtIfkHfdsp36LJe9A6dbpHd4xc1LGed0s/LI3OaLjKm9u2wCryLYbGwU/OpbE++5U0X6LDmdDKkckW40JmS8/BOZcgWWQ/KB1gvRq
0hRG1YpdQdKGHa0xxxWg0/ks0aH1war1bBL+tqofMP9MfMBZskvD42Hu8VtbbfE3SJq7BxHybx71qQs+02c5onAXAELvUvYa7OKo4MyCVBjBKEhALNBoeL7kfBobmFAAkgwYnynVMMisES3LOiIqKOsk1MdI9Cywly2y
vfiZZ1prmk1pV68xxxczc4yvhD2nuNe7rmc9Z3/JHusVmo7LiTxqAARdkoKCeYBvLk0ZFWccCiM0ZvdnRtv0VDOUfD1zQELQGL+xB5NrBmdzq2ePjFJbrkBGmy5EXD714jknyzM4lFic2dUQMi14NCHMVDVjGAf0qUs
F+PQW58jGb32fmFxxxTXOx82sdRQqW0/vTd2KQmIAA=
Invoke result: 200
2025-05-28T10:32:29.771Z
AK ID: STS.NVuaxxxLFiPw8
AK Secret: 5dsoxxxpA5pCzfrek4KforS8MnJ6qHR9
STS Token:
CAISyQJ1q6Ft5B2yfSjIr5XAKsjd241w4PqgY1P2gDUvb8NqhpXc2jz2IHhMeXZoA+4YsPw2mmFW6/sdlrpJTJtIfkHfdsp36LJe9A6dbpHd4yVKL2Gd0s/LI3OaLjKm9u2wCryLYbGwU/OpbE++5U0X6LDmdDKkckW40JmS8/BOZcgWWQ/KB1gvRq
0hRG1YpdQdKGHa0xxxWg0/ks0aH1war1bBL+tqofMP9MfMBZskvD42Hu8VtbbfE3SJq7BxHybx71qQs+02c5onAXAELvUvYa7OKo4MyCVBjBKEhALNBoeL7kfBobmFAAkgwYnynVMMisES3LOjIqKOsk+Mdk9CiWv2y
vfiZZ1prmk1pV68xxxczc4yvhD2nuNe7rmc9Z3/KpUoQEo7LiTxqAAUyV7F+kpLHRG/yHw3JaVz14hqSj2hmxxkwgczUWIkpBLKHLeW0iI3sp2LNQO6iEAImLpSE0nRVBbcutIqxEuFzAs607jgOjHakTF7UZNoKVV
wb42xR4s4ThGd2PxxxqoUsrKfCq5lHiUiDq6L1VIAA=
Invoke result: 200
2025-05-28T10:34:08.130Z
AK ID: STS.NVuaxxxLFiPw8
AK Secret: 5dsoxxxpA5pCzfrek4KforS8MnJ6qHR9
STS Token:
CAISyQJ1q6Ft5B2yfSjIr5XAKsjd241w4PqgY1P2gDUvb8NqhpXc2jz2IHhMeXZoA+4YsPw2mmFW6/sdlrpJTJtIfkHfdsp36LJe9A6dbpHd4yVKL2Gd0s/LI3OaLjKm9u2wCryLYbGwU/OpbE++5U0X6LDmdDKkckW40JmS8/BOZcgWWQ/KB1gvRq
0hRG1YpdQdKGHa0xxxWg0/ks0aH1war1bBL+tqofMP9MfMBZskvD42Hu8VtbbfE3SJq7BxHybx71qQs+02c5onAXAELvUvYa7OKo4MyCVBjBKEhALNBoeL7kfBobmFAAkgwYnynVMMisES3LOjIqKOsk+Mdk9CiWv2y
vfiZZ1prmk1pV68xxxczc4yvhD2nuNe7rmc9Z3/KpUoQEo7LiTxqAAUyV7F+kpLHRG/yHw3JaVz14hqSj2hmxxkwgczUWIkpBLKHLeW0iI3sp2LNQO6iEAImLpSE0nRVBbcutIqxEuFzAs607jgOjHakTF7UZNoKVV
wb42xR4s4ThGd2PxxxqoUsrKfCq5lHiUiDq6L1VIAA=
Invoke result: 200

以下にログ結果の分析を示します:

  • 最初の呼び出しでは、認証情報がキャッシュされていません。そのため、システムは設定に基づいて認証情報を取得します。認証情報が取得されると、キャッシュに保存されます。

  • 2 回目の呼び出しで使用される認証情報は、最初の呼び出しと同じです。これは、2 回目の呼び出しの認証情報がキャッシュから取得されたことを示します。

  • 3 回目の呼び出しでは、キャッシュ内の認証情報の有効期限が切れています。これは、認証情報の有効期間 (`RoleSessionExpiration`) が 3,600 秒に設定されており、3 回目の呼び出しが最初の呼び出しから 4,200 秒後に発生するためです。したがって、SDK は自動更新メカニズムに基づいて新しい認証情報を再取得し、新しい認証情報をキャッシュに保存します。

  • 4 回目の呼び出しで使用される認証情報は、3 回目の呼び出しで取得された新しい認証情報と同じです。これは、キャッシュ内の認証情報が有効期限切れ後に更新されたことを示します。

参考資料