ロギング、VPC アクセス、非同期呼び出しなどの機能を使用する場合、Function Compute は他のクラウドサービスにアクセスするための権限が必要です。 たとえば、関数のロギングを設定するには、Function Compute が関数ログを書き込めるように、指定された Logstore への書き込み権限を付与する必要があります。
承認プロセスを簡素化するために、Function Compute はサービスリンクロールをサポートしています。 関数はデフォルトでこのロールを使用するため、追加のロール設定なしでロギング、VPC アクセス、非同期呼び出しなどの機能にアクセスできます。
関数のコードが他のクラウドサービスにアクセスする必要がある場合、またはより詳細な権限が必要な場合は、[関数ロール] を設定する必要があります。 関数が呼び出されると、FC は設定されたロールを自動的に引き受けます。
仕組み
Function Compute は、関数に設定したロールに基づいて AssumeRole API を呼び出すことで一時的な認証情報 (STS トークン) を取得し、コンテキスト内の Credentials または credentials パラメーターを介して関数に渡します。 これらの一時的な認証情報は、設定された権限が適用されるすべてのリソースへのアクセスを許可し、関数コード内で使用して他の Alibaba Cloud サービスにアクセスできます。
一時的な認証情報の有効期間は 36 時間に固定されています。 関数の最大実行時間は 24 時間であるため、実行中に認証情報が期限切れになることはありません。
Credentials または credentials パラメーターの場所は、ランタイムによって異なります。 各ランタイムの詳細については、以下のリンクをご参照ください。 カスタムランタイムとカスタムイメージの場合、一時的な認証情報は HTTP リクエストヘッダーに挿入されます。
例:OSSへのアクセス権の付与
この例では、関数に OSS を管理する権限を付与する方法を示します。 OSS 権限を持つロールを作成し、関数にバインドします。
前提条件
操作手順
ステップ1:ロールの作成と権限の付与
-
RAMコンソールにログインします。 ナビゲーションペインで、[ロール] > [ロールの作成] を選択します。
-
[ロールの作成] ページで、[プリンシパルタイプ] に [クラウドサービス] を、[プリンシパル名] に [Function Compute / FC] を選択します。 次に、[OK] をクリックします。
-
表示される [ロールの作成] ダイアログボックスで、[ロール名] を
mytestroleのように設定し、[OK] をクリックします。 これにより、ロールの詳細ページにリダイレクトされます。 -
[権限] タブで、[権限を付与] をクリックします。 [権限を付与] パネルで、次の手順に従ってロールに権限を付与します。
-
[リソース範囲] を選択します。 プリンシパル は、デフォルトでターゲットロールです。 ポリシーリストから、システムポリシーまたはカスタムポリシーの横にあるチェックボックスを選択して、[選択済みのポリシー] リストに追加します。 次に、[OK] をクリックします。 詳細については、「ポリシーと例」をご参照ください。
-
[アカウント]:現在の 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 # FC によって挿入された一時的な認証情報を使用します。 # Alibaba Cloud アカウントの AccessKey ペアは、すべての API 操作へのフルアクセスを許可します。 # API アクセスや日常の O&M には、RAM ユーザーを使用することを推奨します。 # セキュリティリスクを防ぐため、AccessKey ID と AccessKey シークレットをプロジェクトコードにハードコーディングしないでください。 # この例では、コンテキストから AccessKey ID、AccessKey シークレット、およびセキュリティトークンを取得する方法を示します。 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 は、最小権限の承認のためにサービスリンクロールをサポートしています。 サービスリンクロールのポリシーの詳細については、「AliyunServiceRoleForFC」をご参照ください。
-
関数ロールの設定方法については、「関数の作成」をご参照ください。