設定 Amazon S3 EMRFS請求IAM的角色 - Amazon EMR

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

設定 Amazon S3 EMRFS請求IAM的角色

注意

隨著在 Amazon 6.15.0 中引入 Amazon S3 Access Grants,此頁面所述的EMRFS角色映射功能已在 上獲得改善。 EMR對於 Amazon S3 中資料的可擴展存取控制解決方案,我們建議您搭配 Amazon 使用 S3 Access GrantsEMR

當叢集上執行的應用程式使用 s3://mydata 格式參考資料時,Amazon EMR會使用 EMRFS提出請求。若要與 Amazon S3 互動, 會EMRFS擔任連接至 Amazon EC2執行個體設定檔 的許可政策。無論執行應用程式的使用者或群組或 Amazon S3 中資料的位置為何,都會使用相同的 Amazon EC2執行個體設定檔。

如果您有叢集,有多個使用者需要透過 存取 Amazon S3 中不同層級的資料EMRFS,則可以設定具有 IAM角色的安全組態EMRFS。EMRFS 可以根據提出請求的使用者或群組,或根據 Amazon S3 中的資料位置,為叢集EC2執行個體擔任不同的服務角色。的每個IAM角色EMRFS在 Amazon S3 中可以具有不同的資料存取許可。如需叢集EC2執行個體的服務角色詳細資訊,請參閱 叢集EC2執行個體的服務角色 (EC2執行個體設定檔)

Amazon 5.10.0 版及更新EMR版本EMRFS支援使用 的自訂IAM角色。如果您使用較早版本,或要求超過 EMRFS 提供IAM的角色,您可以改為建立自訂憑證提供者。如需詳細資訊,請參閱授權存取 Amazon S3 中的EMRFS資料

當您使用安全組態指定 IAM的角色時EMRFS,您可以設定角色映射。每個角色映射都會指定對應至識別符IAM的角色。這些識別碼決定透過 存取 Amazon S3 的基礎EMRFS。識別符可以是使用者、群組或顯示資料位置的 Amazon S3 字首。當 向 Amazon S3 EMRFS提出請求時,如果請求符合存取基礎, EMRFS 會讓叢集EC2執行個體擔任請求的對應IAM角色。連接到該角色的IAM許可會套用,而不是連接到叢集EC2執行個體的服務角色的IAM許可。

