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

Function Compute:関数ロールを使用して Function Compute に他の Alibaba Cloud サービスへのアクセス権を付与する

最終更新日:Nov 09, 2025

Function Compute は、ロギング、VPC アクセス、宛先付きの非同期呼び出しなどの機能のために、他の Alibaba Cloud サービスにアクセスするための権限を必要とします。たとえば、関数ログを設定するには、Function Compute に指定された Logstore への書き込み権限を付与する必要があります。これにより、Function Compute は関数ログをその Logstore に書き込むことができます。

権限付与プロセスを簡素化するために、Function Computeサービスリンクロールをサポートしています。デフォルトでは、関数はこのサービスリンクロールを使用します。これにより、追加のロール設定を必要とせずに、ロギング、VPC アクセス、宛先付きの非同期呼び出しなどの機能を使用できます。

コードが他の Alibaba Cloud サービスにアクセスする必要がある場合、またはより詳細な権限付与が必要な場合は、[関数ロール] を設定して関数に権限を付与する必要があります。関数が呼び出されると、Function Compute は自動的にこのロールを偽装します。

仕組み

Function Compute は、関数に設定されたロールを使用して、AssumeRole 操作を呼び出すことにより、一時的なセキュリティトークンサービス (STS) トークンを取得します。その後、Function Compute は、コンテキスト内の Credentials または credentials パラメーターを介して、一時的なトークンを関数に渡します。この一時的なトークンには、ロールに設定したすべてのリソースに対する権限が含まれています。関数コードでこのトークンを使用して、他の Alibaba Cloud サービスにアクセスできます。

一時的なトークンの有効期間は 36 時間です。有効期間は変更できません。関数の最大実行時間は 24 時間です。したがって、一時的なトークンは関数の実行中に有効期限切れになることはありません。

Credentials または credentials パラメーターの場所は、ランタイムによって異なります。詳細については、次のリンクをクリックしてください。カスタムランタイムまたはカスタムイメージを使用する場合、一時的なトークンはリクエストヘッダーに挿入されることに注意してください。

例: Function Compute に OSS へのアクセス権限を付与する

このセクションでは、関数に Object Storage Service (OSS) を管理する権限を付与する方法の例を示します。これを行うには、必要な OSS 権限を持つロールを作成し、そのロールを関数にアタッチする必要があります。

前提条件

関数を作成する

手順

ステップ 1: ロールを作成して権限を付与する

  1. Resource Access Management (RAM) コンソールにログインします。左側のナビゲーションウィンドウで、[ロール] > [ロールの作成] を選択します。

  2. [ロールの作成] ページで、[信頼できるエンティティタイプ][Alibaba Cloud サービス] に設定し、[信頼できるサービス][Function Compute/FC] に設定します。次に、[OK] をクリックします。

  3. [ロールの作成] ダイアログボックスで、[ロール名]mytestrole などの値を設定し、[OK] をクリックします。ロールの詳細ページにリダイレクトされます。

  4. [権限管理] タブで、[権限の追加] をクリックします。表示される [権限の追加] パネルで、ロールに必要な権限を付与します。

    [リソース範囲] を選択します。[プリンシパル] は、デフォルトでターゲットロールです。ポリシーリストで、アタッチするシステムポリシーまたはカスタムポリシーの横にあるチェックボックスを選択します。ポリシーは、右側の [選択済み] リストに自動的に追加されます。次に、[OK] をクリックします。詳細については、「アクセスポリシーと例」をご参照ください。

    • [アカウントレベル]: 権限は現在の Alibaba Cloud アカウント内で有効になります。

    • [リソースグループレベル]: 権限は指定されたリソースグループ内で有効になります。Alibaba Cloud サービスがリソースグループをサポートしている場合にのみ、リソースグループに権限を付与できます。詳細については、「リソースグループをサポートする Alibaba Cloud サービス」をご参照ください。

    この例では、目標は OSS を管理することなので、AliyunOSSFullAccess システムポリシーをロールに追加する必要があります。

    image

ステップ 2: ロールを宛先関数にアタッチする

  1. Function Compute コンソールにログインします。左側のナビゲーションウィンドウで、[関数] をクリックします。

  2. 上部のナビゲーションバーで、リージョンを選択します。[関数] ページで、関数を見つけて [アクション] 列の [設定] をクリックします。

  3. 関数の詳細ページで、[設定] タブをクリックします。[高度な設定] セクションで、[編集] をクリックします。[高度な設定] パネルで、[権限] を展開します。[関数ロール] ドロップダウンリストから、ステップ 1 で作成したロールである mytestrole を選択します。次に、[デプロイ] をクリックします。

ステップ 3: 関数をテストする

関数をテストして、アタッチされた mytestrole ロールが OSS を管理するために必要な権限を付与していることを確認します。

  1. [関数] ページで、関数の名前をクリックします。関数の詳細ページで、[コード] タブをクリックします。[関数のテスト] の横にある矢印をクリックし、[テストパラメーターの設定] を選択します。

    {
       "endpoint": "http://oss-cn-hangzhou.aliyuncs.com",
       "bucket": "web****",
       "objectName": "myObj",
       "message": "your-message"
    }

    上記のコードで、bucket をお使いのバケットの名前に置き換えます。バケットは関数と同じリージョンにある必要があります。

  2. [コード] タブで、エディターにコードを入力し、[コードのデプロイ] をクリックします。

    次の例は、組み込み Python ランタイムの使用方法を示しています。Function Compute によって提供される一時的なトークンを使用して OSS にアクセスできます。

    import json
    import oss2
    
    def handler(event, context):
        evt = json.loads(event)
        creds = context.credentials
        # 一時的な認証情報 (一時的なトークンを含む)。
        # Alibaba Cloud アカウントの AccessKey ペアは、すべての API 操作に対する権限を持っています。RAM ユーザーを使用して API 呼び出しを行うか、日常の O&M を実行してください。
        # プロジェクトコードに AccessKey ID と AccessKey Secret をハードコーディングしないでください。ハードコーディングすると、AccessKey ペアが漏洩し、アカウント内のすべてのリソースのセキュリティが損なわれる可能性があります。
        # この例では、コンテキストから AccessKey ID と AccessKey Secret を取得する方法を示します。
        auth = oss2.StsAuth(creds.access_key_id, creds.access_key_secret, creds.security_token)
        bucket = oss2.Bucket(auth, evt['endpoint'], evt['bucket'])
        bucket.put_object(evt['objectName'], evt['message'])
        return 'success'
  3. [関数のテスト] をクリックします。関数が実行された後、OSS コンソールにログインし、指定されたバケットに移動します。オブジェクトのコンテンツが、テストパラメーターの message パラメーターの値に置き換えられていることを確認します。

関連ドキュメント

  • Function Compute 3.0 は、権限付与にサービスリンクロールを使用して最小権限の原則をサポートしています。サービスリンクロールのポリシードキュメントの詳細については、「AliyunServiceRoleForFC」をご参照ください。

  • 関数にロールを設定する方法の詳細については、「関数を作成する」をご参照ください。