このトピックでは、Resource Access Management (RAM) コンソールまたはSDKを使用して、Security Token Service (STS) トークンを使用してAlibaba Cloudアカウント間で権限を付与する方法について説明します。 許可されたAlibaba Cloudアカウントは、Function Computeで許可アカウントのリソースを表示できます。
シナリオ
エンタープライズAはFunction Computeを有効化しており、エンタープライズBはFunction Computeリソースを管理する必要があります。 エンタープライズAには次の要件があります。
エンタープライズAは、ビジネスシステムに集中でき、Function Computeリソースの所有者としてのみ機能します。 さらに、エンタープライズAは、サービスや機能の作成などのリソースの管理をエンタープライズBに許可できます。
エンタープライズAは、従業員がエンタープライズBに参加または離脱するときに権限を変更する必要はありません。エンタープライズBは、エンタープライズAのリソースに対するきめ細かい権限をRAMユーザーに付与できます。
エンタープライズAは、エンタープライズAとエンタープライズBの連携が終了したときに、エンタープライズBに付与されている権限を取り消すことができます。
RAMコンソールの使用
エンタープライズAがエンタープライズBの従業員にFunction Computeのすべてのサービスにアクセスする権限を付与したいとします。 エンタープライズAにはアカウントAという名前のAlibaba Cloudアカウントがあり、エンタープライズBにはアカウントBという名前のAlibaba Cloudアカウントがあります。
アカウントAのIDは
123456789012 ****
で、アカウントのエイリアスはcompany-a
です。アカウントBのIDは
134567890123 ****
で、アカウントのエイリアスはcompany-b
です。
手順1: アカウントaを使用したRAMロールの作成
アカウントAを使用してRAMロールを作成し、RAMロールに必要な権限を付与してから、アカウントBにこのロールを引き受けることを許可します。 [その他のAlibaba Cloudアカウント] フィールドにアカウントBを入力する必要があります。
アカウントAを使用して、RAMコンソールにログインします。
左側のナビゲーションウィンドウで、を選択します。
ロールページで、ロールの作成をクリックします。
ロールの作成ページで、[ロールタイプの選択] セクションでAlibaba Cloudアカウントを選択し、次へをクリックします。
RAMロールを設定します。
RAMロール名を指定します。
注を指定します。
アカウントBのIDをその他のAlibaba Cloudアカウントフィールドを選択します。
説明Alibaba Cloudアカウントに属するすべてのRAMユーザーではなく、特定のRAMユーザーにRAMロールを引き受けたい場合は、次のいずれかの方法を使用できます。
RAMロールの信頼ポリシーを変更します。 詳細については、「例1: RAMロールの信頼できるエンティティをAlibaba Cloudアカウントに変更する」をご参照ください。
RAMユーザーにアタッチされているロール引き受けポリシーを変更します。 詳細については、「RAMユーザーが引き受けることができるRAMロールを指定できますか? 」をご参照ください。
[OK] をクリックします。
閉じるをクリックします。
アカウントAを使用して、作成したRAMロールにAliyunFCReadOnlyAccessポリシーをアタッチします。 RAMロールに権限を付与する方法の詳細については、「RAMロールに権限を付与する」をご参照ください。
RAMロールの作成後、RAMロールの詳細ページの基本情報セクションで、RAMロールのAlibaba Cloud Resource Name (ARN) と信頼ポリシーを確認できます。
この例では、RAMロールのARNは
acs:ram::123456789012 ****:role/fc-admin
です。次のスクリプトは、RAMロールの信頼ポリシーを示しています。
説明このポリシーは、アカウントBに属するRAMユーザーのみがRAMロールを引き受けることができることを示します。
{ "Statement": [ { "Action": "sts:AssumeRole", "Effect": "Allow", "Principal": { "RAM": [ "acs:ram::134567890123****:root" ] } } ], "Version": "1" }
ステップ2: アカウントBを使用してRAMユーザーを作成
アカウントBを使用して、エンタープライズBの従業員のRAMユーザーを作成します。詳細については、「」をご参照ください。RAMユーザーの作成.
アカウントBを使用して、AliyunSTSAssumeRoleAccessポリシーをRAMユーザーにアタッチします。 これにより、RAMユーザーはRAMロールを引き受けることができます。 RAMユーザーに権限を付与する方法の詳細については、「RAMユーザーに権限を付与する」をご参照ください。
ステップ3: ログオンIDの切り替え
アカウントBに属するRAMユーザーがアカウントaのリソースにアクセスする必要がある場合、アカウントBを使用してRAMユーザーに必要な権限を付与できます。 アカウントBに属するRAMユーザーは、アカウントAのRAMロールを引き受けて、アカウントAのリソースにアクセスします。次の操作を実行します。
アカウントBに属するRAMユーザーを使用して、RAMコンソール.
RAMユーザーとしてコンソールにログインする方法の詳細については、「Alibaba Cloud管理コンソールにRAMユーザーとしてログインする」をご参照ください。
コンソールの右上隅にあるプロフィール写真の上にポインターを移動し、切り替えID.
RAMロールが属するAlibaba Cloudアカウントのエンタープライズエイリアス (アカウントエイリアス) 、デフォルトドメイン名、またはIDを入力して。 詳細については、「デフォルトドメイン名の表示と変更」をご参照ください。
RAMロールの名前を入力します。 詳細については、「RAMロールに関する情報の表示」をご参照ください。
詳細については、「RAMロールの設定」をご参照ください。
(オプション) 付与された権限の取り消し
企業Aは、企業Aと企業Bとの間の連携が終了すると、アカウントBに付与された権限を取り消すことができる。 これにより、アカウントBに属するすべてのRAMユーザーがRAMロールの権限を持たなくなります。 次の操作を実行します。
アカウントAを使用して、RAMコンソールにログインします。
左側のナビゲーションウィンドウで、 を選択します。
ロールページで、削除するRAMロールを見つけて、アクション列で削除をクリックします。
OKをクリックします。
RAMロールを削除する前に、RAMロールにアタッチされているポリシーをデタッチする必要があります。 詳細については、「RAMロールから権限を取り消す」をご参照ください。
SDKの使用
STSを使用して、Function Computeへの一時アクセスを許可できます。 STSは、クラウドコンピューティングユーザーにSTSトークンを提供するwebサービスです。 次の例は、アカウントBがアカウントAのすべてのサービスを表示する権限を取得する方法を示しています。
あなたが始める前に
手順
アカウントAを使用してRAMロールを作成し、信頼できるアカウントとしてアカウントBを選択します。
詳細については、「信頼できるAlibaba CloudアカウントのRAMロールの作成」をご参照ください。
アカウントBを使用してRAMユーザーを作成し、RAMユーザーにRAMロールを引き受ける権限を付与します。
詳細については、「RAMユーザーの作成」および「RAMユーザーへの権限付与」をご参照ください。
アカウントBの関数で、次のサンプルコードを入力して、一時的なアクセス資格情報を取得します。 詳細については、「STS SDKの概要」および「AssumeRole」をご参照ください。
const Core = require('@alicloud/pop-core'); // Build an Alibaba Cloud client that is used to initiate requests. /* The AccessKey pair 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 ID and AccessKey secret to 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 pair is stored in environment variables to implement identity verification. Configure the ALIBABA_CLOUD_ACCESS_KEY_ID and ALIBABA_CLOUD_ACCESS_KEY_SECRET environment variables before you run the sample code. The ALIBABA_CLOUD_ACCESS_KEY_ID and ALIBABA_CLOUD_ACCESS_KEY_SECRET environment variables are automatically configured after you configure the execution permissions in the runtime of Function Compute. */ var client = new Core({ accessKeyId: process.env['ALIBABA_CLOUD_ACCESS_KEY_ID'], accessKeySecret: process.env['ALIBABA_CLOUD_ACCESS_KEY_SECRET'], endpoint: 'https://sts.aliyuncs.com', apiVersion: '2015-04-01' }); // Configure the parameters. var params = { "RegionId": "cn-hangzhou", "RoleArn": "<RoleARN>", "RoleSessionName": "<RoleSessionName>" } var requestOption = { method: 'POST' }; // Initiate the request and obtain responses. client.request('AssumeRole', params, requestOption).then((result) => { console.log(JSON.stringify(result)); }, (ex) => { console.log(ex); })
# -*- coding: utf-8 -*- from alibabacloud_tea_openapi.models import Config from alibabacloud_sts20150401.client import Client from alibabacloud_sts20150401.models import AssumeRoleRequest def main(): # Enter the temporary key and temporary token. # The AccessKey pair 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 ID and AccessKey secret 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 pair is stored in environment variables to implement identity verification. # Configure the ALIBABA_CLOUD_ACCESS_KEY_ID and ALIBABA_CLOUD_ACCESS_KEY_SECRET environment variables in your local environment before you run the sample code. # In the runtime of Function Compute, the ALIBABA_CLOUD_ACCESS_KEY_ID and ALIBABA_CLOUD_ACCESS_KEY_SECRET environment variables are automatically configured after you configure the execution permissions. AccessKeySecret=os.getenv('ALIBABA_CLOUD_ACCESS_KEY_SECRET')) AccessKeyId=os.getenv('ALIBABA_CLOUD_ACCESS_KEY_ID') regionId ='cn-hangzhou' config = Config( access_key_id='<ACCESS-KEY-ID>', access_key_secret='<ACCESS-KEY-SECRET>', region_id='cn-hangzhou' ) client = Client(config) assume_role_request = AssumeRoleRequest( duration_seconds=3600, role_arn='<RoleARN>', role_session_name='fc-python-sdk' ) response = client.assume_role(assume_role_request) response_json = json.loads(str(response.body).replace("'", "\"")) result = json.dumps(response_json) print(result) if __name__ == "__main__": main()
次のサンプルコードは、期待される出力を示しています。
{ "RequestId": "964E0EC5-575B-4FF5-8FD0-D4BD8025602A", "AssumedRoleUser": { "Arn": "acs:ram::****:role/wss/wss", "AssumedRoleId": "***********:wss" }, "Credentials": { "SecurityToken": "*************", "AccessKeyId": "STS.*************", "AccessKeySecret": "*************", "Expiration": "2023-05-28T11:23:19Z" } }
説明STSトークン
を取得する際のよくある質問に対する回答については、「RAMロールとSTSトークンに関するよくある質問」をご参照ください。アカウントBの関数コードを変更して、アカウントBに属するRAMユーザーに、アカウントA内のfunction Compute内のすべてのサービスを表示する権限を付与します。
サンプルコード:
const FC = require('@alicloud/fc2'); // Build a client. // Use the obtained temporary key. /* The AccessKey pair 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 ID and AccessKey secret to 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 pair is stored in environment variables to implement identity verification. Configure the ALIBABA_CLOUD_ACCESS_KEY_ID, ALIBABA_CLOUD_ACCESS_KEY_SECRET, and ALIBABA_CLOUD_SECURITY_TOKEN environment variables in your local environment before you run the sample code. The ALIBABA_CLOUD_ACCESS_KEY_ID, ALIBABA_CLOUD_ACCESS_KEY_SECRET, and ALIBABA_CLOUD_SECURITY_TOKEN environment variables are automatically configured after you configure the execution permissions in the runtime of Function Compute. */ const client = new FC('<accountID>', { region: '<yourRegionID>', accessKeyID: process.env['ALIBABA_CLOUD_ACCESS_KEY_ID'], securityToken: process.env['ALIBABA_CLOUD_SECURITY_TOKEN'], accessKeySecret: process.env['ALIBABA_CLOUD_ACCESS_KEY_SECRET'], }); // Query services. client.listServices().then(res => { console.log(JSON.stringify(res, null, ' ')) }).catch(ex=> console.log(ex))
重要アカウントAによって作成され、一時キーの権限を付与するロールに、サービスを照会する権限があることを確認します。