このトピックでは、特定のユーザー定義関数(UDF)へのアクセス権を特定のユーザーのみに付与する方法について説明します。このベストプラクティスは、データの暗号化と復号化のアルゴリズムを伴うため、データセキュリティに関連しています。
前提条件
MaxCompute クライアントがインストールされていること。詳細については、「MaxCompute クライアント (odpscmd)」をご参照ください。
背景情報
通常、ユーザーのアクセス許可を制御するには、次のいずれかの方法を使用できます。
別のターゲットワークスペースで必要なワークスペース内のすべてのオブジェクトを含むパッケージを作成し、ターゲットワークスペースでパッケージの使用を承認します。
この方法は、ワークスペース間でリソースへの共有アクセスを承認する場合に適用されます。ただし、開発者ロールを持つユーザーにパッケージへのアクセス権を付与すると、ユーザーはパッケージ内のすべてのオブジェクトに対するフルアクセス許可を持ちます。これにより、制御不能なリスクが発生する可能性があります。詳細については、「パッケージに基づくクロスプロジェクトリソースアクセス」をご参照ください。
次の図は、開発者ロールが DataWorks ワークスペースで持つアクセス許可を示しています。
前の図に示すように、開発者ロールは、デフォルトでワークスペース内のすべてのパッケージ、関数、リソース、およびテーブルに対するフルアクセス許可を持ちます。これは、アクセス許可管理の要件を満たしていません。
次の図は、RAM ユーザーに開発者ロールが割り当てられた後、RAM ユーザーが DataWorks ワークスペースで持つアクセス許可を示しています。
上記を考慮すると、パッケージベースの承認を使用したり、DataWorks のデフォルトロールをユーザーに割り当てたりすることによって、特定の UDF へのアクセス権を特定のユーザーに正確に付与することはできません。たとえば、RAM ユーザー
RAM$xxxxx.pt@example.com:ramtest
に開発者ロールを割り当てると、RAM ユーザーは現在のワークスペース内のすべてのオブジェクトに対するフルアクセス許可を持ちます。詳細については、「ユーザーの承認」をご参照ください。アクセス許可制御のために DataWorks コンソールでロールを作成します。
DataWorks コンソールにログインします。左側のナビゲーションペインで、ワークスペースをクリックします。表示されるページで、ターゲットワークスペースを見つけ、[アクション] 列の [データ分析] をクリックします。表示される DataStudio ページで、右上隅にある
アイコンをクリックします。表示されるページで、左側のナビゲーションペインの [maxcompute 管理] をクリックし、次に [カスタムユーザーロール] をクリックします。表示される [カスタムユーザーロール] ページで、[ロールの作成] をクリックして、アクセス許可制御のためのロールを作成します。ただし、この方法では、テーブルまたはワークスペースに対するアクセス許可のみを付与でき、特定の UDF に対するアクセス許可は付与できません。ロールポリシーとプロジェクトポリシーを使用して、特定の UDF へのアクセス権を特定のユーザーのみに付与します。
ロールポリシーとプロジェクトポリシーを使用すると、特定のリソースに対する特定のアクセス許可を特定のユーザーに付与できます。
説明セキュリティ上の理由から、DataWorks の初心者の方は、テストワークスペースでロールポリシーとプロジェクトポリシーを適用することをお勧めします。
要約すると、ロールポリシーとプロジェクトポリシーを使用して、特定の UDF へのアクセス権を特定のユーザーのみに付与できます。
ユーザーがワークスペース内の特定のリソースにアクセスできないようにするには、次の手順に従います。ユーザーに開発者ロールを割り当て、MaxCompute クライアントでリソースへのアクセス要求を拒否するようにロールポリシーを設定します。
禁止されているユーザーの 1 人にリソースへのアクセスを許可するには、MaxCompute クライアントでリソースへのアクセス要求を許可するようにプロジェクトポリシーを設定します。
手順
getregion という名前の UDF へのアクセスがデフォルトで拒否されるロールを作成します。
MaxCompute クライアントで、次のコマンドを実行して denyudfrole ロールを作成します。
create role denyudfrole;
次の内容でロールポリシーファイルを作成します。
{ "Version": "1", "Statement": [ { "Effect": "Deny", // 拒否 "Action": ["odps:Read","odps:List"], // 読み取りとリスト表示 "Resource": "acs:odps:*:projects/sz_mc/resources/getaddr.jar" // リソースパス }, { "Effect": "Deny", // 拒否 "Action": ["odps:Read","odps:List"], // 読み取りとリスト表示 "Resource": "acs:odps:*:projects/sz_mc/registration/functions/getregion" // 関数パス } ] }
MaxCompute クライアントで、ロールポリシーファイルのストレージパスを設定します。
次のコマンドを実行します。
put policy /Users/yangyi/Desktop/role_policy.json on role denyudfrole;
MaxCompute クライアントで、次のコマンドを実行してロールポリシーを確認します。
get policy on role denyudfrole;
次の図は、コマンドの出力を示しています。
MaxCompute クライアントで、次のコマンドを実行して、開発者ロールを持つ RAM ユーザーに denyudfrole ロールを割り当てます。
grant denyudfrole to RAM$xxxx.pt@example.com:ramtest;
denyudfrole ロールが作成されていることを確認します。
denyudfrole ロールが割り当てられている RAM ユーザーとして MaxCompute クライアントにログインします。次に、
whoami;
コマンドを実行して、現在のログインユーザーを確認します。show grants;
コマンドを実行して、現在のログインユーザーのアクセス許可を確認します。コマンド出力は、RAM ユーザーに 2 つのロール(role_project_dev と denyudfrole)があることを示しています。 role_project_dev は、DataWorks ワークスペースのデフォルトの開発者ロールです。
UDF getregion とその依存パッケージに対する RAM ユーザーのアクセス許可を確認します。
コマンド出力は、DataWorks ワークスペースの開発者ロールを持つ RAM ユーザーが、UDF getregion に対する読み取りアクセス許可を持っていないことを示しています。 RAM ユーザーのみに UDF getregion へのアクセス権を付与するには、さらにプロジェクトポリシーを設定する必要があります。
プロジェクトポリシーを設定します。
次の内容でプロジェクトポリシーファイルを作成します。
{ "Version": "1", "Statement": [{ "Effect":"Allow", // 許可 "Principal":"RAM$yangyi.pt@example.com:yangyitest", // プリンシパル "Action":["odps:Read","odps:List","odps:Select"], // アクション "Resource":"acs:odps:*:projects/sz_mc/resources/getaddr.jar" // リソースパス }, { "Effect":"Allow", // 許可 "Principal":"RAM$xxxx.pt@example.com:yangyitest", // プリンシパル "Action":["odps:Read","odps:List","odps:Select"], // アクション "Resource":"acs:odps:*:projects/sz_mc/registration/functions/getregion" // 関数パス }] }
MaxCompute クライアントで、プロジェクトポリシーファイルのストレージパスを設定します。
次のコマンドを実行します。
put policy /Users/yangyi/Desktop/project_policy.json;
MaxCompute クライアントで、次のコマンドを実行してプロジェクトポリシーを確認します。
get policy;
次の図は、コマンドの出力を示しています。
whoami;
コマンドを実行して、現在のログインユーザーを確認します。次に、show grants;
コマンドを実行して、ユーザーのアクセス許可を確認します。SQL ノードを実行し、指定された RAM ユーザーのみが特定の UDF とその依存パッケージにアクセスできるかどうかを確認します。
次のコマンド出力は、指定された RAM ユーザーが特定の UDF にアクセスできることを示しています。
次のコマンド出力は、指定された RAM ユーザーが UDF の依存パッケージにアクセスできることを示しています。