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

Elastic Compute Service:インスタンス RAM ロール

最終更新日:Nov 09, 2025

インスタンス Resource Access Management (RAM) ロールは、Elastic Compute Service (ECS) インスタンスにアタッチできるサービスロールです。インスタンス RAM ロールの信頼できるエンティティは ECS です。インスタンス RAM ロールを使用すると、AccessKey ペアを提供することなく、ECS インスタンス内からセキュリティトークンサービス (STS) トークンを取得できます。その後、STS トークンを使用して、他の Alibaba Cloud サービスの API 操作を呼び出すことができます。一時的な認証情報はインスタンス内からのみ取得できるため、AccessKey ペアを構成する必要がなくなります。これにより、Alibaba Cloud アカウントの AccessKey ペアのセキュリティが強化され、RAM を使用して詳細な権限管理を実装できます。

メリット

  • インスタンス内での安全で便利な API 呼び出し: プロジェクトが Alibaba Cloud ECS にデプロイされている場合、コードに AccessKey ペアを構成する必要はありません。代わりに、ECS の機能を使用して STS トークンを取得し、API を呼び出すことができます。これにより、AccessKey ペアの漏洩リスクが軽減されます。

  • RAM ID の切り替えの簡素化: 従来の AccessKey ペアを使用する場合、サービスを呼び出す RAM ID を変更するには、構成またはコードを変更してサービスを再起動する必要があります。インスタンス RAM ロールを使用する場合、ECS インスタンスに付与されている RAM ロールを調整するだけで ID を切り替えることができます。その他の変更は必要ありません。

  • 詳細な権限管理: 特定の権限付与ポリシーを持つ RAM ロールを異なる ECS インスタンスに割り当てることができます。これにより、必要に応じて詳細なアクセスの制御を実装できます。

制限

RAM ロールを ECS インスタンスにアタッチする場合、次の制限が適用されます:

  • ECS インスタンスのネットワークタイプは VPC (virtual private cloud) である必要があります。

  • ECS インスタンスには 1 つの RAM ロールしかアタッチできません。

手順

Alibaba Cloud アカウントを使用している場合、次の権限付与ステップはスキップできます。RAM ユーザーまたは RAM ロールを使用して次の操作を実行する場合は、その ID に必要な権限を付与する必要があります。

権限のサンプル

ポリシーには、次の権限を含める必要があります:

  • RAM ロールの管理: RAM ロールを作成し、権限を付与します。

  • RAM ロールのアタッチまたはデタッチ: インスタンスの詳細ページに移動して、インスタンスに RAM ロールをアタッチまたはデタッチします。

  • Alibaba Cloud サービスへのロールの引き渡しを許可: Alibaba Cloud サービスにロールを付与するには、ram:PassRole 権限が必要です。

{
    "Version": "1",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "ecs:Describe*",
                "ecs:List*",
                "ecs:AttachInstanceRamRole",
                "ecs:DetachInstanceRAMRole"
            ],
            "Resource": "*"
        },
        {
          "Effect": "Allow",
          "Action": [
            "ram:Describe*",              
            "ram:List*",
            "ram:Get*",
            "ram:CreateRole", 
            "ram:CreatePolicy", 
            "ram:AttachPolicyToRole"
          ],
          "Resource": "*"
        },
        {
            "Effect": "Allow",
            "Action": "ram:PassRole",
            "Resource": "*"
        }
    ]
}

RAM ロールを作成して ECS インスタンスにアタッチする

コンソールでロールを作成してアタッチする

  1. Resource Access Management (RAM) コンソールにログインして RAM ロールを作成し、権限を付与します。

    1. 信頼できる Alibaba Cloud サービスの RAM ロールを作成します。

      [ID] > [ロール] を選択し、[ロールの作成] をクリックして、画面の指示に従ってロールを作成します。次のパラメーターに注意し、必要に応じて他のパラメーターを構成します。詳細については、「通常のサービスロールの作成」をご参照ください:

      • [信頼できるエンティティタイプ] で、[Alibaba Cloud サービス] を選択します。

      • [信頼できるサービス] で、[Elastic Compute Service] を選択します。

    2. 作成した RAM ロールに権限を付与します。

      システムポリシーまたはカスタムポリシーを RAM ロールにアタッチして、必要なリソースアクセス権限または操作権限を付与します。たとえば、AliyunOSSReadOnlyAccess システムポリシーを RAM ロールに付与します。

      システムポリシーが要件を満たさない場合は、カスタムポリシーを作成して RAM ロールに権限を付与できます。詳細については、「カスタムポリシーの作成」をご参照ください。
  2. RAM ロールを ECS インスタンスにアタッチします。

    1. ECS コンソール - インスタンス に移動します。上部のナビゲーションバーで、ターゲットリージョンとリソースグループを選択します。

    2. ターゲット ECS インスタンスを見つけ、icon > [インスタンス設定] > [RAM ロールのアタッチ/デタッチ] を選択します。

    3. ダイアログボックスで、作成したインスタンス RAM ロールを選択し、[OK] をクリックします。

