Function Computeの特定の機能を使用する場合、Function Computeは他のAlibaba Cloudサービスにアクセスする必要があります。 たとえば、関数にログ機能を設定する場合、指定されたLogstoreにログを書き込むためにFunction Compute権限を付与する必要があります。 Function Computeは、サービスにリンクされたロールを使用して、Simple Log serviceやVirtual Private Cloud (VPC) などの特定のAlibaba Cloudサービスにアクセスし、非同期呼び出しを有効にできます。 Function Computeがサービスにリンクされたロールを引き受けることを確認した場合、作成した関数は自動的にこのロールをデフォルトのロールとして使用し、関数ロールを個別に設定する必要がなくなります。 ただし、コードロジックが前述のサービス以外のサービスにアクセスする必要がある場合、またはより詳細なアクセス制御が必要な場合は、関数のロールを手動で構成できます。
制御ポリシー機能の動作
関数ロールに基づいて、Function ComputeはAssumeRoleを使用して、一時キーとしてSecurity Token Service (STS) トークンを取得します。 次に、コンテキストでCredentialsまたはcredentialsパラメーターを使用して、一時キーを関数に渡します。 この一時キーには、関数に権限が付与されたすべてのリソースが含まれます。 function Computeの関数コードで使用して、他のAlibaba Cloudサービスにアクセスできます。
一時キーは36時間有効で、変更できません。 関数を実行できる最大時間は24時間です。 したがって、一時キーは、関数の実行中に有効なままである。
Credentialsまたはcredentialsパラメーターの場所は、ランタイムによって異なります。 参照については、次のトピックを参照できます。 カスタムランタイムまたはカスタムコンテナランタイムを使用すると、一時キーがHTTPリクエストのヘッダーに挿入されることに注意してください。
例: OSSにアクセスするためのFunction Compute権限の付与
この例では、Function ComputeにObject Storage Service (OSS) リソースを管理する権限が付与されています。 OSSリソースを管理するための特定の関数権限を付与する場合は、対応するロールを関数にバインドできます。
前提条件
関数の作成が完了しました。 詳細については、「関数の作成」をご参照ください。
手順
Function Computeコンソールにログインします。 左側のナビゲーションウィンドウで、[関数] をクリックします。
上部のナビゲーションバーで、リージョンを選択します。 [関数] ページで、管理する関数を見つけ、[操作] 列の [設定] をクリックします。
関数の [関数の詳細] ページで、[設定] タブをクリックします。 左側のナビゲーションウィンドウで、[権限] をクリックし、[変更] をクリックします。 権限パネルで、[ロールの作成] をクリックして、RAM (Resource Access Management) コンソールに移動します。 プロンプトに従ってロールを作成し、ビジネス要件に基づいて権限を付与します。
すでに使用可能なロールがある場合は、直接使用できます。 ロールに必要な権限がない場合は、[ポリシーの変更] をクリックしてロールにポリシーをアタッチできます。 詳細については、「RAM ロールへの権限の付与」をご参照ください。
RAMコンソールの [ロール] ページで、[ロールの作成] をクリックします。
[ロールタイプの選択] ステップで、[Alibaba Cloud Service] を信頼できるエンティティとして選択し、[次へ] をクリックします。
[ロールの設定] ステップで、ロールタイプを [通常のサービスロール] に設定し、RAMロール名を指定し、[信頼できるサービスの選択] を [Function Compute] に設定し、[OK] をクリックします。 この例では、RAMロール名は
mytestrole
です。[完了] ステップで、[RAMロールに権限を追加] をクリックし、[権限の付与] をクリックします。
[権限付与] パネルで、[リソーススコープ] および [プリンシパル] パラメーターを指定します。 プリンシパルは、デフォルトで選択したロールになります。 必要なシステムポリシーとカスタムポリシーを選択すると、パネルの右側にある [選択したポリシー] セクションに追加されます。 選択したら、[権限の付与] をクリックします。 詳細については、「ポリシーとサンプルポリシー」をご参照ください。 リソーススコープパラメーターのオプションを次に示します。
アカウント: 権限は、現在のAlibaba Cloudアカウント内のすべてのリソースに対して有効です。
ResourceGroup: アクセス許可は、特定のリソースグループに対して有効です。 リソーススコープパラメーターにResourceGroupを選択した場合、必要なクラウドサービスがリソースグループをサポートしていることを確認します。 詳細については、「リソースグループと連携するサービス」をご参照ください。
この例では、作成されたロールにAliyunOSSFullAccessがアタッチされ、OSSへのアクセス権限がFunction Computeに付与されます。
前の手順で作成した新しいロール
mytestrole
を関数にバインドします。関数が
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 # 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'
[テスト関数] をクリックします。 関数の実行後、OSSコンソールにログインし、目的のバケットを見つけます。 テストパラメーターでは、オブジェクトの内容が
message
に置き換えられていることがわかります。
参考情報
Function Computeは、サービスにリンクされたロールを使用して最小限の権限付与を3.0サポートします。 サービスにリンクされたロールのポリシーコンテンツの詳細については、「AliyunServiceRoleForFC」をご参照ください。
関数のロールを設定する方法の詳細については、「関数の作成」をご参照ください。