このトピックでは、Data Lake Formation (DLF) の権限モデルについて説明し、RAM ユーザーが DLF の機能を使用およびアクセスするために適切な権限を付与する方法を解説します。
Data Lake Formation (DLF) の権限モデルは、RAM 権限と DLF データ権限という 2 つの主要なレイヤーで構成されています。ユーザーが DLF のページやデータにアクセスするには、通常、データリソースにアクセスするために両方の権限レイヤーのチェックに合格する必要があります。
-
RAM 権限:すべての DLF OpenAPI オペレーションへのアクセスを制御し、RAM ユーザーがどの DLF OpenAPI オペレーションまたはページにアクセスできるかを決定します。
-
DLF データ権限:データベース、テーブル、列、関数、データカタログなどの内部 DLF リソースへのアクセスや使用、およびデータ認可オペレーションの権限を制御します。
レイヤー 1:RAM OpenAPI 権限
このレイヤーは、すべての DLF OpenAPI オペレーションへのアクセスを制御し、RAM ユーザーが特定の DLF OpenAPI オペレーションまたはページにアクセスできるかどうかを決定します。RAM コンソール には、2 つの組み込み認可ポリシーがあります。
-
AliyunDLFFullAccess:すべての DLF OpenAPI オペレーションを呼び出す権限を付与します。 -
AliyunDLFReadOnlyAccess:ListまたはGetで始まる API オペレーションなど、読み取り専用の DLF OpenAPI オペレーションを呼び出す権限を付与します。このポリシーは、CreateやDeleteなどの書き込みオペレーションの権限を付与しません。重要SubmitQueryオペレーションは書き込みオペレーションであるため、AliyunDLFFullAccess権限が必要です。
OpenAPI レベルでよりきめ細かい制御を行うために、カスタム RAM 認可ポリシーを作成することもできます。
レイヤー 2:DLF のきめ細かいデータ権限
このレイヤーは、データベース、テーブル、列、関数、データカタログなどの内部 DLF リソースへのアクセスや使用、およびロール管理、ユーザー管理、認可などのオペレーションの権限を制御します。
-
レイヤー 2 の権限制御は、DLF のきめ細かいデータ権限と RAM DLF-DSS の粗粒度のデータ権限の 2 種類に分かれています。これらの種類は OR 関係にあります。ユーザーはどちらかの種類の権限チェックに合格するとアクセス権を取得でき、両方のチェックに失敗した場合にのみアクセスが拒否されます。
-
データベース、テーブル、列、関数、データカタログなどのデータリソースに対する権限チェックは、データカタログの権限設定を有効にして初めて有効になります。ただし、ロール、ユーザー、認可管理などの管理オペレーションの権限検証は、設定が有効になっているかどうかに関係なく、常にきめ細かいデータ権限によって適用されます。
データ権限管理を簡素化するために、DLF では組み込みのデータ管理者ロールが提供されています。これらのロールは、[Data Permission] > [Role] ページで確認し、特定のユーザーに割り当てることができます。
-
admin(データレイク管理者):Data Lake Formation のすべてのデータおよび認可権限を持ちます。 -
super_administrator(スーパー管理者):Data Lake Formation のすべてのデータおよび認可権限を持ち、adminロールを持つユーザーを変更できます。
きめ細かい権限の設定に関する詳細については、「データ権限の概要」をご参照ください。
レイヤー 2:RAM DLF-DSS の粗粒度のデータ権限
このレイヤーは、データベース、テーブル、列、関数、データカタログなどの内部 DLF リソースへのアクセスや使用、およびロール管理、ユーザー管理、認可などのオペレーションの権限を制御します。RAM コンソールには、2 つの組み込み認可ポリシーがあります。
-
AliyunDLFDSSFullAccess:すべてのきめ細かい DLF リソースへのアクセスを許可します。 -
AliyunDLFDSSReadOnlyAccess:List、Get、Select、Executeなどのオペレーションを含め、すべてのきめ細かい DLF リソースへの読み取り専用アクセスを許可します。
-
きめ細かいデータ権限制御には、DLF のきめ細かいデータ権限を使用することを推奨します。
データベース、テーブル、列、関数、データカタログなどのデータリソースに対する権限チェックは、データカタログの権限設定を有効にした後にのみ有効になります。ただし、ロール、ユーザー、および権限管理などの管理操作に対する権限検証は、設定が有効になっているかどうかに関係なく、常に DLF-DSS の粗粒度のデータ権限によって強制されます。
-
RAM の
AdministratorAccessポリシーを持つ RAM ユーザーは、すべての DLF-DSS 権限も持ち、これはAliyunDLFDSSFullAccessポリシーを持つことと同等です。
一般的なシナリオ
-
ユースケース:データ権限制御を必要としない DLF メタデータのクエリ。
-
組み込みの
AliyunDLFFullAccessまたはAliyunDLFReadOnlyAccess認可ポリシーをアタッチして、「レイヤー 1:RAM OpenAPI 権限」を RAM ユーザーに付与します。
-
-
ユースケース:きめ細かいデータ認可のための DLF の使用。
-
ステップ 1:組み込みの
AliyunDLFFullAccessまたはAliyunDLFReadOnlyAccess認可ポリシーをアタッチして、「レイヤー 1:RAM OpenAPI 権限」を RAM ユーザーに付与します。 -
ステップ 2:データカタログの権限設定を有効にします。
-
ステップ 3 (オプション):E-MapReduce (EMR) などの他のサービスを使用してデータのクエリや変更を行う場合は、EMR クラスターで DLF-Auth 権限スイッチも有効にする必要があります。
-
ステップ 4:RAM ユーザーに必要なデータ権限を付与します。次のいずれかの方法を使用します。
-
よくある質問
-
問題 1:ユーザーが DLF API を呼び出すために必要な RAM 権限がないことを示すエラーメッセージが表示される。
症状:ページに、
dlf:xxx権限に対して RAM 認可が必要であることを示すエラーメッセージが表示されます。これは、ユーザーがレイヤー 1 の OpenAPI 権限を必要とすることを意味します。RAM コンソールで組み込みのAliyunDLFFullAccessまたはAliyunDLFReadOnlyAccessポリシーをアタッチして、必要な権限を付与してください。 -
問題 2:権限を付与しようとすると、リソースに対する権限がユーザーにないことを示すエラーメッセージが表示される。
症状:ユーザーが権限を付与しようとすると、必要な
dlf permissionがないことを示すエラーメッセージが表示されます。-
特定のリソースに対する認可権限をユーザーに付与してください。ロールを割り当てることによって、これらの権限を付与することもできます。詳細については、「権限の付与」をご参照ください。
-
ユーザーに
adminまたはsuper_administratorロールを付与してください。詳細については、「ロールの管理」をご参照ください。 -
ユーザーに
dlf-dss権限を付与してください。たとえば、dlf-dss:BatchGrantPermissionsとdlf-dss:SelectTableを付与すると、ユーザーはすべてのテーブルに対するSELECT権限を他のユーザーに付与できます。
エラーポップアップの例:タイトルは Error Occurred で、エラーメッセージは
Authorization Failed [4019]です。このメッセージは、ユーザーがリソースacs:dlf:cn-hangzhou:{accountId}:metastore/catalogs/{catalogName},databases/defaultに対する All 権限を持っていないことを示します。エラーコードはNoPermissionで、プリンシパルが dlf 権限チェックに失敗した旨のメッセージが表示されます。 -
-
問題 3:ユーザーが
ListPermissionsやListRolesなどのコントロールプレーン API オペレーションを呼び出す権限がないことを示すエラーメッセージが表示される。症状:ユーザーが権限のクエリやロールの管理などのコントロールプレーン API オペレーションを呼び出すと、エラーコード
NoPermissionのエラーが発生します。エラーメッセージは、ユーザーがそのオペレーションに対する権限を持っていないことを示します。この問題を解決するには、次のいずれかの方法を使用してください。エラーポップアップの例:タイトルは Error Occurred です。エラーメッセージは、ユーザーが
ListPermissionsやListRolesなどのコントロールプレーン API を呼び出す際に操作を実行する権限がないことを示します。エラーコードはNoPermissionで、プリンシパルが dlf 権限チェックに失敗した旨のメッセージが表示されます。-
ユーザーに
adminまたはsuper_administratorロールを付与してください。詳細については、「ロールの管理」をご参照ください。 -
ユーザーに
dlf-dss権限を付与してください。DLF では、RAM コンソールで組み込みのAliyunDLFDSSFullAccessおよびAliyunDLFDSSReadOnlyAccessポリシーが提供されています。例:-
dlf-dss:ListRoles:ユーザーが DLF 内のすべてのロールを表示できるようにします。 -
dlf-dss:ListPermissions:ユーザーが DLF で付与されたすべての権限を表示できるようにします。
-
-