チュートリアル: Active Directory ドメインを使用したクロス領域信頼の設定 - Amazon EMR

チュートリアル: Active Directory ドメインを使用したクロス領域信頼の設定

クロス領域信頼をセットアップする際、別の Kerberos 領域のプリンシパル (通常はユーザー) が、EMR クラスターのアプリケーションコンポーネントを認証できるようにします。クラスター専用 KDC (キー配布センター) は、両方の KDC に存在するクロス領域のプリンシパルを使用して、他の KDC で信頼関係を確立します。プリンシパル名とパスワードが正確に一致しています。

クロス領域信頼では、KDC がネットワーク経由で相互に到達し、相互のドメイン名を解決できる必要があります。以下に、必要な接続とドメイン名の解決を行うネットワークステップの例と合わせて、EC2 インスタンスとして実行されている Microsoft AD ドメインコントローラーを使用してクロス領域の信頼関係を確立するステップを示します。KDC 間の必要なネットワークトラフィックを許可するすべてのネットワークのセットアップは許容範囲内です。

必要に応じて、1 つのクラスター上で KDC を使用して Active Directory でクロス領域信頼を確立したら、異なるセキュリティ設定を使用して別のクラスターを作成し、最初のクラスターの KDC を外部 KDC として参照することができます。セキュリティグループ設定およびクラスターのセットアップの例については、「Active Directory クロス領域信頼を使用した外部のクラスター KDC」を参照してください。

Kerberos および KDC に対する Amazon EMR サポート、および MIT Kerberos ドキュメントへのリンクの詳細については、「Amazon EMR での認証に Kerberos を使用する」を参照してください。

重要

Amazon EMR は、AWS Directory Service for Microsoft Active Directory を使用したクロス領域信頼をサポートしません。

ステップ 1: VPC とサブネットをセットアップする

ステップ 2: Active Directory ドメインコントローラーの起動とインストール

ステップ 3: EMR クラスターのドメインにアカウントを追加する

ステップ 4: Active Directory ドメインコントローラーで受信の信頼を設定する

ステップ 5: DHCP オプションセットを使用して VPC DNS サーバーとして Active Directory ドメインコントローラーを指定する

ステップ 6: Kerberos 認証済みの EMR クラスターを起動する

ステップ 7: HDFS ユーザーを作成して、Active Directory アカウントのクラスターに対するアクセス許可を設定する

ステップ 1: VPC とサブネットをセットアップする

クラスター専用 KDC が Active Directory ドメインコントローラーに到達し、ドメイン名を解決できるように、VPC およびサブネットの作成手順を以下に示します。これらのステップでは、DHCP オプションセットのドメイン名サーバーとして Active Directory ドメインコントローラーを参照し、ドメイン名を解決します。詳細については、「ステップ 5: DHCP オプションセットを使用して VPC DNS サーバーとして Active Directory ドメインコントローラーを指定する」を参照してください。

KDC と Active Directory ドメインコントローラーは、相互のドメイン名を解決できる必要があります。これにより、Amazon EMR はコンピュータをドメインに参加させ、クラスターインスタンス上で対応する Linux アカウントおよび SSH パラメータを自動的に設定することができます。

Amazon EMR でドメイン名を解決できない場合は、Active Directory ドメインコントローラーの IP アドレスを使用して信頼を参照できます。ただし、Linux アカウントの追加、クラスター専用 KDC への対応するプリンシパルの追加、SSH の設定は手動で行う必要があります。

