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

所要時間2分
0

Amazon EMR File System (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 にアクセスするための基準を決定します。識別子は、ユーザー、グループ、またはデータの場所を示す Amazon S3 プレフィックスである場合があります。EMRFS がアクセスの基準に一致するリクエストを行うと、EMRFS はクラスター EC2 インスタンスにリクエストに対応する IAM ロールを引き受けさせます。クラスター EC2 インスタンスのサービスロールにアタッチされた IAM 許可ではなく、そのロールにアタッチされた IAM 許可が適用されます。詳細については、Configure IAM roles for EMRFS requests to Amazon S3 を参照してください。

次の手順では、EMRFS を介してアクセスされる Amazon S3 プレフィックスとして識別子を指定します。ロールマッピングを用いたセキュリティ設定を使用して EMRFS のクロスアカウントアクセスを作成するには、以下の操作を実行します。

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

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

{
  "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 を使用する必要があります。ロールを引き受けるための許可がある場合でも、コンソールには他のアカウントのロールは一覧表示されません。AWS CLI コマンドの実行時にエラーが発生した場合は、AWS CLI の最新バージョンを使用していることを確認してください

ロールマッピング用に以下のような JSON オブジェクトを提供します。例の以下の値を置き換えます。

arn:aws:iam::DestinationAcctID:role/role_in_destination_account: 手順 1 で作成したロールの Amazon リソースネーム (ARN)
s3://doc-example-bucket/: EMRFS が書き込むバケット

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

4.    IAM ポリシーを作成し、Amazon 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) によるサーバー側の暗号化を使用する場合は、引き受けられたロールが AWS KMS カスタマーマネージドキーのキーユーザーである必要があります。ロールが AWS KMS キーにリストされていない場合、バケットにアクセスすることはできません。


関連情報

セキュリティ設定を作成する

AWS公式
AWS公式更新しました 2年前