このトピックでは、Alibaba Cloud へのプログラムによる API 呼び出しを行う必要があるアプリケーションやツールに、安全に認証情報を提供するためのベストプラクティスについて説明します。これらのプラクティスに従うことで、認証情報の漏洩に関連するセキュリティリスクを軽減できます。
プログラムによるアクセスのための認証情報の理解
SDK、CLI、またはその他の開発ツールを使用してプログラムで Alibaba Cloud にアクセスする場合、ID を認証するための認証情報を提供する必要があります。主な認証情報の種類は次の 2 つです。
AccessKey ペア:AccessKey ID と AccessKey Secret で構成される長期的な認証情報です。AccessKey ペアは RAM ユーザーに関連付けられ、そのユーザーと同じ権限を持ちます。有効期限がないため、細心の注意を払って管理する必要があります。詳細については、「AccessKey ペアの作成」をご参照ください。
セキュリティトークンサービス (STS) トークン:権限が限定され、有効期限が設定可能な短期的な一時認証情報です。STS トークンは、認証情報漏洩に伴うリスクを大幅に軽減するため、ほとんどのユースケースで推奨される認証情報タイプです。
長期的な AccessKey ペアを避けるべき理由
不適切に管理された認証情報、特に長期的な AccessKey ペアは、重大なセキュリティリスクを生み出します。一般的で深刻な間違いは、AccessKey ペアをアプリケーションのソースコードに直接ハードコーディングすることです。このコードが GitHub のようなパブリックリポジトリにコミットされたり、他者と共有されたり、あるいは単に広くアクセス可能な内部リポジトリに保存されたりすると、認証情報が漏洩する可能性があります。有効な AccessKey ペアを持つ攻撃者は、ご利用の Alibaba Cloud リソースにアクセスでき、データ侵害や金銭的損失につながる可能性があります。
ベストプラクティス:RAM ロールによる一時的な認証情報の使用
アプリケーションが Alibaba Cloud にアクセスするための最も安全な方法は、RAM ロールを使用して一時的な STS トークンを取得することです。このアプローチにより、長期的な AccessKey ペアを管理および配布する必要がなくなります。推奨される方法は、アプリケーションが実行されている場所によって異なります。
ECS インスタンス上のアプリケーションの場合
アプリケーションが Elastic Compute Service (ECS) インスタンス上で実行されている場合、それにインスタンス RAM ロールを割り当てることができます。これにより、アプリケーションは Alibaba Cloud SDK を使用して、インスタンスに認証情報を保存することなく、インスタンスメタデータサービスから一時的な STS トークンを自動的に取得できます。

設定:インスタンス RAM ロールを作成してアタッチする方法については、「インスタンス RAM ロールのアタッチ」をご参照ください。
SDK 統合:Alibaba Cloud SDK は、インスタンス RAM ロールを自動的に検出して使用します。コード内で認証情報を設定する必要はありません。
例:
ACK 上のコンテナ化アプリケーションの場合
Container Service for Kubernetes (ACK) クラスターで実行されているアプリケーションには、RAM Roles for Service Accounts (RRSA) 機能を使用します。RRSA を使用すると、RAM ロールを Kubernetes サービスアカウントに関連付けることができます。このサービスアカウントを使用する Pod は、一時的な STS トークンを取得して、承認された Alibaba Cloud リソースにアクセスできます。

設定:手順については、「RRSA の有効化」および「RRSA を使用して異なる Pod が異なるクラウドサービスにアクセスすることを承認する」をご参照ください。
例:
| 言語 | 最小バージョン | デモ |
|---|---|---|
| Go | Alibaba Cloud Credentials for Go 1.2.6 | Go SDK デモ |
| Java | Alibaba Cloud Credentials for Java 0.2.10 | Java SDK デモ |
| Python 3 | Alibaba Cloud Credentials for Python 0.3.1 | Python SDK デモ |
| Node.js / TypeScript | Alibaba Cloud Credentials for TypeScript/Node.js 2.2.6 | Node.js SDK デモ |
Function Compute 上のサーバーレスアプリケーションの場合
アプリケーションが Function Compute にデプロイされている場合は、RAM ロールを関数に関連付けます。関数が呼び出されると、自動的に一時的な STS 認証情報を受け取り、それを使用して他の Alibaba Cloud サービスにアクセスできるため、関数コードに AccessKey ペアを埋め込む必要がなくなります。
設定:手順については、「」Function Compute に他の Alibaba Cloud サービスへのアクセス権限を付与するをご参照ください。
開発者および CLI アクセスの場合
コマンドラインアクセスが必要な開発者、管理者、またはその他の人間のユーザーにとってのベストプラクティスは、企業の ID プロバイダー (IdP) を Alibaba Cloud と統合してシングルサインオン (SSO) を実現することです。ユーザーは既存の企業認証情報で認証し、RAM ロールを偽装して、CLI やその他のツールで使用するための一時的な STS トークンを受け取ることができます。
設定:SSO を設定するには、「SAML を使用したロールベース SSO の概要」および「SSO の設定」をご参照ください。CLI で認証情報を使用するには、「Alibaba Cloud CLI を使用して CloudSSO ユーザーポータルにログインする」をご参照ください。
長期的な認証情報の安全な管理 (必要な場合)
ユースケースで RAM ロールと一時的な認証情報の使用が不可能で、長期的な AccessKey ペアを使用する必要がある場合は、環境変数または認証情報ファイルを使用して安全に保存してください。アプリケーションにハードコーディングしないでください。
長期的な AccessKey ペアの使用は推奨されるプラクティスではありません。可能な限り、上記で説明したロールベースの方法を優先してください。
AccessKey ID と Secret を環境変数として設定できます。
Linux および macOS
次のコマンドを実行します。
export ALIBABA_CLOUD_ACCESS_KEY_ID=<access_key_id> export ALIBABA_CLOUD_ACCESS_KEY_SECRET=<access_key_secret><access_key_id>をご利用の AccessKey ID に、<access_key_secret>をご利用の AccessKey Secret に置き換えてください。Windows
環境変数ファイルを作成し、
ALIBABA_CLOUD_ACCESS_KEY_IDとALIBABA_CLOUD_ACCESS_KEY_SECRET環境変数をファイルに追加し、ALIBABA_CLOUD_ACCESS_KEY_ID にご利用の AccessKey ID を、ALIBABA_CLOUD_ACCESS_KEY_SECRET にご利用の AccessKey Secret を指定します。Windows オペレーティングシステムを再起動します。
Alibaba Cloud SDK は、環境変数から始まる特定の順序で認証情報を自動的に検索するように設計されています。これらの変数を設定すると、コードに認証情報を提供せずに SDK クライアントを初期化できます。
例:
import com.aliyun.credentials.Client;
import com.aliyun.credentials.models.Config;
public class DemoTest {
public static void main(String[] args) throws Exception{
Config config = new Config();
// Which type of credential you want
config.setType("access_key");
// AccessKeyId of your ram user
config.setAccessKeyId(System.getenv("ALIBABA_CLOUD_ACCESS_KEY_ID"));
// AccessKeySecret of your ram user
config.setAccessKeySecret(System.getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET"));
Client client = new Client(config);
}
}認証情報が漏洩した場合の対処法
AccessKey ペアまたは STS トークンが漏洩した疑いがある場合は、アカウントを保護するために直ちに対処する必要があります。詳細な手順については、「漏洩した AccessKey ペアへの対処」および「RAM ロールと STS トークン」をご参照ください。