API を使用してロールを作成してアタッチする

  1. RAM ロールを作成し、権限を付与します。

    1. CreateRole 操作を呼び出して RAM ロールを作成します。

      AssumeRolePolicyDocument パラメーターを次の信頼ポリシーに設定します:

      {
           "Statement": [
             {
                 "Action": "sts:AssumeRole",
                 "Effect": "Allow",
                 "Principal": {
                   "Service": [
                     "ecs.aliyuncs.com"
                   ]
                 }
             }
           ],
           "Version": "1"
       }
    2. (オプション) CreatePolicy 操作を呼び出して、新しいアクセスポリシーを作成します。

      利用可能なアクセスポリシーがある場合は、このステップをスキップできます。

      PolicyDocument パラメーターを次のように設定します:

      {
           "Statement": [
               {
               "Action": [
                   "oss:Get*",
                   "oss:List*"
               ],
               "Effect": "Allow",
               "Resource": "*"
               }
           ],
           "Version": "1"
       }
    3. AttachPolicyToRole 操作を呼び出して、インスタンス RAM ロールに権限を付与します。

  2. AttachInstanceRamRole 操作を呼び出して、RAM ロールを ECS インスタンスにアタッチします。

インスタンス RAM ロールの一時的な認証情報を取得する

ECS インスタンス内からメタデータサービスにアクセスすることで、一時的なアクセス認証情報を取得できます。一時的なアクセス認証情報の有効性は自動的に管理されます。詳細については、「インスタンスメタデータ」をご参照ください。

方法 1: プログラムで Credentials ツールを使用する

Credentials ツールは、ECS インスタンスメタデータサービス (IMDS) を呼び出して STS トークンを取得するロジックをカプセル化します。また、定期的な更新もサポートしています。

Python
  1. Credentials ツールをインストールします。

    セキュリティ強化モードで一時的な認証情報を取得するには、alibabacloud_credentials のバージョンが 0.3.6 以降である必要があります。
    pip install alibabacloud_credentials
  2. ECS インスタンスの RAM ロールをアクセス認証情報として構成します。

    from alibabacloud_credentials.client import Client as CredClient
    from alibabacloud_credentials.models import Config as CredConfig
    
    credentialsConfig = CredConfig(
    	type='ecs_ram_role',
    	# オプション。インスタンス RAM ロールの名前。このパラメーターを指定しない場合、名前は自動的に取得されます。リクエストを減らすために、このパラメーターを指定することをお勧めします。ALIBABA_CLOUD_ECS_METADATA 環境変数を使用してロール名を設定することもできます。
    	role_name='<role_name>',
    	# オプション。デフォルト値は false です。これを true に設定すると、セキュリティ強化モードが強制されます。これを false に設定すると、システムはまずセキュリティ強化モードで認証情報を取得しようとします。試行が失敗した場合、システムは通常モード (IMDSv1) で再試行します。
    	enable_imds_v1=True,
    )
    credentialsClient = CredClient(credentialsConfig)
    

    詳細については、「方法 5: ECS インスタンス RAM ロール」をご参照ください。

Java

  1. credentials の依存関係を追加します。

    セキュリティ強化モードで一時的な認証情報を取得するには、credentials-java のバージョンが 0.3.10 以降である必要があります。
    <!-- https://mvnrepository.com/artifact/com.aliyun/credentials-java -->
    <dependency>
       <groupId>com.aliyun</groupId>
       <artifactId>credentials-java</artifactId>
       <version>0.3.10</version>
    </dependency>
  2. ECS インスタンスのインスタンス RAM ロールをアクセス認証情報として構成できます。

    import com.aliyun.credentials.Client;
    import com.aliyun.credentials.models.Config;
    
    public class DemoTest {
        public static void main(String[] args) throws Exception {
            Config credentialConfig = new Config();
            credentialConfig.setType("ecs_ram_role");
            // オプション。インスタンス RAM ロールの名前。このパラメーターを指定しない場合、名前は自動的に取得されます。リクエストを減らすために、このパラメーターを指定することをお勧めします。ALIBABA_CLOUD_ECS_METADATA 環境変数を使用してロール名を設定することもできます。
            credentialConfig.setRoleName("<RoleName>");
            // オプション。デフォルト値は false です。これを true に設定すると、セキュリティ強化モードが強制されます。これを false に設定すると、システムはまずセキュリティ強化モードで認証情報を取得しようとします。試行が失敗した場合、システムは通常モード (IMDSv1) で再試行します。
            credentialConfig.setDisableIMDSv1(true);
            Client credentialClient = new Client(credentialConfig);
        }
    }

    詳細については、「方法 5: ECS インスタンス RAM ロール」をご参照ください。

