E-MapReduce(EMR)では、EMR コンソールでクラスターを作成する際に、[基本設定] ステップの [詳細設定] セクションでカスタム ECS アプリケーション ロールを設定できます。 このロールを使用して、パスワードなしモードで Alibaba Cloud アカウントの他のクラウド リソース(オブジェクト ストレージ サービス(OSS)やログ サービスなど)にアクセスできます。 このトピックでは、カスタム ECS アプリケーション ロールの作成方法と使用方法について説明します。
背景情報
- クラスターは、指定した OSS データ ディレクトリにのみアクセスできます。
- クラスターは、指定した外部リソースにアクセスできます。
前提条件
手順
ステップ 1:ポリシーを作成する
[ポリシーの作成] ページに移動します。
Alibaba Cloud アカウントを使用して、RAM コンソール にログインします。
左側のナビゲーション ペインで、 を選択します。
[ポリシー] ページで、[ポリシーの作成] をクリックします。
[ポリシーの作成] ページで、[JSON] タブをクリックします。
ポリシー ドキュメントを入力し、[OK] をクリックします。
スクリプト エディターに次のポリシー ドキュメントを入力します。
{ "Version": "1", "Statement": [ { "Action": [ "oss:GetObject", // OSS からオブジェクトを取得するアクション "oss:ListObjects" // OSS オブジェクトを一覧表示するアクション ], "Resource": [ "acs:oss:*:*:emr-logs2", // OSS バケット emr-logs2 "acs:oss:*:*:emr-logs2/*" // OSS バケット emr-logs2 内のオブジェクト ], "Effect": "Allow" } ] }
説明ポリシーの要素:
Action:リソースに対するアクション。 この例では、OSS データの読み取りとクエリを実行するための権限が付与されます。
Resource:権限が付与されるリソース。 この例では、OSS バケット emr-logs2 とこの OSS バケット内のオブジェクトがリソースとして使用されます。
ポリシーの基本要素の詳細については、ポリシー要素 を参照してください。
基本情報セクションの [名前] パラメーターを構成して、ポリシー名を指定します。
この例では、名前は test-emr です。
[OK] をクリックします。
ステップ 2:RAM ロールを作成する
RAM コンソールの左側のナビゲーション ペインで、 を選択します。
[ロール] ページで、[ロールの作成] をクリックします。
RAM ロールを作成します。
ロールタイプの選択手順で、信頼できるエンティティの選択で [alibaba Cloudサービス] を選択します。
[次へ] をクリックします。
[ロールの設定] ステップで、パラメーターを設定します。
パラメーター
説明
RAM ロール名
この例では、名前は test-emr です。
信頼できるサービスの選択
ドロップダウン リストから [elastic Compute Service] を選択します。
[OK] をクリックします。
オプション。 信頼できるサービスを変更します。
重要EMR V5.X 以降、EMR V4.5 以降のマイナー バージョン、または EMR V3.32 以降のマイナー バージョンのクラスターを作成する場合は、この手順をスキップしてください。
[ロール] ページで、作成した RAM ロールの [名前] をクリックします。
[信頼ポリシー] タブをクリックします。
[信頼ポリシーの編集] をクリックします。
ecs.aliyuncs.com
をemr.aliyuncs.com
に変更します。[信頼ポリシー ドキュメントの保存] をクリックします。
必要な権限を追加します。
[ロール] ページで、作成した RAM ロール を見つけ、[アクション] 列の [権限の付与] をクリックします。
[権限の付与] パネルで、[ポリシー] セクションのドロップダウンリストから [カスタムポリシー] を選択し、手順 1 で作成したポリシーを選択します。
[権限の付与] をクリックします。
[閉じる] をクリックします。
ステップ 3:クラスターを作成し、外部リソースにアクセスする
EMR コンソール にログインします。 左側のナビゲーション ペインで、[ECS 上の EMR] をクリックします。
上部のナビゲーション バーで、クラスターが存在するリージョンを選択し、ビジネス要件に基づいてリソース グループを選択します。
[ECS 上の EMR] ページで、[クラスターの作成] をクリックします。 詳細設定[基本設定] ステップの 手順 2:RAM ロールの作成クラスターを作成する セクションで、 で作成した RAM ロールの名前を入力します。 詳細については、 を参照してください。
クラスターが作成された後、SSH を使用してクラスターにログインします。 詳細については、クラスターにログインする を参照してください。
次のコマンドを実行して、ポリシーで指定された OSS バケットにアクセスできるかどうかを確認します。
hdfs dfs -ls oss://<yourBucketName>/
説明コマンドの <yourBucketName> を OSS バケットの名前に置き換えます。
バケットにアクセスする権限がない場合は、OSS バケットへのアクセスが拒否されます。
バケットにアクセスする権限がある場合は、OSS バケットへのアクセスが許可されます。
FAQ
- Q:クラスターの作成時に NoPermission メッセージが表示された場合はどうすればよいですか?A:問題を解決するには、次の操作を順番に実行します。
- クラスターの作成と ECS アプリケーション ロールの変更に使用した RAM ユーザーに、クラスターの作成と ECS アプリケーション ロールの変更を行う権限があるかどうかを確認します。 RAM ユーザーに AliyunEMRDevelopAccess 権限が付与されている場合は、権限を AliyunEMRFullAccess に変更する必要があります。
- クラスターの作成時に指定した ECS アプリケーション ロールの名前が有効かどうかを確認します。
- 信頼ポリシーが emr.aliyuncs.com に変更されているかどうかを確認します。
Q:Hadoop 分散ファイル システム(HDFS)から OSS バケットにアクセスできない場合はどうすればよいですか?
A:問題を解決するには、次の操作を順番に実行します。
アクセスする OSS バケットがクラスターと同じリージョンにあるかどうかを確認します。 OSS バケットとクラスターが同じリージョンにない場合は、アクセス リンクに OSS バケットのエンドポイントを追加する必要があります。
アクセスする OSS バケットが、作成されたポリシーで指定されたリソースの 1 つであるかどうかを確認します。 OSS バケットがリソースの 1 つでない場合は、ポリシーを変更します。
OSS バケットの関連する権限が OSS コンソールで設定されているかどうかを確認します。 権限が設定されている場合は、OSS コンソールの設定をキャンセルし、ポリシーで Action を指定して権限を設定する必要があります。