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

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

設定EMRFS傳送給 Amazon S3 的請求的IAM角色

注意

在 Amazon EMR 6.15.0 中引入 Amazon S3 存取授權後,本頁所述的EMRFS角色對應功能已得到改善。對於 Amazon S3 中資料的可擴展存取控制解決方案,我們建議您在 Amazon 上使用 S3 存取授權EMR

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

如果您的叢集包含多個使用者,這些使用者需要透過不同層級存取 Amazon S3 中的資料EMRFS,您可以使用的IAM角色設定安全組態EMRFS。EMRFS可以根據發出請求的使用者或群組,或根據 EC2 Amazon S3 中的資料位置,為叢集執行個體扮演不同的服務角色。的每個IAM角色對於 Amazon S3 中的資料存取都EMRFS可以有不同的許可。如需叢集EC2執行個體之服務角色的詳細資訊,請參閱叢集EC2執行個體服務角色 (執行個EC2體設定檔)

Amazon 5.10.0 及更EMRFS新EMR版本支援使用的自訂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://mybuckets3://mybucket/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使用的每個角色都必須具有信任政策,EC2以允許叢集的 Amazon EMR 角色承擔它。同樣地,叢集的 Amazon EMR 角色EC2必須具有允許EMRFS角色承擔的信任政策。

下列範例信任原則附加至的角色EMRFS。該陳述式允許的預設 Amazon EMR 角色擔任該角色。EC2例如,如果您有兩個虛構EMRFS角色EMRFSRole_SecondEMRFSRole_First且此原則陳述式會新增至每個角色的信任原則中。

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

此外,下列範例信任原則陳述式會新增至,以允許兩個虛構EMRFS角色承擔它。EMR_EC2_DefaultRole

{ "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 KMS 中的 AWS Key Management Service 開發人員指南

設定具有下列IAM角色的安全性組態 EMRFS

重要

如果您指定的任何IAM角色都不適用,EMRFS則會退回的 Amazon EMR 角色EC2。EMRFS請考慮自訂此角色,來為您的應用程式適當地限制對 Amazon S3 的許可,然後在建立叢集時指定此自訂角色,而非指定 EMR_EC2_DefaultRole。如需詳細資訊,請參閱 自訂IAM角色在建立叢集時指定自訂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 (建立)。如需詳細資訊,請參閱建立安全組態

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

若要使用指定傳EMRFS送至 Amazon S3 的請求的IAM角色 AWS CLI
  1. 使用指aws emr create-security-configuration令,指定安全性組態的名稱,並以JSON格式指定安全性組態詳細資訊。

    以下所示範例命令建立名稱為 EMRFS_Roles_Security_Configuration 的安全組態。它基於文件中的JSON結構MyEmrfsSecConfig.json,該結構保存在執行命令的同一目錄中。

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

    使用下列針對 MyEmrFsSecConfig.json 檔案結構的指導方針。您可以指定此結構以及其他安全組態選項的結構。如需詳細資訊,請參閱建立安全組態

    以下是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 的請求符合任何Identifiers指定的EMRFS要求,Amazon 就EMR會承擔這個IAM角色。

       "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_ConfigurationEC2_Role_EMR_Restrict_S3並且還使用的自訂 Amazon EMR 角色 (使用--ec2-attributes參數的InstanceProfile引數指定)。

    注意

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

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