Amazon EMR
管理ガイド

Amazon S3 の EMRFS データへのアクセスを許可する

デフォルトでは、EC2 の EMR ロールは、Amazon S3 で EMRFS データにアクセスする権限を決定します。EMRFS を介して要求を行うユーザーまたはグループに関係なく、このロールにアタッチされる IAM ポリシーが適用されます。デフォルト: EMR_EC2_DefaultRole。詳細については、「クラスター EC2 インスタンスのサービスロール (EC2 インスタンスプロファイル)」を参照してください。

Amazon EMR リリースバージョン 5.10.0 以降では、セキュリティ設定を使用して、EMRFS の IAM ロールを指定できます。これにより、複数のユーザーを持つクラスターに対して Amazon S3 への EMRFS リクエストのアクセス権限をカスタマイズできます。Amazon S3 のプレフィックスに基づいて、さまざまなユーザーとグループ、および異なる Amazon S3 バケットの場所に異なる IAM ロールを指定できます。EMRFS がユーザー、グループ、または指定した場所に一致する Amazon S3 リクエストを行うと、クラスターは EC2 の EMR ロールの代わりに、ユーザーが指定する対応するロールを使用します。詳細については、「Amazon S3 への EMRFS リクエストの IAM ロールを設定する」を参照してください。

また、Amazon EMR ソリューションが EMRFS の IAM ロールで提供される以上のものを求めている場合、カスタム認証情報プロバイダーのクラスを定義して Amazon S3 の EMRFS データへのアクセスをカスタマイズできます。

Amazon S3 の EMRFS データのカスタム認証情報プロバイダーを作成する

カスタム認証情報プロバイダーを作成するには、AWSCredentialsProvider クラスと Hadoop Configurable クラスを実装します。

この方法の詳細については、AWS ビッグデータブログの「EMRFS を使って別の AWS アカウントのデータを安全に分析する」を参照してください。このブログ投稿には、IAM ロールの作成からクラスターの起動まで、エンドツーエンドのプロセスを説明するチュートリアルが含まれています。また、カスタム認証情報プロバイダークラスを実装する Java コードの例も提供しています。

基本的なステップは次のとおりです。

カスタム認証情報プロバイダーを指定するには

  1. JAR ファイルとしてコンパイルされる、カスタム認証情報プロバイダークラスを作成します。

  2. ブートストラップアクションとしてスクリプトを実行し、カスタム認証情報プロバイダーの JAR ファイルを、クラスターのマスターノードの /usr/share/aws/emr/emrfs/auxlib の場所にコピーします。ブートストラップアクションの詳細については、「(オプション) 追加のソフトウェアをインストールするためのブートストラップアクションの作成」を参照してください。

  3. emrfs-site 分類をカスタマイズして、JAR ファイルで実装するクラスを指定します。アプリケーションをカスタマイズする設定オブジェクトの指定方法の詳細については、Amazon EMR リリース ガイドの「アプリケーションの設定」を参照してください。

    次の例では、共通設定パラメータを使って Hive クラスターを起動する create-cluster コマンドを示しています。さらに次のものが含まれています。

    • スクリプトを実行するブートストラップアクション copy_jar_file.sh。これは Amazon S3 の mybucket に保存されます。

    • JAR ファイルで emrfs-site として定義されたカスタム認証情報プロバイダーを指定する MyCustomCredentialsProvider 分類

    注記

    読みやすくするため、Linux の行連結文字 (\) を含めています。Linux コマンドでは、これらの文字は削除することも、使用することもできます。Windows の場合は、削除するか、キャレット (^) で置き換えます。

    aws emr create-cluster --applications Name=Hive \ --bootstrap-actions '[{"Path":"s3://mybucket/copy_jar_file.sh","Name":"Custom action"}]' \ --ec2-attributes '{"KeyName":"MyKeyPair","InstanceProfile":"EMR_EC2_DefaultRole",\ "SubnetId":"subnet-xxxxxxxx","EmrManagedSlaveSecurityGroup":"sg-xxxxxxxx",\ "EmrManagedMasterSecurityGroup":"sg-xxxxxxxx"}' \ --service-role EMR_DefaultRole --enable-debugging --release-label emr-5.27.0 \ --log-uri 's3n://my-emr-log-bucket/' --name 'test-awscredentialsprovider-emrfs' \ --instance-type=m5.xlarge --instance-count 3 \ --configurations '[{"Classification":"emrfs-site",\ "Properties":{"fs.s3.customAWSCredentialsProvider":"MyAWSCredentialsProviderWithUri"},\ "Configurations":[]}]'