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

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

最終更新日:Dec 26, 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 ペアを設定する代わりに、インスタンス RAM ロールを使用して STS トークンを取得し、API を呼び出すことができます。これにより、AccessKey ペアの漏洩リスクが軽減されます。

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

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

制限事項

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

操作手順

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. 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 インスタンスを見つけ、图标 > インスタンス設定 > 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 ロールの一時的な認証情報の取得

インスタンスメタデータサービス (IMDS) にアクセスすることで、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) で再試行します。
    	disable_imds_v1=False,
    )
    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 ロールの一時的なアクセス認証情報を取得する前に、まずメタデータサーバーのアクセストークンを取得する必要があります。このトークンには、データセキュリティを強化するために設定可能な有効期間があります。トークンの有効期限が切れた後、一時的なアクセス認証情報を取得する前に新しいトークンを取得する必要があります。

有効な値: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/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. ID 認証情報を設定します。

    次のコマンドを実行して認証情報を設定します。<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("Image downloaded successfully")


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 ロールをインスタンスにアタッチします。

関連ドキュメント