VPC とサブネットをセットアップするには
  1. 1 つのパブリックサブネットを持つ Amazon VPC を作成する 詳細については、「Amazon VPC 入門ガイド」の「ステップ 1: VPC の作成」を参照してください。

    重要

    Microsoft Active Directory ドメインコントローラーを使用している場合は、すべての IPv4 アドレスが 9 文字未満 (例: 10.0.0.0/16) になるように EMR クラスターの CIDR ブロックを選択します。これは、コンピュータが Active Directory ディレクトリに参加する際にクラスターコンピュータの DNS 名が使用されるためです。AWS は、長い IP アドレスが 15 文字より長い DNS 名になることができるように、IPv4 アドレスに基づいて DNS ホスト名を割り当てます。Active Directory には、結合されるコンピュータ名の登録に 15 文字の制限があるため、長い場合は切り捨てられます。これが原因で、予測できないエラーが発生することがあります。

  2. VPC に割り当てられているデフォルトの DHCP オプションセットを削除します。詳細については、「DHCP オプションを使用しないように VPC を変更する」を参照してください。Active Directory ドメインコントローラーを DNS サーバーとして指定する新しい設定を後で追加します。

  3. VPC に対して DNS サポートが有効になっていること、つまり、DNS ホスト名および DNS 解決がいずれも有効であることを確認します。デフォルトでは有効化されています。詳細については、「VPC の DNS サポートを更新する」を参照してください。

  4. VPC にインターネットゲートウェイがアタッチされていることを確認します。この状態がデフォルトです。詳細については、「インターネットゲートウェイの作成とアタッチ」を参照してください。

    注記

    VPC 向けに新しいドメインコントローラーを確立しているため、この例ではインターネットゲートウェイが使用されます。お客様のアプリケーションでは、インターネットゲートウェイが必要ではない場合があります。唯一の要件は、クラスター専用 KDC が Active Directory ドメインコントローラーにアクセスできることです。

  5. カスタムルートテーブルを作成して、インターネットゲートウェイをターゲットにしたルートを追加し、サブネットにアタッチします。詳細については、「カスタムルートテーブルを作成する」を参照してください。

  6. ドメインコントローラーで EC2 インスタンスを起動する場合は、静的なパブリック IPv4 アドレスを使用して RDP で接続する必要があります。これを行う最も簡単な方法は、サブネットを自動割り当てパブリック IPv4 アドレスに設定することです。サブネットを作成する際、これはデフォルトで設定されていません。詳細については、「サブネットのパブリック IPv4 アドレス属性を変更する」を参照してください。インスタンスを起動する際、オプションでそのアドレスを割り当てることができます。詳細については、「インスタンス起動時のパブリック IPv4 アドレスの割り当て」を参照してください。

  7. 終了したら、VPC とサブネット ID を書きとめておきます。後に Active Directory ドメインコントローラーおよびクラスターを起動する際に使用します。

ステップ 2: Active Directory ドメインコントローラーの起動とインストール

  1. Microsoft Windows Server 2016 Base の AMI に基づき、EC2 インスタンスを起動します。m4.xlarge またはそれ以上のインスタンスタイプの使用をお勧めします。詳細については、「Amazon EC2 ユーザーガイド」の「AWS Marketplace インスタンスを起動する」を参照してください。

  2. EC2 インスタンスに関連付けられているセキュリティグループのグループ ID をメモします。この情報は「ステップ 6: Kerberos 認証済みの EMR クラスターを起動する」に必要です。sg-012xrlmdomain345 を使用します。または、EMR クラスターとこのインスタンス用に、それらの間のトラフィックを許可する異なるセキュリティグループを指定できます。詳細については、「Amazon EC2 ユーザーガイド」の「Amazon EC2 security groups for Linux instances」(Linux インスタンス用の Amazon EC2 セキュリティグループ) を参照してください。

  3. RDP を使用して EC2 インスタンスに接続します。詳細については、「Amazon EC2 ユーザーガイド」の「Windows インスタンスへの接続」を参照してください。

  4. サーバーで Active Directory ドメインサービスの役割をインストールして設定するには、[Server Manager] (サーバー マネージャ) を起動します。サーバーをドメインコントローラーに昇格させ、ドメイン名 (ここでは ad.domain.com) を割り当てます。後に EMR セキュリティ設定およびクラスターを作成する際に必要になるため、ドメイン名を書きとめておきます。Active Directory を初めてセットアップする場合は、「How to set up Active Directory (AD) in Windows Server 2016」の手順に従います。

    完了したらインスタンスが再起動されます。

ステップ 3: EMR クラスターのドメインにアカウントを追加する

Active Directory ドメインコントローラーに RDP 接続し、各クラスターユーザー向けに Active Directory ユーザーおよびコンピュータにユーザーアカウントを作成します。詳細については、Microsoft Learn サイトの「Create a User Account in Active Directory Users and Computers」を参照してください。各ユーザーの [User logon name (ユーザーのログオン名)] を書きとめておきます。これらは、後にクラスターを構成する際に必要になります。

