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

Function Compute:RAM ロールを使用して Alibaba Cloud アカウント間で権限を付与する

最終更新日:Sep 06, 2025

このトピックでは、Resource Access Management (RAM) コンソールまたは SDK を使用して、セキュリティトークンサービス (STS) トークンを使用して Alibaba Cloud アカウント間で権限を付与する方法について説明します。 承認された Alibaba Cloud アカウントは、Function Compute で承認アカウントのリソースを表示および管理できます。

シナリオ

企業 A は Function Compute をアクティブ化しており、企業 B に Function Compute リソースの管理を要求しています。 企業 A には次の要件があります。

  • 企業 A はビジネスシステムに集中でき、Function Compute リソースの所有者としてのみ機能できます。 さらに、企業 A は、サービスや関数の作成など、指定されたリソースを管理する権限を企業 B に付与できます。

  • 企業 B に従業員が入社または退社した場合、企業 A は権限を変更する必要はありません。 企業 B は、企業 A のリソースに対して RAM ユーザーに詳細な権限を付与できます。

  • 企業 A と企業 B の協力関係が終了した場合、企業 A は企業 B に付与された権限を取り消すことができます。

RAM コンソールの使用

企業 A が企業 B の従業員に Function Compute のすべての関数にアクセスする権限を付与するとします。 企業 A にはアカウント A という名前の Alibaba Cloud アカウントがあり、企業 B にはアカウント B という名前の Alibaba Cloud アカウントがあります。

  • アカウント A の ID は 123456789012**** で、アカウントエイリアスは company-a です。

  • アカウント B の ID は 134567890123**** で、アカウントエイリアスは company-b です。

ステップ 1: アカウント A を使用して RAM ロールを作成する

アカウント A を使用して RAM ロールを作成し、必要な権限を RAM ロールに付与してから、アカウント B にこのロールを引き受ける権限を付与します。 [他の Alibaba Cloud アカウント] フィールドにアカウント B を入力する必要があります。

  1. アカウント A を使用して RAM コンソール にログインします。

  2. 左側のナビゲーションウィンドウで、[ID] > [ロール] を選択します。

  3. [ロール] ページで、[ロールの作成] をクリックします。

    イメージ

  4. [ロールの作成] ページで、[信頼できるエンティティの種類] パラメーターを [Alibaba Cloud アカウント] に設定し、Alibaba Cloud アカウントを指定して、[OK] をクリックします。

    イメージ

  5. [ロールの作成] ダイアログボックスで、[ロール名] パラメーターを設定し、[OK] をクリックします。

  6. アカウント A を使用して、AliyunFCReadOnlyAccess ポリシーを作成した RAM ロールにアタッチします。 RAM ロールに権限を付与する方法の詳細については、「RAM ロールに権限を付与する」をご参照ください。

  7. 作成した RAM ロールをクリックします。ロール詳細ページで、[信頼ポリシー] タブをクリックし、アカウント B 内の RAM ユーザーが RAM ロールを偽装できるように RAM ロールの信頼ポリシーを編集します。

    accountid の値をアカウント B の ID に変更します。変更後のポリシーは、アカウント B 内の RAM ユーザーのみが RAM ロールを偽装できることを示します。

    イメージ

ステップ 2: アカウント B を使用して RAM ユーザーを作成する

  1. アカウント B を使用して、企業 B の従業員用に RAM ユーザーを作成します。 詳細については、「RAM ユーザーを作成する」をご参照ください。

  2. アカウント B を使用して、AliyunSTSAssumeRoleAccess ポリシーを作成した RAM ユーザーにアタッチします。 その後、RAM ユーザーは RAM ロールを引き受けることができます。 RAM ユーザーに権限を付与する方法の詳細については、「RAM ユーザーに権限を付与する」をご参照ください。

ステップ 3: ログイン ID を切り替える

アカウント B に属する RAM ユーザーがアカウント A のリソースにアクセスする必要がある場合、アカウント B を使用して RAM ユーザーに必要な権限を付与できます。 アカウント B に属する RAM ユーザーは、アカウント A のリソースにアクセスするためにアカウント A の RAM ロールを引き受けます。 手順:

  1. アカウント B の RAM ユーザーを使用して、RAM コンソールにログインします。

    詳細については、「RAM ユーザーとして Alibaba Cloud 管理コンソールにログインする」をご参照ください。

  2. 右上隅のプロファイル写真にポインターを合わせ、[ID の切り替え] をクリックします。[ロールの切り替え] ダイアログボックスで、以下の手順を実行し、[送信] をクリックします。

    image

    詳細については、「RAM ロールを引き受ける」をご参照ください。