Go

  1. Credentials ツールをインストールします。

    セキュリティ強化モードで一時的な認証情報を取得するには、credentials-go のバージョンが 1.3.10 以降である必要があります。
    • go get を使用してツールをダウンロードしてインストールします。

      go get -u github.com/aliyun/credentials-go
    • dep を使用して依存関係を管理する場合は、次のコマンドを実行します。

      dep ensure -add github.com/aliyun/credentials-go
  2. ECS インスタンスのインスタンス RAM ロールをアクセス認証情報として構成します。

    package main
    
    import (
    	"fmt"
    	"github.com/aliyun/credentials-go/credentials"
    )
    
    func _main(args []*string) {
    	credentialsConfig := new(credentials.Config).
    		SetType("ecs_ram_role").
    		// オプション。インスタンス RAM ロールの名前。このパラメーターを指定しない場合、名前は自動的に取得されます。リクエストを減らすために、このパラメーターを指定することをお勧めします。ALIBABA_CLOUD_ECS_METADATA 環境変数を使用してロール名を設定することもできます。
    		SetRoleName("<RoleName>").
    		// オプション。デフォルト値は false です。これを true に設定すると、セキュリティ強化モードが強制されます。これを false に設定すると、システムはまずセキュリティ強化モードで認証情報を取得しようとします。試行が失敗した場合、システムは通常モード (IMDSv1) で再試行します。
    		SetDisableIMDSv1(true)
    	credentialClient, err := credentials.NewCredential(credentialsConfig)
    	if err != nil {
    		panic(err)
    	}
    }

    詳細および呼び出し例については、「方法 5: ECS インスタンス RAM ロールの使用」をご参照ください。

Node.js

  1. Credentials ツールをインストールします。

    セキュリティ強化モードで一時的な認証情報を取得するには、credentials のバージョンが 2.3.1 以降である必要があります。
    npm install @alicloud/credentials
  2. ECS インスタンスのインスタンス RAM ロールをアクセス認証情報として構成します。

    const Credential = require('@alicloud/credentials');
    
    const credentialsConfig = new Credential.Config({
      type: 'ecs_ram_role',
      // オプション。インスタンス RAM ロールの名前。このパラメーターを指定しない場合、名前は自動的に取得されます。リクエストを減らすために、このパラメーターを指定することをお勧めします。ALIBABA_CLOUD_ECS_METADATA 環境変数を使用してロール名を設定することもできます。
      roleName: '<RoleName>',
      // オプション。デフォルト値は false です。これを true に設定すると、セキュリティ強化モードが強制されます。これを false に設定すると、システムはまずセキュリティ強化モードで認証情報を取得しようとします。試行が失敗した場合、システムは通常モード (IMDSv1) で再試行します。
      disableIMDSv1: true,
    });
    const cred = new Credential.default(credentialsConfig);
    

    詳細および呼び出し例については、「方法 5: ECS インスタンス RAM ロールの使用」をご参照ください。

.NET

  1. Credentials ツールをインストールします。

    セキュリティ強化モードで一時的な認証情報を取得するには、credentials のバージョンが 1.4.2 以降である必要があります。
    dotnet add package Aliyun.Credentials
  2. ECS インスタンスのインスタンス RAM ロールをアクセス認証情報として構成します。

    using Aliyun.Credentials.Models;
    
    namespace credentials_demo
    {
        class Program
        {
            static void Main(string[] args)
            {
                var config = new Config()
                {
                    Type = "ecs_ram_role",
                  	// オプション。インスタンス RAM ロールの名前。このパラメーターを指定しない場合、名前は自動的に取得されます。リクエストを減らすために、このパラメーターを指定することをお勧めします。ALIBABA_CLOUD_ECS_METADATA 環境変数を使用してロール名を設定することもできます。
                    RoleName = "<RoleName>",
                    // オプション。デフォルト値は false です。これを true に設定すると、セキュリティ強化モードが強制されます。これを false に設定すると、システムはまずセキュリティ強化モードで認証情報を取得しようとします。試行が失敗した場合、システムは通常モード (IMDSv1) で再試行します。
                    DisableIMDSv1 = true
                }
            }
        }
    }

    詳細および呼び出し例については、「方法 5: ECS インスタンス RAM ロールの使用」をご参照ください。