さらに、コンピュータをドメインに参加させるのに十分な権限を持つユーザーアカウントを作成します。クラスターを作成する際、このアカウントを指定します。Amazon EMR は、このアカウントを使用して、クラスターインスタンスをドメインに結合します。このアカウントとパスワードは「ステップ 6: Kerberos 認証済みの EMR クラスターを起動する」で指定します。コンピュータ参加権限をアカウントに委任するには、参加権限を持つグループを作成し、ユーザーをそのグループに割り当てることが推奨されます。手順については、「AWS Directory Service 管理ガイド」の「ディレクトリ結合権限の委任」を参照してください。

ステップ 4: Active Directory ドメインコントローラーで受信の信頼を設定する

以下のコマンド例では、Active Directory に信頼を作成します。一方向、着信、非推移に加え、クラスター専用 KDC を使用した領域信頼があります。クラスターの領域では例として EC2.INTERNAL を使用します。KDC-FQDN は、KDC をホストしている Amazon EMR プライマリノードでリストされている [パブリック DNS] の名前に置き換えてください。passwordt パラメータでは、[cross-realm principal password (クロス領域プリンシパルのパスワード)] を指定します。このパスワードは、クラスター作成時に、クラスターの [realm (領域)] と合わせて指定したものです。この領域名は、クラスターの us-east-1 のデフォルトのドメイン名から取得されます。Domain は Active Directory ドメインで信頼を作成する場合、規則により小文字で表記されます。この例では ad.domain.com を使用します

管理者権限で Windows コマンドプロンプトを開き、以下のコマンドを入力して、Active Directory ドメインコントローラーで信頼関係を作成します。

C:\Users\Administrator> ksetup /addkdc EC2.INTERNAL KDC-FQDN C:\Users\Administrator> netdom trust EC2.INTERNAL /Domain:ad.domain.com /add /realm /passwordt:MyVeryStrongPassword C:\Users\Administrator> ksetup /SetEncTypeAttr EC2.INTERNAL AES256-CTS-HMAC-SHA1-96

ステップ 5: DHCP オプションセットを使用して VPC DNS サーバーとして Active Directory ドメインコントローラーを指定する

これで、Active Directory ドメインコントローラーが設定されたため、VPC 内で名前解決できるように、VPC を設定してドメイン名サーバーとして使用する必要があります。これを行うには、DHCP オプションセットをアタッチします。[Domain name] (ドメイン名) をクラスターのドメイン名に指定します (例: クラスターが us-east-1 にある場合は ec2.internal、他のリージョンにある場合は region.compute.internal)。[Domain name servers (ドメインネームサーバー)] で、Active Directory ドメインコントローラーの IP アドレス (クラスターから到達可能であることが必須) を最初のエントリとし、続いて [AmazonProvidedDNS] (例: xx.xx.xx.xx,AmazonProvidedDNS) を指定する必要があります。詳細については、「DHCP オプションセットを変更する」を参照してください。

ステップ 6: Kerberos 認証済みの EMR クラスターを起動する

  1. Amazon EMR で、前のステップで作成した Active Directory ドメインコントローラーを指定するセキュリティ設定を作成します。次にコマンドの例を示します。ドメイン (ad.domain.com) を、「ステップ 2: Active Directory ドメインコントローラーの起動とインストール」で指定したドメイン名に置き換えます。

    aws emr create-security-configuration --name MyKerberosConfig \ --security-configuration '{ "AuthenticationConfiguration": { "KerberosConfiguration": { "Provider": "ClusterDedicatedKdc", "ClusterDedicatedKdcConfiguration": { "TicketLifetimeInHours": 24, "CrossRealmTrustConfiguration": { "Realm": "AD.DOMAIN.COM", "Domain": "ad.domain.com", "AdminServer": "ad.domain.com", "KdcServer": "ad.domain.com" } } } } }'
  2. 以下の属性を使用してクラスターを作成します。

    • --security-configuration オプションを使用して、作成したセキュリティ設定を指定します。この例では MyKerberos Config を使用します。

    • --ec2-attributes optionSubnetId プロパティを使用して、「ステップ 1: VPC とサブネットをセットアップする」で作成したサブネットを指定します。この例では step1-subnet を使用します。

    • --ec2-attributes オプションの AdditionalMasterSecurityGroupsAdditionalSlaveSecurityGroups を使用して、「ステップ 2: Active Directory ドメインコントローラーの起動とインストール」の AD ドメインコントローラーに関連付けられているセキュリティグループが、クラスターのプライマリノード、コアノード、タスクノードにも関連付けられるように指定します。この例では sg-012xrlmdomain345 を使用します。

    --kerberos-attributes を使用して、以下のクラスター固有の Kerberos 属性を指定します。

    次の例では、Kerberos 認証済みクラスターを起動します。

    aws emr create-cluster --name "MyKerberosCluster" \ --release-label emr-5.10.0 \ --instance-type m5.xlarge \ --instance-count 3 \ --ec2-attributes InstanceProfile=EMR_EC2_DefaultRole,KeyName=MyEC2KeyPair,\ SubnetId=step1-subnet, AdditionalMasterSecurityGroups=sg-012xrlmdomain345, AdditionalSlaveSecurityGroups=sg-012xrlmdomain345\ --service-role EMR_DefaultRole \ --security-configuration MyKerberosConfig \ --applications Name=Hadoop Name=Hive Name=Oozie Name=Hue Name=HCatalog Name=Spark \ --kerberos-attributes Realm=EC2.INTERNAL,\ KdcAdminPassword=MyClusterKDCAdminPwd,\ ADDomainJoinUser=ADUserLogonName,ADDomainJoinPassword=ADUserPassword,\ CrossRealmTrustPrincipalPassword=MatchADTrustPwd