次に、アカウント B の RAM ユーザーとして Function Compute コンソール にログインします。 アカウント A のすべてのリソースが表示されます。

(オプション) 付与された権限を取り消す

企業 A と企業 B の協力関係が終了した場合、企業 A は企業 B に付与された権限を取り消すことができます。 アカウント B 用に作成された RAM ロールを削除することで、付与された権限を取り消すことができます。 その後、アカウント B 内の RAM ユーザーはロールを引き受けることができなくなります。 手順:

  1. アカウント A を使用して RAM コンソール にログインします。

  2. 左側のナビゲーションウィンドウで、[ID] > [ロール] を選択します。

  3. [ロール] ページで、削除する RAM ロールを見つけ、[アクション] 列の [ロールの削除] をクリックします。

  4. [ロールの削除] ダイアログボックスで、RAM ロールの名前を入力し、[ロールの削除] をクリックします。

説明

RAM ロールを削除する前に、RAM ロールにアタッチされているポリシーをデタッチする必要があります。 詳細については、「RAM ロールから権限を取り消す」をご参照ください。

SDK の使用

STS を使用して、Function Compute への一時的なアクセスを承認できます。 STS は、クラウドコンピューティングユーザーに STS トークンを提供する Web サービスです。 次の例は、アカウント B がアカウント A のすべてのサービスを表示する権限を取得する方法を示しています。

始める前に

関数の作成