PHP

  1. Credentials ツールをインストールします。

    セキュリティ強化モードで一時的な認証情報を取得するには、credentials のバージョンが 1.2.0 以降である必要があります。
    composer require alibabacloud/credentials
  2. ECS インスタンスのインスタンス RAM ロールをアクセス認証情報として構成できます。

    <?php
    
    use AlibabaCloud\Credentials\Credential;
    use AlibabaCloud\Credentials\Credential\Config;
    
    $credConfig = new Config([
        'type' => 'ecs_ram_role',
        // オプション。インスタンス RAM ロールの名前。このパラメーターを指定しない場合、名前は自動的に取得されます。リクエストを減らすために、このパラメーターを指定することをお勧めします。ALIBABA_CLOUD_ECS_METADATA 環境変数を使用してロール名を設定することもできます。
        'roleName' => '<RoleName>',
        // オプション。デフォルト値は false です。これを true に設定すると、セキュリティ強化モードが強制されます。これを false に設定すると、システムはまずセキュリティ強化モードで認証情報を取得しようとします。試行が失敗した場合、システムは通常モード (IMDSv1) で再試行します。
        'disableIMDSv1' => true,
    ]);

    呼び出し例などの詳細については、「方法 5: ECS インスタンス RAM ロールの使用」をご参照ください。

方法 2: シェルコマンドを使用する

メタデータサービスは、一時的なアクセス認証情報を取得するための HTTP エンドポイントを提供します。

セキュリティ強化モード

  • Linux インスタンス

    # メタデータサーバーのアクセストークンを取得して認証します。
    TOKEN=`curl -X PUT "http://100.100.100.200/latest/api/token" -H "X-aliyun-ecs-metadata-token-ttl-seconds:<validity_period_of_the_metadata_server_access_token>"` 
    # インスタンス RAM ロールの一時的なアクセス認証情報を取得します。
    curl -H "X-aliyun-ecs-metadata-token: $TOKEN" http://100.100.100.200/latest/meta-data/ram/security-credentials/<instance_RAM_role_name>
  • Windows インスタンス (PowerShell)

    # メタデータサーバーのアクセストークンを取得して認証します。
    $token = Invoke-RestMethod -Headers @{"X-aliyun-ecs-metadata-token-ttl-seconds" = "<validity_period_of_the_metadata_server_access_token>"} -Method PUT -Uri http://100.100.100.200/latest/api/token
    # インスタンス RAM ロールの一時的なアクセス認証情報を取得します。
    Invoke-RestMethod -Headers @{"X-aliyun-ecs-metadata-token" = $token} -Method GET -Uri http://100.100.100.200/latest/meta-data/ram/security-credentials/<instance_RAM_role_name>

<validity_period_of_the_metadata_server_access_token>: インスタンス RAM ロールの一時的なアクセス認証情報を取得する前に、メタデータサーバーのアクセストークンを取得し、その有効期間を設定してデータセキュリティを強化する必要があります。有効期間が切れた後は、トークンを再度取得する必要があります。そうしないと、インスタンス RAM ロールの一時的なアクセス認証情報を取得できません。

有効な値: 1~21600。単位: 秒。詳細については、「インスタンスメタデータ」をご参照ください。

<instance_RAM_role_name>: これをインスタンス RAM ロールの名前に置き換えます。例: EcsRamRole

説明

クラウドアシスタントを使用して上記のコマンドを実行する場合、クラウドアシスタントエージェントが次の最小バージョン要件を満たしていることを確認してください:

プラットフォーム

最小クラウドアシスタントエージェントバージョン

windows

2.1.3.857

linux

2.2.3.857

linux arm

2.4.3.857

freebsd

2.3.3.857

通常モード

  • Linux インスタンス

    curl http://100.100.100.200/latest/meta-data/ram/security-credentials/<instance_RAM_role_name>
  • Windows インスタンス (PowerShell)

    Invoke-RestMethod http://100.100.100.200/latest/meta-data/Invoke-RestMethod http://100.100.100.200/latest/meta-data/ram/security-credentials/<instance_RAM_role_name>

    <instance_RAM_role_name> をインスタンス RAM ロールの名前に置き換えます。例: EcsRamRoleDocumentTesting。

次のコードは応答のサンプルです:

  • 一時的なアクセストークンは、AccessKeyIdAccessKeySecret、および SecurityToken の値で構成されます。

  • Expiration: 一時的なアクセス認証情報の有効期限。

    {
       "AccessKeyId" : "STS.*******6YSE",
       "AccessKeySecret" : "aj******jDU",
       "Expiration" : "2017-11-01T05:20:01Z", 
       "SecurityToken" : "CAISng********",
       "LastUpdated" : "2023-07-18T14:17:28Z",
       "Code" : "Success"
    }