角色映射中的使用者和群組是叢集上定義的 Hadoop 使用者和群組。使用者和群組會在應用程式內容EMRFS中使用 (例如,YARN使用者模擬) 傳遞至 。Amazon S3 字首可以是任何深度的儲存貯體指標 (例如,s3://amzn-s3-demo-buckets3://amzn-s3-demo-bucket/myproject/mydata)。您可以在單一角色映射中指定多個識別符,但識別符必須全部都是相同的類型。

重要

IAM 的 角色EMRFS提供應用程式使用者之間的應用程式層級隔離。它不提供主機上使用者之間的主機層級隔離。任何有權存取叢集的使用者,都可以略過隔離以承擔任何角色。

當叢集應用程式透過 向 Amazon S3 提出請求EMRFS時, 會以其出現在安全組態中的由上而下順序EMRFS評估角色映射。如果透過 提出的請求EMRFS不符合任何識別符, EMRFS 會回復為叢集EC2執行個體使用服務角色。因此,建議附接至此角色的政策限制對 Amazon S3 的許可。如需詳細資訊,請參閱叢集EC2執行個體的服務角色 (EC2執行個體設定檔)

設定角色

設定具有 IAM角色的安全組態之前EMRFS,請先規劃並建立要連接到角色的角色和許可政策。如需詳細資訊,請參閱 使用者指南 中的EC2執行個體角色如何運作?IAM 建立許可政策時,建議您從連接至 之預設 Amazon EMR角色的受管政策開始EC2,然後根據您的需求編輯此政策。預設角色名稱是 EMR_EC2_DefaultRole,而要編輯的預設受管政策是 AmazonElasticMapReduceforEC2Role。如需詳細資訊,請參閱叢集EC2執行個體的服務角色 (EC2執行個體設定檔)

更新承擔角色許可的信任政策

EMRFS 使用的每個角色都必須具有信任政策,允許叢集的 Amazon EMR角色EC2擔任該角色。同樣地,叢集的 Amazon EMR角色EC2必須具有允許EMRFS角色擔任的信任政策。

下列範例信任政策會連接至 的角色EMRFS。陳述式允許 的預設 Amazon EMR角色EC2擔任該角色。例如,如果您有兩個虛構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,以允許兩個虛構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. 選擇 Roles (角色)、在 Search (搜尋) 中輸入角色的名稱,然後選取它的 Role name (角色名稱)

  2. 選擇 Trust relationships (信任關係)Edit trust relationship (編輯信任關係)

  3. 依照上述指導方針,根據政策文件新增信任陳述式,然後選擇更新信任政策

將角色指定為金鑰使用者

如果角色允許存取 Amazon S3 中的位置,而此位置已使用 AWS KMS key加密,請確定已將該角色指定為金鑰使用者。這會授予角色使用 KMS金鑰的許可。如需詳細資訊,請參閱《AWS Key Management Service 開發人員指南》中的在 AWS KMS中使用金鑰政策

使用 IAM的角色設定安全組態 EMRFS

重要

如果您EMRFS指定的 IAM角色都不適用, EMRFS會回到 的 Amazon EMR角色EC2。請考慮自訂此角色,來為您的應用程式適當地限制對 Amazon S3 的許可,然後在建立叢集時指定此自訂角色,而非指定 EMR_EC2_DefaultRole。如需詳細資訊,請參閱 使用 Amazon 自訂IAM角色 EMR建立叢集時指定自訂IAM角色

使用主控台指定 Amazon S3 EMRFS請求IAM的角色
  1. 建立指定角色映射的安全組態:

    1. 在 Amazon EMR主控台中,選取安全組態 建立

    2. 輸入安全組態的 Name (名稱)。您建立叢集時會使用此名稱來指定安全組態。

    3. 選擇對 Amazon S3 EMRFS請求使用IAM角色

    4. 選取要套用IAM的角色,並在存取基礎下從清單中選擇識別符類型 (使用者群組 S3 字首 ),然後輸入對應的識別符。如果您使用多個識別符,以逗號和不含空格的方式分隔識別符。如需每個識別符類型的詳細資訊,請參閱下面的「JSON configuration reference」。

    5. 選擇 Add role (新增角色),來設定如先前步驟中所述的額外角色對應。

    6. 適當地設定其他的安全組態選項,然後選擇 Create (建立)。如需詳細資訊,請參閱使用 Amazon EMR主控台或使用 建立安全組態 AWS CLI

  2. 建立叢集時指定您在上面建立的安全組態。如需詳細資訊,請參閱指定 Amazon EMR叢集的安全組態

使用 指定 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 檔案結構的指導方針。您可以指定此結構以及其他安全組態選項的結構。如需詳細資訊,請參閱使用 Amazon EMR主控台或使用 建立安全組態 AWS CLI

    以下是在安全組態EMRFS中指定 自訂IAM角色的範例程式碼JSON片段。它示範了三種不同標識符類型的角色映射,後接參數參考。

    { "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":

    必要。包含一或多個角色映射定義。角色映射以顯示的由上而下順序進行評估。如果角色映射評估 Amazon S3 中資料的EMRFS呼叫為 true,則不會評估其他角色映射,並針對請求EMRFS使用指定的IAM角色。角色映射包含下列必要參數:

       "Role":

    以 格式指定IAM角色的ARN識別符 arn:aws:iam::account-id:role/role-name。如果對 Amazon S3 的EMRFS請求符合任何Identifiers指定的 ,這是 Amazon EMR擔任IAM的角色。 Amazon S3

       "IdentifierType":

    可為下列其中之一:

    • "User" 指定識別符是一或多個 Hadoop 使用者,這些使用者可以是 Linux 帳戶使用者或 Kerberos 主體。當EMRFS請求源自於指定的使用者時,即會擔任IAM角色。

    • "Prefix" 指定此識別符為 Amazon S3 位置。IAM 角色會擔任,以呼叫具有指定字首的位置。例如,字首 s3://mybucket/ 符合 s3://mybucket/mydir s3://mybucket/yetanotherdir

    • "Group" 指定識別符是一或多個 Hadoop 群組。如果請求來自指定群組中的使用者,則會擔任該IAM角色。

       "Identifiers":

    指定適當識別符類型的一或多個識別符。以逗號分隔多個識別符,不含空格。

  2. 使用 aws emr create-cluster 命令來建立叢集並指定您在上一個步驟建立的安全組態。

    以下範例在安裝預設核心 Hadoop 應用程式下建立叢集。叢集使用上述建立的安全組態作為 EC2,EMRFS_Roles_Security_Configuration也使用 的自訂 Amazon EMR角色EC2_Role_EMR_Restrict_S3,該角色是使用 --ec2-attributes 參數的InstanceProfile引數指定的。

    注意

    包含 Linux 行接續字元 (\) 是為了提高可讀性。它們可以在 Linux 命令中移除或使用。對於 Windows,請將其移除或取代為插入符號 (^)。

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