手順

  1. アカウント A を使用して RAM ロールを作成し、アカウント B を信頼できるアカウントとして選択します。

    詳細については、「信頼されている Alibaba Cloud アカウントの RAM ロールを作成する」をご参照ください。

  2. アカウント B を使用して RAM ユーザーを作成し、RAM ユーザーに RAM ロールを偽装する権限を付与します。

    詳細については、「RAM ユーザーを作成する」および「RAM ユーザーに権限を付与する」をご参照ください。

  3. アカウント B の関数に次のサンプルコードを入力して、一時的なアクセス認証情報を取得します。詳細については、「STS SDK 概要」および「AssumeRole」をご参照ください。

    const Core = require('@alicloud/pop-core');
    
    // リクエストを開始するために使用される Alibaba Cloud クライアントを構築します。
    /*
        Alibaba Cloud アカウントの AccessKey ペアは、すべての API 操作に対する権限を持っています。これらの資格情報を使用して Function Compute で操作を実行することは、リスクの高い操作です。 API 操作の呼び出しや日常的な O&M の実行には、RAM ユーザーを使用することをお勧めします。
        AccessKey ID と AccessKey シークレットをプロジェクトコードに保存しないことをお勧めします。保存した場合、AccessKey ペアが漏洩し、アカウント内のすべてのリソースのセキュリティが侵害される可能性があります。
        この例では、ID 検証を実装するために、AccessKey ペアは環境変数に格納されています。
        サンプルコードを実行する前に、ALIBABA_CLOUD_ACCESS_KEY_ID および ALIBABA_CLOUD_ACCESS_KEY_SECRET 環境変数を設定します。
        ALIBABA_CLOUD_ACCESS_KEY_ID および ALIBABA_CLOUD_ACCESS_KEY_SECRET 環境変数は、Function Compute のランタイムで実行権限を設定した後に自動的に設定されます。
    */
     var client = new Core({
       accessKeyId: process.env['ALIBABA_CLOUD_ACCESS_KEY_ID'],
       accessKeySecret: process.env['ALIBABA_CLOUD_ACCESS_KEY_SECRET'],
       endpoint: 'https://sts.aliyuncs.com',
       apiVersion: '2015-04-01'
     });
    
     // パラメータを設定します。
     var params = {
       "RegionId": "cn-hangzhou",
       "RoleArn": "<RoleARN>",
       "RoleSessionName": "<RoleSessionName>"
     }
    
     var requestOption = {
       method: 'POST'
     };
    
     // リクエストを開始し、レスポンスを取得します。
     client.request('AssumeRole', params, requestOption).then((result) => {
       console.log(JSON.stringify(result));
     }, (ex) => {
       console.log(ex);
     })
    # -*- coding: utf-8 -*-
    from alibabacloud_tea_openapi.models import Config
    from alibabacloud_sts20150401.client import Client
    from alibabacloud_sts20150401.models import AssumeRoleRequest
    
    
    def main():
        # 一時キーと一時トークンを入力します。
        #Alibaba Cloud アカウントの AccessKey ペアは、すべての API 操作に対する権限を持っています。これらの資格情報を使用して Function Compute で操作を実行することは、リスクの高い操作です。API 操作の呼び出しや日常的な O&M の実行には、RAM ユーザーを使用することをお勧めします。
        # AccessKey ID と AccessKey シークレットをプロジェクトコードに保存しないことをお勧めします。保存した場合、AccessKey ペアが漏洩し、アカウント内のすべてのリソースのセキュリティが侵害される可能性があります。
        # この例では、ID 検証を実装するために、AccessKey ペアは環境変数に格納されています。
        # サンプルコードを実行する前に、ローカル環境で ALIBABA_CLOUD_ACCESS_KEY_ID および ALIBABA_CLOUD_ACCESS_KEY_SECRET 環境変数を設定します。
        # Function Compute のランタイムでは、実行権限を設定した後に、ALIBABA_CLOUD_ACCESS_KEY_ID および ALIBABA_CLOUD_ACCESS_KEY_SECRET 環境変数が自動的に設定されます。
        AccessKeySecret=os.getenv('ALIBABA_CLOUD_ACCESS_KEY_SECRET'))
        AccessKeyId=os.getenv('ALIBABA_CLOUD_ACCESS_KEY_ID')
        regionId ='cn-hangzhou'
    
    
        config = Config(
            access_key_id='<ACCESS-KEY-ID>',
            access_key_secret='<ACCESS-KEY-SECRET>',
            region_id='cn-hangzhou'
        )
        client = Client(config)
    
        assume_role_request = AssumeRoleRequest(
            duration_seconds=3600,
            role_arn='<RoleARN>',
            role_session_name='fc-python-sdk'
        )
        response = client.assume_role(assume_role_request)
        response_json = json.loads(str(response.body).replace("'", "\"")) 
          result = json.dumps(response_json) 
          print(result)
    
    if __name__ == "__main__":
        main()

    次のサンプルコードは、期待される出力を示しています。

    {
      "RequestId": "964E0EC5-575B-4FF5-8FD0-D4BD8025602A",
      "AssumedRoleUser": {
        "Arn": "acs:ram::****:role/wss/wss",
        "AssumedRoleId": "***********:wss"
      },
      "Credentials": {
        "SecurityToken": "*************",
        "AccessKeyId": "STS.*************",
        "AccessKeySecret": "*************",
        "Expiration": "2023-05-28T11:23:19Z"
      }
    }
    説明

    STS トークン を取得する際のよくある質問への回答については、「RAM ロールと STS トークンに関する FAQ」をご参照ください。

  4. アカウント B 内の RAM ユーザーがアカウント A 内の Function Compute のすべてのサービスを表示できるように、アカウント B の機能コードを変更します。

    サンプルコード:

    const FC = require('@alicloud/fc2');
    // クライアントを構築します。
    // 取得した一時キーを使用します。/*
        Alibaba Cloud アカウントの AccessKey ペアは、すべての API 操作に対する権限を持っています。これらの認証情報を使用して Function Compute で操作を実行することは、リスクの高い操作です。RAM ユーザーを使用して API 操作を呼び出したり、日常の O&M を実行することをお勧めします。
        AccessKey ID と AccessKey シークレットをプロジェクトコードに保存しないことをお勧めします。保存すると、AccessKey ペアが漏洩し、アカウント内のすべてのリソースのセキュリティが侵害される可能性があります。
        この例では、ID 検証を実装するために、AccessKey ペアは環境変数に格納されています。
        サンプルコードを実行する前に、ローカル環境で ALIBABA_CLOUD_ACCESS_KEY_ID、ALIBABA_CLOUD_ACCESS_KEY_SECRET、および ALIBABA_CLOUD_SECURITY_TOKEN 環境変数を設定します。
        ALIBABA_CLOUD_ACCESS_KEY_ID、ALIBABA_CLOUD_ACCESS_KEY_SECRET、および ALIBABA_CLOUD_SECURITY_TOKEN 環境変数は、Function Compute のランタイムで実行権限を設定した後に自動的に設定されます。
    */
    const client = new FC('<accountID>', {
        region: '<yourRegionID>',
        accessKeyID: process.env['ALIBABA_CLOUD_ACCESS_KEY_ID'],
        securityToken: process.env['ALIBABA_CLOUD_SECURITY_TOKEN'],
        accessKeySecret: process.env['ALIBABA_CLOUD_ACCESS_KEY_SECRET'],
    });
    // サービスをクエリします。
    client.listServices().then(res => {
        console.log(JSON.stringify(res, null, ' '))
    }).catch(ex=> console.log(ex))
    重要

    アカウント A によって作成され、一時キーの権限を付与するロールに、サービスをクエリする権限があることを確認してください。