Function Compute は、タグを使用した関数の多次元的な分類と管理をサポートしています。これにより、リソースを迅速に取得できます。また、タグを使用して、詳細なアクセスの制御を実装することもできます。異なる権限を異なる Resource Access Management (RAM) ユーザーまたはユーザーグループに付与することで、RAM ユーザー間でリソースを分離し、セキュリティ管理の効率を向上させることができます。
シナリオ
ある企業が Alibaba Cloud アカウントを使用して複数の関数を作成しました。この企業は、ビジネスグループに基づいて、異なる関数に対する権限を異なるチームに付与する必要があります。この企業は、各チームが付与された権限を持つ関数のみを表示および管理できるようにし、他の関数は表示も管理もできないようにしたいと考えています。
たとえば、次のようになります。
開発者チーム: 開発環境に関連する関数のみを管理できます。
O&M チーム: 本番環境に関連する関数のみを管理できます。
注意事項
最小権限の原則 (PoLP) に従うため、
AliyunFCFullAccessやAliyunFCReadOnlyAccessなどの高い権限を持つポリシーを RAM ユーザーにアタッチしないでください。そうしないと、この Topic で説明されているように、タグを使用してグループ別に関数の権限を管理することはできません。RAM ユーザーは、権限が付与されている関数を表示および管理するために、タグフィルターを使用する必要があります。そうしないと、RAM ユーザーはどの関数も表示できません。
RAM ユーザーが操作を実行する際に選択するリージョンが、リソースグループ内の関数が配置されているリージョンと同じであることを確認してください。
RAM ユーザーグループ内の RAM ユーザーは、RAM ユーザーグループの権限を自動的に継承します。
エイリアス、トリガー、関数の非同期構成、関数の同時構成、インスタンス、VPC 添付ファイル、非同期タスクなど、関数のサブリソースと構成は、関数のアクセスの制御設定を継承します。これらは、対応するタグを持つ RAM ユーザーのみが管理できます。
フローの概要
タグを使用して異なるチームの関数を識別する
開発者チームとオペレーターチームを識別するために 2 つのタグを計画します。
RAM ユーザーをグループ化する
開発者チーム用に 1 人、オペレーターチーム用に 1 人の 2 人の RAM ユーザーを作成します。各チームの RAM ユーザーを対応する RAM ユーザーグループに追加します。
タグベースの認証に基づいて RAM ユーザーグループに権限を付与する
タグベースの認証に Condition 要素を使用する 2 つのカスタムポリシーを作成して、リソースの範囲を定義します。次に、異なるアクセスポリシーを異なる RAM ユーザーグループにアタッチします。ユーザーグループ内の RAM ユーザーは、それぞれのユーザーグループの権限を継承します。
次の表に、詳細な計画を示します。
チーム | RAM ユーザーグループ | RAM アクセスポリシー | タグ |
開発者チーム | developer | FCPolicyForDevTeam |
|
オペレーターチーム | operator | FCPolicyForOpsTeam |
|
手順
関数を作成し、タグをアタッチします。
Alibaba Cloud アカウントを使用して Function Compute コンソールにログインし、関数を作成して、一部の関数には
team:devタグを、他の関数にはteam:opsタグをアタッチします。タグをアタッチする方法の詳細については、「タグの構成」をご参照ください。RAM ユーザーを作成します。
Alibaba Cloud アカウントを使用して RAM コンソールにログインし、2 人の RAM ユーザーを作成します。詳細については、「RAM ユーザーの作成」をご参照ください。
RAM ユーザーグループを作成し、RAM ユーザーを追加します。追加後、RAM ユーザーはそれぞれの RAM ユーザーグループの権限を継承します。
Alibaba Cloud アカウントを使用して RAM コンソールにログインし、developer と operator という名前の 2 つのユーザーグループを作成し、前に作成した 2 人の RAM ユーザーをそれぞれ developer グループと operator グループに追加します。詳細については、「RAM ユーザーグループの作成」および「RAM ユーザーを RAM ユーザーグループに追加する」をご参照ください。
カスタムポリシーを作成します。
アクセスポリシーは、システムポリシーとカスタムポリシーに分類されます。ニーズに応じて適切なタイプのアクセスポリシーを選択できます。この Topic では、ユーザーグループにカスタムポリシーを付与する例を示します。
Alibaba Cloud アカウントを使用して RAM コンソールにログインし、カスタムポリシーを作成します。
開発者チーム用に作成されたカスタムポリシーの名前が FCPolicyForDevTeam であるとします。以下はサンプルポリシーです。
{ "Version": "1", "Statement": [ { "Effect": "Allow", "Action": "fc:*", "Resource": "*", "Condition": { "StringEquals": { "acs:RequestTag/team": [ "dev" ] } } }, { "Effect": "Allow", "Action": "fc:*", "Resource": "*", "Condition": { "StringEquals": { "acs:ResourceTag/team": [ "dev" ] } } }, { "Effect": "Allow", "Action": [ "fc:ListTaggedResources", "tag:ListTagKeys", "fc:GetAccountSettings" ], "Resource": "*" }, { "Effect": "Deny", "Action": [ "fc:UntagResources", "fc:TagResources" ], "Resource": "*" } ] }オペレーターチーム用に作成されたカスタムポリシーの名前が FCPolicyForOpsTeam であるとします。以下はサンプルポリシーです。
{ "Version": "1", "Statement": [ { "Effect": "Allow", "Action": "fc:*", "Resource": "*", "Condition": { "StringEquals": { "acs:RequestTag/team": [ "ops" ] } } }, { "Effect": "Allow", "Action": "fc:*", "Resource": "*", "Condition": { "StringEquals": { "acs:ResourceTag/team": [ "ops" ] } } }, { "Effect": "Allow", "Action": [ "fc:ListTaggedResources", "tag:ListTagKeys", "fc:GetAccountSettings" ], "Resource": "*" }, { "Effect": "Deny", "Action": [ "fc:UntagResources", "fc:TagResources" ], "Resource": "*" } ] }
次の表にポリシーを示します。
ポリシー
説明
{ "Effect": "Allow", "Action": "fc:*", "Resource": "*", "Condition": { "StringEquals": { "acs:RequestTag/team": [ "dev" ] } } }RAM ユーザーがタグ
team:devを使用して関数をフィルター処理できるようにし、関数を作成するときに RAM ユーザーがタグteam:devを指定することを要求します。{ "Effect": "Allow", "Action": "fc:*", "Resource": "*", "Condition": { "StringEquals": { "acs:ResourceTag/team": [ "dev" ] } } }RAM ユーザーが
team:devタグが付いた関数でのみ管理操作を実行できるように制限します。{ "Effect": "Allow", "Action": [ "fc:ListTaggedResources", "tag:ListTagKeys", "fc:GetAccountSettings" ], "Resource": "*" },Function Compute 関数のすべてのタグのリストを表示し、アカウント情報を取得できるようにします。
{ "Effect": "Deny", "Action": [ "fc:UntagResources", "fc:TagResources" ], "Resource": "*" },タグのデタッチとアタッチを許可しません。
これにより、RAM ユーザーがタグを変更して権限の隔離を中断することを防ぎます。
{ "Effect": "Allow", "Action": [ "log:Get*", "log:List*", "log:Query*", "log:CreateProject", "log:CreateLogStore", "log:CreateIndex" ], "Resource": "*" },Function Compute がログを作成および読み取りできるようにします。
{ "Effect": "Allow", "Action": [ "fc:GetLayerVersionByArn", "fc:ListLayers", "fc:PutLayerACL", "fc:ListLayerVersions", "fc:CreateLayerVersion", "fc:DeleteLayerVersion", "fc:GetLayerVersion" ], "Resource": "*" },レイヤー関連の機能を使用できるようにします。
{ "Effect": "Allow", "Action": [ "fc:ListCustomDomains", "fc:GetCustomDomain", "fc:DeleteCustomDomain", "fc:UpdateCustomDomain", "fc:CreateCustomDomain" ], "Resource": "*" },カスタムドメイン名関連の機能を使用できるようにします。
{ "Effect": "Allow", "Action": [ "ram:ListRoles" ], "Resource": "*" },関数ロールを構成するときにロールのリストをクエリできるようにします。
説明FC で OSS、NAS、VPC などのプロダクトを構成して使用するには、これらのプロダクトに必要な権限も付与する必要があります。詳細については、「アクセスポリシーと例」をご参照ください。
RAM ユーザーグループに権限を付与します。
カスタムポリシー FCPolicyForDevTeam と FCPolicyForOpsTeam を、それぞれ developer ユーザーグループと operator ユーザーグループにアタッチします。
システムポリシー AliyunRAMFullAccess と AliyunECSFullAccess を developer ユーザーグループと operator ユーザーグループにアタッチします。権限が付与されると、これらのユーザーグループの RAM ユーザーは、指定されたタグを持つ関数の作成、RAM ユーザーとユーザーグループの作成、およびアクセスポリシーの作成とアタッチができます。
詳細については、「RAM ユーザーグループに権限を付与する」をご参照ください。
次の図は、developer ユーザーグループに推奨されるポリシーを示しています。

結果の検証
2 人の RAM ユーザーのそれぞれとして Function Compute コンソールにログインします。左側のナビゲーションウィンドウで、 を選択します。
詳細については、「RAM ユーザーとして Alibaba Cloud 管理コンソールにログインする」をご参照ください。
上部のメニューバーでリージョンを選択し、[関数] ページで [タグフィルタリング] をクリックし、対応する [タグキー] と [タグ値] でフィルターして、承認された関数をクエリおよび管理します。
RAM ユーザーは、所属するユーザーグループに付与されたポリシーに含まれるタグを選択した場合にのみ、特定のタグを持つ関数を表示および管理できます。そうしないと、RAM ユーザーはどの関数も表示できません。
たとえば、developer RAM ユーザーグループの RAM ユーザーは、タグ
team:devを使用して承認された関数をフィルターできます。