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

Function Compute:他のAlibaba CloudサービスにアクセスするためのFunction Compute権限の付与

最終更新日:Jan 14, 2025

Function Computeは、関数の実行時に他のAlibaba Cloudサービスにアクセスする必要がある場合があります。 たとえば、関数ログをSimple Log ServiceのLogstoreに配信したり、Container Registryからイメージをプルしたり、仮想プライベートクラウド (VPC) にデプロイされているサービスにアクセスしたりする必要がある場合があります。 したがって、これらの他のAlibaba CloudサービスにアクセスするためにFunction Compute権限を付与する必要があります。 AliyunFCDefaultRoleは、Function Computeが適切に動作するために必要な粗い権限を付与するデフォルトのロールです。 より具体的な権限が必要な場合は、ロールを手動で作成して、サービスと関数に権限を付与できます。

制御ポリシー機能の動作

関数ロールに基づいて、function ComputeAssumeRoleを使用して、一時キーとしてSecurity Token Service (STS) トークンを取得します。 次に、コンテキストでCredentialsまたはcredentialsパラメーターを使用して、一時キーを関数に渡します。 この一時キーには、関数に権限が付与されたすべてのリソースが含まれます。 function Computeの関数コードで使用して、他のAlibaba Cloudサービスにアクセスできます。

一時キーは36時間有効で、変更できません。 関数を実行できる最大時間は24時間です。 したがって、一時キーは、関数の実行中に有効なままである。

Credentialsまたはcredentialsパラメーターの場所は、ランタイムによって異なります。 参照については、次のトピックを参照できます。 カスタムランタイムまたはカスタムコンテナランタイムを使用すると、一時キーがHTTPリクエストのヘッダーに挿入されることに注意してください。

AliyunFCDefaultRole

権限付与を簡素化するため、Function ComputeにはAliyunFCDefaultRoleという名前のデフォルトのシステムロールが用意されており、特定のAlibaba CloudサービスにアクセスするためのFunction Compute権限を付与できます。 このデフォルトのロールを作成し、Function Computeにロールを引き受けさせる方法の詳細については、「手順1: Function Computeの有効化」をご参照ください。

Resource Access Management (RAM) コンソールにログインして、AliyunFCDefaultRoleにバインドされている権限ポリシーを表示できます。

image.png

重要

AliyunFCDefaultRoleは、すべてのFunction Computeサービスが引き受けることができるFunction Compute専用のデフォルトシステムロールです。 ロールに追加のポリシーをアタッチしないでください。 この既定のロールによって提供される権限がビジネス要件を満たさない場合は、必要に応じて他のロールを作成し、権限ポリシーをアタッチできます。 詳細については、「信頼できるAlibaba CloudサービスのRAMロールの作成」をご参照ください。

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

この例では、Function ComputeにObject Storage Service (OSS) リソースを管理する権限が付与されています。 指定されたFunction Computeサービスのすべての関数にOSSリソースを管理する権限を付与する場合は、対応するロールをそのサービスにバインドできます。

前提条件

サービスと関数が作成されます。 詳細については、「サービスの作成」および「関数の作成」をご参照ください。

手順

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

  2. 上部のナビゲーションバーで、リージョンを選択します。 [サービス] ページで目的のサービスを見つけ、[操作] 列の [設定] をクリックします。

  3. [サービスの変更] ページの [ロールの設定] セクションで、[ロールの作成] をクリックしてRAMコンソールに移動します。 プロンプトに従ってロールを作成し、そのロールに必要な権限を付与します。

    すでに使用可能なロールがある場合は、直接使用できます。 ロールに必要な権限がない場合は、[ポリシーの変更] をクリックしてロールにポリシーをアタッチできます。 詳細については、「RAM ロールへの権限の付与」をご参照ください。

    image.png

    1. RAMコンソール[ロール] ページで、[ロールの作成] をクリックします。

    2. [ロールタイプの選択] ステップで、[Alibaba Cloud Service] を信頼できるエンティティとして選択し、[次へ] をクリックします。

      image.png

    3. [ロールの設定] ステップで、ロールタイプを [通常のサービスロール] に設定し、RAMロール名を指定し、[信頼できるサービスの選択][Function Compute] に設定し、[OK] をクリックします。 この例では、RAMロール名はmytestroleです。

      image.png

    4. [完了] ステップで、[RAMロールに権限を追加] をクリックし、[権限の付与] をクリックします。

    5. [権限付与] パネルで、[リソーススコープ] および [プリンシパル] パラメーターを指定します。 プリンシパルは、デフォルトで選択したロールになります。 必要なシステムポリシーとカスタムポリシーを選択すると、パネルの右側にある [選択したポリシー] セクションに追加されます。 選択したら、[権限の付与] をクリックします。 詳細については、「ポリシーとサンプルポリシー」をご参照ください。 リソーススコープパラメーターのオプションを次に示します。

      • アカウント: 権限は、現在のAlibaba Cloudアカウント内のすべてのリソースに対して有効です。

      • ResourceGroup: アクセス許可は、特定のリソースグループに対して有効です。 リソーススコープパラメーターにResourceGroupを選択した場合、必要なクラウドサービスがリソースグループをサポートしていることを確認します。 詳細については、「リソースグループと連携するサービス」をご参照ください。

      この例では、作成されたロールにAliyunOSSFullAccessがアタッチされ、OSSへのアクセス権限がFunction Computeに付与されます。

      image

  4. 前の手順で作成した新しいロールmytestroleを、権限を付与するFunction Computeサービスにバインドします。

    image.png

  5. サービスがmytestroleロールを引き受けたら、そのサービスのすべての関数がOSSリソースを管理できるかどうかをテストします。

    1. サービスリストからテストする関数を見つけてクリックします。 関数の [コード] タブで、[テスト関数] の横にある矢印をクリックし、[テストパラメーターの設定] を選択します。 次のコードスニペットは、テストパラメーターを示しています。

      {
         "endpoint": "http://oss-cn-hangzhou.aliyuncs.com",
         "bucket": "web****",
         "objectName": "myObj",
         "message": "your-message"
      }
    2. [コード] タブで、コードエディターでコードを記述し、[デプロイ] をクリックします。

      この例では、組み込みのPythonランタイムが使用されます。 Function Computeが提供する一時キーを使用してOSSにアクセスできます。

      import json
      import oss2
      
      def handler(event, context):
          evt = json.loads(event)
          creds = context.credentials
          # Enter the temporary key, including the temporary token. 
          # The AccessKey ID and AccessKey secret of an Alibaba Cloud account can be used to access all API operations. Using these credentials to perform operations in Function Compute is a high-risk operation. We recommend that you use a RAM user to call API operations or perform routine O&M. 
          # We recommend that you avoid saving the AccessKey pair in your project code. If this sensitive information is leaked, the security of all resources in your account could be compromised. 
          # In this example, the AccessKey pair is obtained from the context. 
          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に置き換えられていることがわかります。