方法 3: Alibaba Cloud CLI を使用する

コマンドラインインターフェイス (CLI) は、ECS IMDS を呼び出して STS トークンを取得することをサポートしています。また、定期的かつ自動的なリフレッシュもサポートしています。

セキュリティ強化モードで一時的な認証情報を取得するには、CLI のバージョンが 3.0.248 以降である必要があります。
  1. CLI をインストールします。

  2. 認証情報を構成します。

    次のコマンドを実行して、認証情報を構成します。<ProfileName> を構成名に置き換えます。

    aliyun configure --profile <ProfileName> --mode EcsRamRole

    これは対話型のコマンドです。プロンプトに従って必要な情報を入力します。詳細については、「認証情報の設定」をご参照ください。

  3. API 操作を呼び出します。

    たとえば、CLI を使用して ECS インスタンスのリストをクエリします。

     aliyun ecs DescribeInstances

    CLI コマンドの詳細については、「コマンドの構造」をご参照ください。

インスタンス RAM ロールを使用した API の呼び出し

次の例は、インスタンス RAM ロールの使用方法を示しています。Linux ECS インスタンスにデプロイされた Python アプリケーションが OSS API 操作を呼び出してファイルをダウンロードします。

pip install oss2  
pip install alibabacloud_credentials
import oss2
from alibabacloud_credentials.client import Client
from alibabacloud_credentials.models import Config
from oss2 import CredentialsProvider
from oss2.credentials import Credentials


class CredentialProviderWarpper(CredentialsProvider):
    def __init__(self, client):
        self.client = client

    def get_credentials(self):
        access_key_id = self.client.get_access_key_id()
        access_key_secret = self.client.get_access_key_secret()
        security_token = self.client.get_security_token()
        return Credentials(access_key_id, access_key_secret, security_token)


def download_image_using_instance_role(bucket_name, endpoint, object_key, local_file, role_name):
    config = Config(
        type='ecs_ram_role',      # アクセス認証情報のタイプ。この値は ecs_ram_role に固定されています。
        role_name=role_name
    )
    cred = Client(config)
    credentials_provider = CredentialProviderWarpper(cred)
    auth = oss2.ProviderAuth(credentials_provider)

    # OSS Bucket オブジェクトを初期化します。
    bucket = oss2.Bucket(auth, endpoint, bucket_name)
    # イメージをローカルインスタンスにダウンロードします。
    bucket.get_object_to_file(object_key, local_file)
    print("イメージは正常にダウンロードされました")


if __name__ == "__main__":
    # グローバル変数を定義します。
    role_name = 'role_name'  # インスタンス RAM ロールの名前に置き換えます。
    bucket_name = 'bucket_name'  # バケット名に置き換えます。
    endpoint = 'oss-cn-beijing.aliyuncs.com'  # OSS バケットのパブリックエンドポイントに置き換えます。
    object_key = 'testfolder/example.png'  # OSS からダウンロードするイメージの完全なパスに置き換えます。バケット名は含めないでください。
    local_file = '/localpath/to/image.png'  # イメージを保存する ECS インスタンスのルートパスに置き換えて、イメージ名を定義します。
    download_image_using_instance_role(bucket_name, endpoint, object_key, local_file, role_name)

その他の操作

ECS インスタンスのインスタンス RAM ロールをデタッチまたは変更する

コンソールでロールをデタッチまたは変更する

  1. ECS コンソール - インスタンス に移動します。上部のナビゲーションバーで、ターゲットリージョンとリソースグループを選択します。

  2. 管理する ECS インスタンスを見つけ、icon > [インスタンス設定] > [RAM ロールのアタッチ/デタッチ] を選択します。

    • インスタンス RAM ロールをデタッチするには: [アクション]デタッチ に設定し、[OK] をクリックします。

    • インスタンス RAM ロールを変更するには: [アクション]アタッチ に設定し、目的のインスタンス RAM ロールを選択して、[OK] をクリックします。

API を使用してロールをデタッチまたは変更する

  • インスタンス RAM ロールをデタッチするには、DetachInstanceRamRole 操作を呼び出します。

  • インスタンス RAM ロールを変更するには:

    1. DetachInstanceRamRole 操作を呼び出して、現在のインスタンス RAM ロールをデタッチします。

    2. AttachInstanceRamRole 操作を呼び出して、新しい RAM ロールをインスタンスにアタッチします。

参考資料