EMRFS のクロスアカウントアクセスを設定するにはどうすればよいですか?

最終更新日: 2020 年 1 月 17 日

EMR ファイルシステム (EMRFS) を使用して、別の AWS アカウントにある Amazon Simple Storage Service (Amazon S3) バケットに書き込みたいと考えています。

簡単な説明

以下のオプションのいずれかを使用して、EMRFS のクロスアカウントアクセスを設定します。

  • Amazon EMR アカウントへのアクセスを許可する、書き込み先バケットに対するバケットポリシーを追加します。これが、最も簡単なオプションです。ただし、書き込み先アカウントは、EMRFS が書き込み先バケットに書き込むオブジェクトを所有していません。
  • カスタム認証情報プロバイダーを使用します。このオプションでは、書き込み先バケットのアカウントで AWS Identity and Access Management (IAM) ロールを引き受けることができます。つまり、書き込み先アカウントは、EMRFS が書き込み先バケットに書き込むオブジェクトを所有します。
  • セキュリティ設定でロールマッピングを使用します。また、このオプションでは、EMRFS が書き込み先バケットのアカウントで IAM ロールを引き受けることも可能です。これは、この記事で説明した方法です。

解決方法

セキュリティ設定を使用して EMRFS の IAM ロールを指定する場合は、ロールマッピングを設定します。ロールマッピングは、識別子に対応する IAM ロールを指定します。このシナリオでは、識別子は EMRFS でアクセスする Amazon S3 プレフィックスです。識別子は、EMRFS を通じて Amazon S3 にアクセスするための基準を決定します。詳細については、Amazon S3 への EMRFS リクエストの IAM ロールを設定するを参照してください。

ロールマッピングを使用したセキュリティ設定を使用して EMRFS のクロスアカウントアクセスを作成するには、以下の手順を実行します。

1.    書き込み先アカウントで IAM ロールを作成します。これは、EMR クラスターから引き受けるロールです。

2.    次のような信頼ポリシーを追加します。信頼ポリシーでは、EMR のAmazon Elastic Compute Cloud (Amazon EC2) ロールが、手順 1 で作成したロールを引き受けることを許可する必要があります。詳細については、ロールを設定するを参照してください。

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

3.    AWS コマンドラインインターフェイス (AWS CLI) を使用して、ロールマッピングでセキュリティ設定を作成します。ロールマッピングは、書き込み先アカウントのロール (手順 1 で作成したロール) を指定する必要があります。

注意: セキュリティ設定を作成するには、AWS CLI または SDK を使用する必要があります。ロールを引き受けるアクセス許可がある場合でも、コンソールには他のアカウントのロールは一覧表示されません。

ロールマッピング用に以下のような JSON オブジェクトを提供します。例の以下の値を置き換えます。
arn:aws:iam::DestinationAcctID:role/role_in_destination_account: 手順 1 で作成したロールの Amazon リソースネーム (ARN)
s3://awsexamplebucket/: EMRFS が書き込むバケット。

{
  "AuthorizationConfiguration": {
    "EmrFsConfiguration": {
      "RoleMappings": [{
        "Role": "arn:aws:iam::DestinationAcctID:role/role_in_destination_account",
        "IdentifierType": "Prefix",
        "Identifiers": ["s3://awsexamplebucket/"]
      }]
    }
  }
}

4.    IAM ポリシーを作成し、EMR EC2 インスタンスプロファイル (EMR_EC2_DefaultRoleなど) にアタッチします。

次のポリシー例は、AWS Security Token Service (STS) がすべてのロールを引き受けることを許可します。少なくとも、ポリシーでは、STS が手順 1 で作成したロールを引き受けることを許可する必要があります。詳細については、一時的なセキュリティ認証情報を作成するためのアクセス許可を付与するを参照してください。

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": "sts:AssumeRole",
            "Resource": "*"
        }
    ]
}

5.    EMR クラスターを起動し、手順 3 で作成したセキュリティ設定を指定します。

注意: 書き込み先バケットで AWS Key Management Service (AWS KMS) によるサーバー側の暗号化を使用する場合、引き受けたロールは KMS カスタマーマスターキー (CMK) のキーユーザーである必要があります。ロールが KMS CMK にリストされていない場合、バケットにアクセスすることはできません。


この記事は役に立ちましたか?

改善できることはありますか?


さらにサポートが必要な場合