EMR Serverless Spark ワークスペースのタスクが Object Storage Service (OSS) や Data Lake Formation (DLF) などの他の Alibaba Cloud サービスを呼び出すとき、権限認証に実行ロールが使用されます。ワークスペースを作成するとき、デフォルトの実行ロールまたはカスタムロールのいずれかを使用できます。
シナリオ
タスクの実行中、実行ロールは指定された ID を偽装して、さまざまなリソースやサービスを呼び出します。この ID は、認証および ActionTrail の監査に使用されます。次のシナリオがサポートされています:
OSS ファイルへのアクセス
タスクの実行中、実行ロールは Alibaba Cloud OSS に保存されているファイルにアクセスして管理します。
DLF メタデータの読み取りと書き込み
DLF のアクセスの制御が有効になっている場合、実行ロールはタスクの種類に基づいて異なる ID を偽装します:
データ開発: 実行ロールは、タスクを送信した Alibaba Cloud アカウントまたは RAM ユーザーの ID を偽装します。
Livy Gateway: 実行ロールは、トークン作成者の ID を偽装します。
MaxCompute データの読み取りと書き込み
MaxCompute データを読み書きするには、実行ロールはタスクを送信した Alibaba Cloud アカウントまたは RAM ユーザーの ID を偽装します。この ID は、認証および ActionTrail の監査に使用されます。
注意事項
ワークスペースの作成後は、実行ロールを変更できません。
デフォルトの実行ロールの使用
ワークスペースを作成するときに、システムは 実行ロール 設定項目を変更しない場合、デフォルトの実行ロール AliyunEMRSparkJobRunDefaultRole を使用します。
デフォルトの実行ロールには、次のプロパティがあります:
ロール名: AliyunEMRSparkJobRunDefaultRole。
関連ポリシー: このロールは、OSS、DLF、および MaxCompute へのアクセス権限を付与するシステムポリシー AliyunEMRSparkJobRunDefaultRolePolicy にアタッチされます。
メンテナンス: このポリシーは Alibaba Cloud によって作成および維持され、サービス要件を満たすために自動的に更新されます。
デフォルトの実行ロール AliyunEMRSparkJobRunDefaultRole を編集または削除しないでください。そうしないと、ワークスペースの作成またはタスクの実行が失敗する可能性があります。
カスタム実行ロールの使用
実行ロールの権限を制御するには、ワークスペースの作成時に [実行ロール] パラメーターにカスタムロールを選択します。以下の手順に従って、同じアカウント内の OSS や DLF などの他のリソースへのパスワードなしのアクセスのためのカスタム実行ロールを設定します。
次のアクセスポリシーは、カスタムロールを設定するための例です。カスタム実行ロールのアクセスポリシーは静的であり、Alibaba Cloud によって自動的に更新されないことに注意してください。タスクが正しく実行されるようにするには、定期的にアクセスポリシーを確認して更新することをお勧めします。デフォルトの AliyunEMRSparkJobRunDefaultRole 実行ロールの AliyunEMRSparkJobRunDefaultRolePolicy アクセスポリシーを参照して、最新の必要な権限を取得できます。
手順
アクセスポリシーを作成します。
カスタムポリシーの作成ページに移動します。
RAM 管理者として RAM コンソールにログインします。
左側のナビゲーションウィンドウで、 を選択します。
[ポリシー] ページで、[ポリシーの作成] をクリックします。

