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

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

最終更新日:Dec 17, 2025

インスタンス Resource Access Management (RAM) ロールは、Elastic Compute Service (ECS) インスタンスにアタッチできるサービスロールです。インスタンス RAM ロールの信頼できるエンティティは ECS です。インスタンス RAM ロールを使用すると、AccessKey ペアを提供することなく、ECS インスタンス内から Security Token Service (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 インスタンスには、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. Resource Access Management (RAM) コンソールにログインして、RAM ロールを作成し、権限を付与します。

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

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

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

      • 信頼できるサービスを [ECS] に設定します。

    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 ロールの一時的な認証情報の取得

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

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

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

  • 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 インスタンスを見つけ、图标 > インスタンス設定 > RAM ロールのアタッチ/デタッチを選択します。

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

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

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

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

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

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

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

関連ドキュメント