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: ロールを作成して権限を付与する
Resource Access Management (RAM) コンソールにログインします。左側のナビゲーションウィンドウで、 を選択します。
[ロールの作成] ページで、[信頼できるエンティティタイプ] を [Alibaba Cloud サービス] に設定し、[信頼できるサービス] を [Function Compute/FC] に設定します。次に、[OK] をクリックします。
[ロールの作成] ダイアログボックスで、[ロール名] に
mytestroleなどの値を設定し、[OK] をクリックします。ロールの詳細ページにリダイレクトされます。[権限管理] タブで、[権限の追加] をクリックします。表示される [権限の追加] パネルで、ロールに必要な権限を付与します。
[リソース範囲] を選択します。[プリンシパル] は、デフォルトでターゲットロールです。ポリシーリストで、アタッチするシステムポリシーまたはカスタムポリシーの横にあるチェックボックスを選択します。ポリシーは、右側の [選択済み] リストに自動的に追加されます。次に、[OK] をクリックします。詳細については、「アクセスポリシーと例」をご参照ください。
[アカウントレベル]: 権限は現在の Alibaba Cloud アカウント内で有効になります。
[リソースグループレベル]: 権限は指定されたリソースグループ内で有効になります。Alibaba Cloud サービスがリソースグループをサポートしている場合にのみ、リソースグループに権限を付与できます。詳細については、「リソースグループをサポートする Alibaba Cloud サービス」をご参照ください。
この例では、目標は OSS を管理することなので、AliyunOSSFullAccess システムポリシーをロールに追加する必要があります。

ステップ 2: ロールを宛先関数にアタッチする
Function Compute コンソールにログインします。左側のナビゲーションウィンドウで、[関数] をクリックします。
上部のナビゲーションバーで、リージョンを選択します。[関数] ページで、関数を見つけて [アクション] 列の [設定] をクリックします。
関数の詳細ページで、[設定] タブをクリックします。[高度な設定] セクションで、[編集] をクリックします。[高度な設定] パネルで、[権限] を展開します。[関数ロール] ドロップダウンリストから、ステップ 1 で作成したロールである
mytestroleを選択します。次に、[デプロイ] をクリックします。
ステップ 3: 関数をテストする
関数をテストして、アタッチされた mytestrole ロールが OSS を管理するために必要な権限を付与していることを確認します。
[関数] ページで、関数の名前をクリックします。関数の詳細ページで、[コード] タブをクリックします。[関数のテスト] の横にある矢印をクリックし、[テストパラメーターの設定] を選択します。
{ "endpoint": "http://oss-cn-hangzhou.aliyuncs.com", "bucket": "web****", "objectName": "myObj", "message": "your-message" }上記のコードで、
bucketをお使いのバケットの名前に置き換えます。バケットは関数と同じリージョンにある必要があります。[コード] タブで、エディターにコードを入力し、[コードのデプロイ] をクリックします。
次の例は、組み込み 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'[関数のテスト] をクリックします。関数が実行された後、OSS コンソールにログインし、指定されたバケットに移動します。オブジェクトのコンテンツが、テストパラメーターの
messageパラメーターの値に置き換えられていることを確認します。
関連ドキュメント
Function Compute 3.0 は、権限付与にサービスリンクロールを使用して最小権限の原則をサポートしています。サービスリンクロールのポリシードキュメントの詳細については、「AliyunServiceRoleForFC」をご参照ください。
関数にロールを設定する方法の詳細については、「関数を作成する」をご参照ください。