Amazon S3 への EMRFS リクエストの IAM ロールを設定する - Amazon EMR

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

Amazon S3 への EMRFS リクエストの IAM ロールを設定する

注記

このページで説明している EMRFS ロールマッピング機能は、Amazon EMR 6.15.0 で Amazon S3 Access Grants が導入されたことで改善されました。Amazon S3 のデータに対するスケーラブルなアクセスコントロールソリューションとして、Amazon EMR での S3 Access Grants の使用をお勧めします。

クラスターで実行されているアプリケーションが s3://mydata 形式を使用してデータを参照する場合、Amazon EMR は EMRFS を使用してリクエストを行います。EMRFS は Amazon S3 と対話するために、Amazon EC2 インスタンスプロファイルにアタッチされたアクセス許可ポリシーを引き受けます。アプリケーションを実行するユーザーやグループ、または Amazon S3 内のデータの場所に関係なく、同じ Amazon EC2 インスタンスプロファイルが使用されます。

クラスターに複数のユーザーがあり、各ユーザーに EMRFS を介して Amazon S3 のデータへの異なるレベルのアクセスが必要な場合は、EMRFS の IAM ロールを使用してセキュリティ設定を設定できます。EMRFS は、リクエスト元のユーザーやグループ、または Amazon S3 内のデータの場所に応じて、クラスター EC2 インスタンスの異なるサービスロールを引き受けることができます。EMRFS の IAM ロールごとに、Amazon S3 のデータにアクセスするための異なるアクセス許可を持つことができます。クラスター EC2 インスタンスのサービスロールの使用の詳細については、「クラスター EC2 インスタンスのサービスロール (EC2 インスタンスプロファイル)」を参照してください。

EMRFS のカスタム IAM ロールの使用は、Amazon EMR バージョン 5.10.0 以降でサポートされます。以前のバージョンを使用しているか、EMRFS の IAM ロールが提供するもの以上の要件がある場合は、代わりにカスタム認証情報プロバイダーを作成することができます。詳細については、「Authorizing access to EMRFS data in Amazon S3」を参照してください。

セキュリティ設定を使用して EMRFS の IAM を指定する場合は、ロールマッピングを設定します。各ロールマッピングは、識別子に対応する IAM ロールを指定します。これらの識別子は、EMRFS を介して Amazon S3 にアクセスするための基準を決定します。識別子は、ユーザー、グループ、またはデータの場所を示す Amazon S3 のプレフィックスです。EMRFS から Amazon S3 に行ったリクエストがアクセスの基準に一致すると、EMRFS では、リクエストに対応する IAM ロールをクラスター EC2 インスタンスに引き受けさせます。クラスター EC2 インスタンスのサービスロールにアタッチされた IAM アクセス許可の代わりに、そのロールにアタッチされた IAM アクセス許可が適用されます。

