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

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

最終更新日:Jul 25, 2024

ロギング、仮想プライベートクラウド (VPC) アクセス、非同期呼び出しなど、Function Computeが提供する特定の機能を使用する場合、Function Computeは他のAlibaba cloudサービスにアクセスする必要があります。 たとえば、関数のログ機能を設定する場合、Function Computeに指定されたLogstoreにログを書き込む権限を付与する必要があります。 Function Computeは、サービスにリンクされたロールをサポートします。 サービスにリンクされたロールを構成した後、関数はこれらの機能を使用するロールを引き受けます。関数のロールを個別に構成する必要はありません。 ただし、ビジネスロジックが他のクラウドサービスにアクセスする必要がある場合や、より詳細なアクセス制御が必要な場合は、関数のロールを個別に設定できます。

制御ポリシー機能の動作

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

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

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

例: Object Storage Service (OSS) にアクセスする権限をFunction Computeに付与する

この例では、Function ComputeにOSSリソースを管理する権限が付与されています。 OSSリソースを管理するための特定の関数を付与する場合は、対応するロールを関数にバインドできます。

あなたが始める前に

関数の作成

手順

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

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

  3. [設定] タブをクリックします。 左側のナビゲーションツリーで、[権限] をクリックします。 次に、権限の横にある [変更] をクリックします。 権限パネルで、[ロールの作成] をクリックしてRAMコンソールに移動し、プロンプトに従ってロールを作成します。 ビジネス要件に基づいてロールに権限を付与します。

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

    image

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

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

      image.png

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

      image.png

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

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

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

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

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

      image

  4. 前の手順で作成した新しいロールmytestroleを関数にバインドします。

    image

  5. 関数が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
          # Enter the temporary key, including the temporary token. 
          # The AccessKey pair of an Alibaba Cloud account has permissions on all API operations. 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 in 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コンソールにログインし、目的のバケットを見つけます。 テストパラメーターでは、オブジェクトの内容がmessageに置き換えられていることがわかります。

    関連ドキュメント

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

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