ステップ 7: HDFS ユーザーを作成して、Active Directory アカウントのクラスターに対するアクセス許可を設定する

Active Directory で信頼関係を設定すると、Amazon EMR は各 Active Directory アカウントのクラスターで Linux ユーザーを作成します。例えば、Active Directory のユーザーログオン名が LiJuan の場合、Linux アカウントは lijuan になります。Active Directory のユーザー名には、大文字を含めることができますが、Linux では Active Directory のこの区別は採用されません。

ユーザーがクラスターにログインして Hadoop ジョブを実行できるようにするには、Linux アカウント向けに HDFS ユーザーディレクトリを追加し、そのディレクトリの所有権を各ユーザーに付与します。そのためには、Amazon S3 に保存されているスクリプトをクラスターのステップとして実行することをお勧めします。あるいは、以下のスクリプトのコマンドをプライマリノードのコマンドラインから実行することもできます。Hadoop ユーザーとして SSH 経由でプライマリノードに接続するには、クラスターの作成時に指定した EC2 キーペアを使用します。詳細については、「Amazon EMR の SSH 認証情報に EC2 キーペアを使用する」を参照してください。

スクリプト (AddHDFSUsers.sh) を実行するクラスターにステップを追加するには、以下のコマンドを実行します。

aws emr add-steps --cluster-id <j-2AL4XXXXXX5T9> \ --steps Type=CUSTOM_JAR,Name=CustomJAR,ActionOnFailure=CONTINUE,\ Jar=s3://region.elasticmapreduce/libs/script-runner/script-runner.jar,Args=["s3://amzn-s3-demo-bucket/AddHDFSUsers.sh"]

ファイル (AddHDFSUsers.sh) の内容は次のとおりです。

#!/bin/bash # AddHDFSUsers.sh script # Initialize an array of user names from AD or Linux users and KDC principals created manually on the cluster ADUSERS=("lijuan" "marymajor" "richardroe" "myusername") # For each user listed, create an HDFS user directory # and change ownership to the user for username in ${ADUSERS[@]}; do hdfs dfs -mkdir /user/$username hdfs dfs -chown $username:$username /user/$username done

Hadoop グループにマッピングされた Active Directory グループ

Amazon EMR では、System Security Services Daemon (SSD) を使用して、Active Directory グループを Hadoop グループにマッピングします。グループマッピングを確認するには、「Amazon EMR で SSH を使用して Kerberos 認証済みのクラスターに接続する」の説明に従ってプライマリノードにログインした後、hdfs groups コマンドを使用して、Active Directory アカウントが属する Active Directory グループが、クラスター上の対応する Hadoop ユーザーの Hadoop グループにマッピングされていることを確認します。また、他のユーザーのグループマッピングを確認するには、同コマンドを使用してユーザー名を 1 つ以上指定します (例: hdfs groups lijuan)。詳細については、「Apache HDFS コマンドガイド」の「グループ」を参照してください。