カスタム ECS アプリケーションロールを EMR クラスターにアタッチすることで、クラスターのノードは認証情報を保存することなく、ご利用の Alibaba Cloud アカウント内の他のクラウドリソース (Object Storage Service (OSS) や Simple Log Service (SLS) など) にアクセスできます。ロールにアタッチされたポリシーは、クラスターがアクセスできるリソースと操作を正確に定義するため、きめ細かな制御が可能になります。
EMR V5.x 以降、EMR V4.5 より後のマイナーバージョン、または EMR V3.32 より後のマイナーバージョンを実行するクラスターを作成する場合、ステップ 2 の信頼ポリシーの更新は不要です。これより前のバージョンでは、信頼できるサービスを Elastic Compute Service (ECS) から EMR に変更する必要があります。詳細については、「ステップ 2、サブステップ 4」をご参照ください。
前提条件
開始する前に、以下が準備できていることを確認してください。
クラスターが作成済みであること。詳細については、「クラスターの作成」をご参照ください。
Alibaba Cloud アカウントに割り当てられたロール — Alibaba Cloud アカウントにロールを割り当てるをご参照ください
EMR クラスターを作成する予定のリージョンと同じリージョンに OSS バケットが存在すること。詳細については、「バケットの作成」をご参照ください。
概要
設定には 3 つのステップが含まれます:
ポリシーの作成 — クラスターがアクセスできるリソースと実行できる操作を定義します。
RAM ロールの作成 — ECS が引き受けることができるロールを作成し、ステップ 1 のポリシーをアタッチします。
クラスターの作成とアクセスの検証 — クラスター作成時に RAM ロールを関連付け、アクセスが機能することを確認します。
ステップ 1:ポリシーの作成
Alibaba Cloud アカウントで Resource Access Management (RAM) コンソールにログインします。
左側のナビゲーションウィンドウで、[権限] > [ポリシー] を選択し、[ポリシーの作成] をクリックします。
[ポリシーの作成] ページで、[JSON] タブをクリックし、エディターにポリシードキュメントを入力します。次の例では、特定の OSS バケットへの読み取り専用アクセスを許可します:
{ "Version": "1", "Statement": [ { "Action": [ "oss:GetObject", "oss:ListObjects" ], "Resource": [ "acs:oss:*:*:examplebucket", "acs:oss:*:*:examplebucket/*" ], "Effect": "Allow" } ] }examplebucketを実際の OSS バケット名に置き換えてください。Resourceフィールドには 2 つのエントリが必要です。1 つはバケット自体 (examplebucket) で、もう 1 つはその中のすべてのオブジェクト (examplebucket/*) です。Actionフィールドは読み取り専用アクセスを許可します。oss:GetObjectはオブジェクトのダウンロードを、oss:ListObjectsはオブジェクトのリスト表示を許可します。ポリシーの構文と利用可能な操作の詳細については、「ポリシー要素」をご参照ください。[OK] をクリックし、[基本情報] セクションで [名前] フィールドを設定します。この例では、名前は
test-emrです。[OK] をクリックします。
ステップ 2:RAM ロールの作成
RAM コンソールの左側のナビゲーションウィンドウで、[ID] > [ロール] を選択し、[ロールの作成] をクリックします。
[ロールタイプの選択] ステップで、[信頼できるエンティティを選択] を [Alibaba Cloud サービス] に設定し、[次へ] をクリックします。
[ロールの設定] ステップで、次のパラメーターを設定します。[OK] をクリックします。
パラメーター 値 RAM ロール名 ロールの名前を入力します。この例では test-emr信頼できるサービスの選択 [Elastic Compute Service] (任意) 信頼ポリシーの更新。これより前のバージョンでは、信頼できるサービスを ECS から EMR に変更する必要があります。この変更を行わないと、クラスターの作成が NoPermission エラーで失敗します。
重要EMR V5.x 以降、EMR V4.5 より後のマイナーバージョン、または EMR V3.32 より後のマイナーバージョンを実行するクラスターを作成する場合、このステップはスキップしてください。これらのバージョンではこの変更は不要です。
[ロール] ページで、作成した RAM ロールの名前をクリックします。
[信頼ポリシー] タブをクリックし、[信頼ポリシーの編集] をクリックします。
ecs.aliyuncs.comをemr.aliyuncs.comに変更します。
[信頼ポリシーのドキュメントを保存] をクリックします。
ロールに必要な権限を付与します:
[ロール] ページで、作成したロールを見つけ、[操作] 列の [権限の付与] をクリックします。
[権限の付与] パネルで、[ポリシー] セクションのドロップダウンリストから [カスタムポリシー] を選択し、ステップ 1 で作成したポリシーを選択します。
[権限の付与] をクリックし、[閉じる] をクリックします。
ステップ 3:クラスターの作成とアクセスの検証
EMR コンソールにログインします。左側のナビゲーションウィンドウで、[EMR on ECS] をクリックします。
上部のナビゲーションバーで、クラスターを配置するリージョンを選択し、リソースグループを選択します。
[クラスターの作成] をクリックします。[基本設定] ステップの [詳細設定] セクションで、ステップ 2 で作成した RAM ロールの名前を入力します。その他のクラスター構成オプションについては、「クラスターの作成」をご参照ください。

クラスターが作成されたら、SSH を使用してクラスターにログインします。詳細については、「クラスターへのログイン」をご参照ください。
次のコマンドを実行して、クラスターがポリシーで指定された OSS バケットにアクセスできることを確認します:
hdfs dfs -ls oss://<yourBucketName>/<yourBucketName>を実際の OSS バケット名に置き換えてください。バケットのコンテンツがリスト表示されれば、アクセスは正常に機能しています。
アクセスが拒否された場合、クラスターにはバケットへのアクセス権限がありません。以下の「よくある質問」をご参照ください。
よくある質問
クラスター作成時に NoPermission エラーが表示されるのはなぜですか?
次の項目を順番に確認してください:
クラスターを作成する RAM ユーザーには
AliyunEMRFullAccessが必要です。ユーザーがAliyunEMRDevelopAccessを持っている場合は、AliyunEMRFullAccessに変更してください。指定した ECS アプリケーションロール名が有効であり、作成した RAM ロールと一致することを確認してください。
信頼ポリシーの更新が必要な EMR バージョン (EMR V5.x、EMR V4.5、または EMR V3.32 より前) を使用している場合は、信頼ポリシーで
ecs.aliyuncs.comがemr.aliyuncs.comに変更されていることを確認してください。
Hadoop 分散ファイルシステム (HDFS) から OSS バケットにアクセスできないのはなぜですか?
次の項目を順番に確認してください:
OSS バケットは EMR クラスターと同じリージョンにある必要があります。異なるリージョンにある場合は、バケットのエンドポイントを接続文字列に追加してください。
バケットはポリシーのリソースとしてリストされている必要があります。リストされていない場合は、ポリシーの
Resourceフィールドを更新して含めてください。バケットレベルの権限が OSS コンソールで直接設定されている場合、それらの設定がポリシーと競合する可能性があります。OSS コンソールの権限を削除し、RAM ポリシーの
Actionフィールドを介してのみアクセスを管理してください。