[ポリシーの作成] ページで、[スクリプト] タブをクリックします。
ポリシードキュメントを入力し、[OK] をクリックします。
{ "Version": "1", "Statement": [ { "Action": [ "oss:ListBuckets", "oss:PutObject", "oss:ListObjectsV2", "oss:ListObjects", "oss:GetObject", "oss:CopyObject", "oss:DeleteObject", "oss:DeleteObjects", "oss:RestoreObject", "oss:CompleteMultipartUpload", "oss:ListMultipartUploads", "oss:AbortMultipartUpload", "oss:UploadPartCopy", "oss:UploadPart", "oss:GetBucketInfo", "oss:PostDataLakeStorageFileOperation", "oss:PostDataLakeStorageAdminOperation", "oss:GetBucketVersions", "oss:ListObjectVersions", "oss:DeleteObjectVersion" ], "Resource": [ "acs:oss:*:*:serverless-spark-test-resources/*", "acs:oss:*:*:serverless-spark-test-resources" ], "Effect": "Allow" }, { "Action": [ "dlf:AlterDatabase", "dlf:AlterTable", "dlf:ListCatalogs", "dlf:ListDatabases", "dlf:ListFunctions", "dlf:ListFunctionNames", "dlf:ListTables", "dlf:ListTableNames", "dlf:ListIcebergNamespaceDetails", "dlf:ListIcebergTableDetails", "dlf:ListIcebergSnapshots", "dlf:CreateDatabase", "dlf:Get*", "dlf:DeleteDatabase", "dlf:DropDatabase", "dlf:DropTable", "dlf:CreateTable", "dlf:CommitTable", "dlf:UpdateTable", "dlf:DeleteTable", "dlf:ListPartitions", "dlf:ListPartitionNames", "dlf:CreatePartition", "dlf:BatchCreatePartitions", "dlf:UpdateTableColumnStatistics", "dlf:DeleteTableColumnStatistics", "dlf:UpdatePartitionColumnStatistics", "dlf:DeletePartitionColumnStatistics", "dlf:UpdateDatabase", "dlf:BatchCreateTables", "dlf:BatchDeleteTables", "dlf:BatchUpdateTables", "dlf:BatchGetTables", "dlf:BatchUpdatePartitions", "dlf:BatchDeletePartitions", "dlf:BatchGetPartitions", "dlf:DeletePartition", "dlf:CreateFunction", "dlf:DeleteFunction", "dlf:UpdateFunction", "dlf:ListPartitionsByFilter", "dlf:DeltaGetPermissions", "dlf:UpdateCatalogSettings", "dlf:CreateLock", "dlf:UnLock", "dlf:AbortLock", "dlf:RefreshLock", "dlf:ListTableVersions", "dlf:CheckPermissions", "dlf:RenameTable", "dlf:RollbackTable" ], "Resource": "*", "Effect": "Allow" }, { "Action": [ "dlf-dss:CreateDatabase", "dlf-dss:CreateFunction", "dlf-dss:CreateTable", "dlf-dss:DropDatabase", "dlf-dss:DropFunction", "dlf-dss:DropTable", "dlf-dss:DescribeCatalog", "dlf-dss:DescribeDatabase", "dlf-dss:DescribeFunction", "dlf-dss:DescribeTable", "dlf-dss:AlterDatabase", "dlf-dss:AlterFunction", "dlf-dss:AlterTable", "dlf-dss:ListCatalogs", "dlf-dss:ListDatabases", "dlf-dss:ListTables", "dlf-dss:ListFunctions", "dlf-dss:CheckPermissions" ], "Resource": "*", "Effect": "Allow" }, { "Effect": "Allow", "Action": "dlf-auth:ActOnBehalfOfAnotherUser", "Resource": "*" } ] }アクセスポリシーの [名前] (例: test-serverless-spark) と [メモ] を入力し、[OK] をクリックします。
ポリシーには次の要素が含まれています:
Action: リソースに対して実行できる操作。この例では、OSS および DLF のデータを読み取り、ディレクトリをクエリする権限が付与されます。Resource: 権限付与が実行されるオブジェクト。この例では、DLF 内のすべてのオブジェクトと、serverless-spark-test-resources という名前の OSS バケット内のすべてのコンテンツにアクセスする権限が付与されます。serverless-spark-test-resourcesをお使いの OSS バケットの名前に置き換える必要があります。
アクセスポリシーの基本要素の詳細については、「アクセスポリシーの基本要素」をご参照ください。
RAM ロールを作成します。
ナビゲーションウィンドウで、 を選択します。
[ロール] ページで、[ロールの作成] をクリックします。
RAM ロールを作成します。
[ロールの作成] パネルで、次のパラメーターを設定し、[OK] をクリックします。
パラメーター
説明
信頼できるエンティティタイプ
[Alibaba Cloud サービス] を選択します。
信頼できるエンティティ名
spark.emr-serverless.aliyuncs.com
[ロール名] (例: test-serverless-spark-jobrun) を入力し、[OK] をクリックします。
RAM ロールに権限を付与します。
[ロール] ページで、作成したロールを見つけ、[アクション] 列の [権限の追加] をクリックします。
[権限の追加] パネルで、[カスタムポリシー] を選択し、作成したアクセスポシーを追加します。
[OK] をクリックします。
[閉じる] をクリックします。
ワークスペースを作成し、外部リソースにアクセスします。
E-MapReduce コンソールにログインします。
ナビゲーションウィンドウで、 を選択します。
ワークスペースの作成 をクリックし、次のパラメーターを設定します。パラメーターの詳細については、「ワークスペースの作成」をご参照ください。
ワークスペースの基本パス: 作成した RAM ロールに読み取りおよび書き込み権限がある OSS パスを選択します。
実行ロール: 作成した RAM ロールの名前 (例: test-serverless-spark-jobrun) を選択します。
ワークスペースが作成されたら、バッチジョブを実行して権限を確認します。詳細については、「JAR 開発のクイックスタート」をご参照ください。
権限のある OSS バケットにファイルをアップロードすると、タスクは期待どおりに実行されます。
権限のない OSS バケットにファイルをアップロードすると、タスクは失敗し、OSS パスにアクセスする権限がないことを示すエラーメッセージが表示されます。
その他のポリシー例
MaxCompute データへのアクセス
実行ロールに次のアクセスポリシーを追加します。
{
"Version": "1",
"Statement": [
{
"Effect": "Allow",
"Action": "odps:ActOnBehalfOfAnotherUser",
"Resource": [
"acs:odps:*:*:users/default/aliyun/*",
"acs:odps:*:*:users/default/ramuser/*",
"acs:odps:*:*:users/default/ramrole/*"
]
}
]
}KMS が有効になっている OSS バケットへのアクセス
実行ロールに次のアクセスポリシーを追加します。
{
"Version": "1",
"Statement": [
{
"Effect": "Allow",
"Action": [
"kms:List*",
"kms:DescribeKey",
"kms:GenerateDataKey",
"kms:Decrypt"
],
"Resource": "*"
}
]
}参考
異なる Alibaba Cloud アカウントに属する OSS リソースにアクセスするには、「Alibaba Cloud アカウント間で OSS リソースにアクセスするにはどうすればよいですか?」をご参照ください。
RAM ポリシーの一般的な例については、「RAM ポリシーの一般的な例」をご参照ください。