ロールマッピングのユーザーやグループは、クラスターで定義されている Hadoop ユーザーおよびグループです。ユーザーおよびグループは、EMRFS を使用するアプリケーション (例: YARN ユーザーの偽装) のコンテキストで EMRFS に渡されます。Amazon S3 プレフィックスは、任意の深さのバケット指定子 (例: s3://mybuckets3://mybucket/myproject/mydata) にすることができます。1 つのロールマッピング内で複数の識別子を指定できますが、すべてを同じタイプにする必要があります。

重要

EMRFS の IAM ロールは、アプリケーションのユーザー間でのアプリケーションレベルの分離をもたらします。ホスト上のユーザー間でのホストレベルの分離は提供されません。クラスターのアクセス権を持つユーザーは、ロールを引き受けるための分離をバイパスできます。

クラスターアプリケーションが EMRFS を介して Amazon S3 にリクエストを行うと、EMRFS は、セキュリティ設定に表示されるトップダウン順序でロールマッピングを評価します。EMRFS を介して行われた要求がどの識別子とも一致しない場合、EMRFS はクラスター EC2 インスタンスのサービスロールを使用するようフォールバックします。このため、このロールにアタッチされたポリシーで Amazon S3 へのアクセス許可を制限することをお勧めします。詳細については、「クラスター EC2 インスタンスのサービスロール (EC2 インスタンスプロファイル)」を参照してください。

ロールを設定する

EMRFS の IAM ロールを使用してセキュリティ設定をセットアップする前に、ロールおよびアクセス許可のポリシーを計画して作成し、ロールにアタッチします。詳細については、「IAM ユーザーガイド」の「EC2 インスタンスのロールの仕組み」を参照してください。アクセス許可ポリシーを作成する際は、まず EC2 のデフォルトの Amazon EMR ロールにアタッチする管理ポリシーを作成し、次にこのポリシーを要件に応じて編集することが推奨されます。デフォルトのロール名は EMR_EC2_DefaultRole で、編集するデフォルトの管理ポリシーは AmazonElasticMapReduceforEC2Role です。詳細については、「クラスター EC2 インスタンスのサービスロール (EC2 インスタンスプロファイル)」を参照してください。

ロールアクセス許可を引き受けるための信頼ポリシーの更新

EMRFS が使用する各ロールには、EC2 に対するクラスターの Amazon EMR ロールがそのロールを引き受けることを許可する信頼ポリシーが必要です。同様に、EC2 に対するクラスターの Amazon EMR ロールには、EMRFS ロールがそのロールを引き受けること許可する信頼ポリシーが必要です。

次の例では、信頼ポリシーが EMRFS のロールにアタッチされています。ステートメントは、EC2 のデフォルトの Amazon EMR ロールがこのロールを引き受けることを許可します。たとえば、2 つの架空の EMRFS ロール (EMRFSRole_FirstEMRFSRole_Second) がある場合、このポリシーステートメントは両方の信頼ポリシーにそれぞれ追加されます。

{ "Version":"2012-10-17", "Statement":[ { "Effect":"Allow", "Principal":{ "AWS":"arn:aws:iam::AWSAcctID:role/EMR_EC2_DefaultRole" }, "Action":"sts:AssumeRole" } ] }

また、次の信頼ポリシー例は EMR_EC2_DefaultRole に追加されて、2 つの架空の EMRFS ロールを引き受けることを許可します。

{ "Version":"2012-10-17", "Statement":[ { "Effect":"Allow", "Principal":{ "AWS": ["arn:aws:iam::AWSAcctID:role/EMRFSRole_First", "arn:aws:iam::AWSAcctID:role/EMRFSRole_Second"] }, "Action":"sts:AssumeRole" } ] }
IAM ロールの信頼ポリシーを更新するには

IAM コンソール (https://console.aws.amazon.com/iam/) を開きます。

  1. [ロール] を選択して [検索] にロール名を入力したら、その [ロール名] を選択します。

  2. [Trust relationships] (信頼関係)、[Edit trust relationship] (信頼関係の編集) の順に選択します。

  3. 上記のガイドラインに従って、[ポリシードキュメント] に応じて信頼ステートメントを追加し、[信頼ポリシーの更新] を選択します。

キーユーザーとしてロールを指定する

AWS KMS keyを使用して暗号化されている Amazon S3 の場所へのアクセスをロールで許可する場合は、そのロールがキーユーザーとして指定されていることを確認します。これにより、KMS キーを使用するアクセス許可がロールに付与されます。詳細については、「AWS Key Management Service デベロッパーガイド」の「AWS KMSでのキーポリシー」を参照してください。

EMRFS の IAM ロールを使用したセキュリティ設定のセットアップ

重要

指定した EMRFS の IAM ロールのいずれも適用されない場合、EMRFS は EC2 の Amazon EMR ロールにフォールバックします。クラスターを作成するときに、このロールをカスタマイズして、アプリケーションに適切な Amazon S3 へのアクセス権限を制限し、EMR_EC2_DefaultRole の代わりにこのカスタムロールを指定することを検討してください。詳細については、「IAM ロールのカスタマイズ」および「クラスター作成時にカスタムの IAM ロールを指定する」を参照してください。

コンソールを使用して Amazon S3 への EMRFS リクエストの IAM ロールを指定するには
  1. ロールのマッピングを指定するセキュリティ設定を作成します。

    1. Amazon EMR コンソールで [Security configurations] (セキュリティ設定) > [Create] (作成) を選択します。

    2. セキュリティ設定の [Name (名前)] を入力します。この名前を使用して、クラスターの作成時に使用するセキュリティ設定を指定します。

    3. [Use IAM roles for EMRFS requests to Amazon S3] (Amazon S3 への EMRFS のリクエストに IAM ロールを使用) を選択します。

    4. 適用する [IAM role] (IAM ロール) を選択し、[Basis for access] (アクセスの基礎) でリストから識別子タイプ ([Users] (ユーザー)、[Groups] (グループ)、または [S3 prefixes] (S3 プレフィックス) を選択して、対応する識別子を入力します。複数の識別子を使用する場合は、カンマでスペースを入れずに区切ります。各識別子の種類の詳細については、下記の「JSON configuration reference」を参照してください。

    5. [Add role (ロールの追加)] を選択して、前の手順で説明したように追加のロールマッピングを設定します。

    6. 必要に応じて他のセキュリティ設定オプションを設定し、[Create (作成)] を選択します。詳細については、「セキュリティ設定を作成する」を参照してください。

  2. クラスターの作成時に上記で作成したセキュリティ設定を指定します。詳細については、「クラスターのセキュリティ設定を指定する」を参照してください。

を使用して Amazon S3 への EMRFS リクエストの IAM ロールを指定するには AWS CLI
  1. aws emr create-security-configuration コマンドを使用して、セキュリティ設定の名前とセキュリティ設定の詳細を JSON 形式で指定します。

    次のコマンド例は、EMRFS_Roles_Security_Configuration という名前のセキュリティ設定を作成します。これは、MyEmrfsSecConfig.json ファイルの JSON 構造に基づいており、コマンドが実行されるのと同じディレクトリに保存されます。

    aws emr create-security-configuration --name EMRFS_Roles_Security_Configuration --security-configuration file://MyEmrFsSecConfig.json.

    次の MyEmrFsSecConfig.json ファイルの構造のガイドラインを使用します。他のセキュリティ設定オプションの構造と共に、この構造を指定することができます。詳細については、「セキュリティ設定を作成する」を参照してください。

    以下は、セキュリティ設定内の EMRFS のカスタム IAM ロールを指定するための JSON スニペットの例です。3 つの異なる識別子タイプのロールマッピングと、パラメータリファレンスを示します。

    { "AuthorizationConfiguration": { "EmrFsConfiguration": { "RoleMappings": [{ "Role": "arn:aws:iam::123456789101:role/allow_EMRFS_access_for_user1", "IdentifierType": "User", "Identifiers": [ "user1" ] },{ "Role": "arn:aws:iam::123456789101:role/allow_EMRFS_access_to_MyBuckets", "IdentifierType": "Prefix", "Identifiers": [ "s3://MyBucket/","s3://MyOtherBucket/" ] },{ "Role": "arn:aws:iam::123456789101:role/allow_EMRFS_access_for_AdminGroup", "IdentifierType": "Group", "Identifiers": [ "AdminGroup" ] }] } } }
    パラメータ 説明

    "AuthorizationConfiguration":

    必須。

    "EmrFsConfiguration":

    必須。ロールマッピングが含まれます。

      "RoleMappings":

    必須。1 つ以上のロールマッピング定義が含まれます。ロールのマッピングは、表示順に上から下に評価されます。Amazon S3 のデータに対する EMRFS 呼び出しでロールマッピングが true と評価された場合、それ以上のロールマッピングは評価されず、EMRFS はリクエストに指定された IAM ロールを使用します。ロールマッピングは、以下の必須パラメータで構成されます。

       "Role":

    IAM ロールの ARN 識別子を形式 arn:aws:iam::account-id:role/role-name で指定します。これは、Amazon S3 への EMRFS リクエストが、指定された Identifiers のいずれかに一致した場合に Amazon EMR が引き受ける IAM ロールです。

       "IdentifierType":

    次のいずれかを指定できます。

    • "User" は、識別子が 1 人以上の Hadoop ユーザーであることを指定します。これは Linux アカウントユーザーまたは Kerberos プリンシパルです。EMRFS リクエストが指定のユーザーから送信されると、IAM ロールが引き受けられます。

    • "Prefix" は、識別子が Amazon S3 の場所であることを指定します。IAM ロールは、指定されたプレフィックスを持つ場所への呼び出しに対して引き受けられます。例えば、プレフィックス s3://mybucket/ は、 s3://mybucket/mydir および s3://mybucket/yetanotherdir に一致します。

    • "Group" は、識別子が 1 つ以上の Hadoop グループであることを指定します。IAM ロールは、リクエストが指定されたグループのユーザーから発信された場合に引き受けられます。

       "Identifiers":

    適切な識別子タイプの 1 つ以上の識別子を指定します。複数の識別子は、スペースを入れずにカンマで区切ります。

  2. aws emr create-cluster コマンドを使用してクラスターを作成し、前のステップで作成したセキュリティ設定を指定します。

    次の例では、Hadoop アプリケーションがインストールされているデフォルトのコアでクラスターを作成します。クラスターは、上記で EMRFS_Roles_Security_Configuration として作成されたセキュリティ設定を使用し、さらに EC2 のカスタム Amazon EMR ロール EC2_Role_EMR_Restrict_S3 (--ec2-attributes パラメータの InstanceProfile 引数を使用して指定) も使用します。

    注記

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

    aws emr create-cluster --name MyEmrFsS3RolesCluster \ --release-label emr-7.1.0 --ec2-attributes InstanceProfile=EC2_Role_EMR_Restrict_S3,KeyName=MyKey \ --instance-type m5.xlarge --instance-count 3 \ --security-configuration EMRFS_Roles_Security_Configuration