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

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

最終更新日:Sep 09, 2024

Function Computeは、関数の実行時に他のAlibaba Cloudサービスにアクセスする必要があります。 たとえば、Function Computeは、Simple Log ServiceのLogstoreに関数ログを配信し、Container Registryからイメージを取得し、仮想プライベートクラウド (VPC) のリソースにアクセスする必要がある場合があります。 したがって、他のAlibaba Cloudサービスにアクセスするために、Function Computeのサービスに権限を付与する必要があります。 Function Computeによって提供されるデフォルトのロールAliyunFCDefaultRoleには、粗粒度の権限があります。 きめ細かい権限が必要な場合は、必要な権限を持つロールをサービスにバインドできます。

制御ポリシー機能の動作

Function Computeは、一時キーとして機能するSecurity Token Service (STS) トークンを取得します。 次に、関数が属するサービスに対して設定されたロールに基づいて、AssumeRole操作が呼び出されます。 次に、Function Computeは、コンテキストでCredentialsまたはcredentialsパラメーターを使用して、一時キーを関数に渡します。 一時キーには、権限が設定されているすべてのリソースが含まれます。 function Computeの関数コードのキーを使用して、他のAlibaba Cloudサービスにアクセスできます。

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

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

AliyunFCDefaultRole

権限付与を合理化するために、Function ComputeAliyunFCDefaultRoleという名前のデフォルトシステムロールを提供します。これはFunction Computeから特定のAlibaba Cloudサービスにアクセスすると想定できます。 デフォルトのロールを作成してバインドする方法の詳細については、「手順1: Function Computeの有効化」をご参照ください。

Resource Access Managementコンソールにログインして、AliyunFCDefaultRoleの権限を表示できます。

image.png

重要

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

例: OSSへのアクセス権限の付与

このセクションでは、OSS (Object Storage Service) にアクセスするための権限をFunction Computeに付与する方法について説明します。 Function Computeサービスに存在するすべての関数がOSSを管理できることを指定する場合は、ロールをサービスにバインドし、OSSを管理する権限を定義するポリシーをロールにアタッチできます。 次に、サービス内のすべての関数がOSSを管理する権限を持ちます。

前提条件

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

手順

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

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

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

    既存のロールをサービスにバインドすることもできます。 権限が不十分な場合は、[ポリシーの変更] をクリックして、他のポリシーをロールにアタッチできます。 詳細については、「RAMロールへの権限の付与」をご参照ください。

    image.png

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

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

      image.png

    3. [ロールの設定] ステップで、ロールタイプを [通常のサービスロール] に設定し、RAMロール名を指定し、[信頼サービスの選択][Function Compute] に設定し、[OK] をクリックします。 このセクションでは、mytestroleをロール名として使用します。

      image.png

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

    5. [許可の付与] ページで、[許可されたスコープ] および [プリンシパル] パラメーターを指定します。 プリンシパルは、デフォルトで選択したロールになります。 次に、システムポリシーまたはカスタムポリシーをロールにアタッチします。 ビジネス要件に基づいてポリシーをクリックすると、ページの右側にある [選択済み] セクションにポリシーを追加できます。 そして、[OK] をクリックします。 詳細については、「ポリシーとサンプルポリシー」をご参照ください。

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

      • 特定のリソースグループ: 特定のリソースグループで権限が有効になります。 [認定スコープ] を [特定のリソースグループ] に設定した場合、クラウドサービスがリソースグループをサポートしていることを確認します。 詳細については、「」をご参照ください。リソースグループと連携するサービス.

      このセクションでは、作成したロールにシステムポリシーAliyunOSSFullAccessをアタッチして、Function ComputeにOSSへのアクセス権限を付与する必要があります。

      image.png

  4. 手順3で作成した新しいロールmytestroleを、管理するサービスにバインドします。

    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 pair (AccessKey ID or 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 do not save the AccessKey pair in your project code. Otherwise, the AccessKey pair may be leaked and the security of all resources under your account may be compromised. 
          In this example, the AccessKey or AccessSecretKey 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コンソールにログインし、管理するバケットを見つけます。 ターゲットオブジェクトのコンテンツがメッセージのコンテンツに置き換えられていることがわかります。