本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
設定向 Amazon S3 請求使用 EMRFS 的 IAM 角色
注意
在 Amazon EMR 6.15.0 中引入 Amazon S3 Access Grants 後,本頁所述的 EMRFS 角色映射功能便已獲得改善。針對 Amazon S3 中資料的可擴展存取控制解決方案,建議您將 S3 Access Grants 與 Amazon EMR 搭配使用。
當叢集上執行的應用程式參考使用 s3:// 格式的資料時,Amazon EMR 將使用 EMRFS 發出請求。若要與 Amazon S3 互動,EMRFS 會假設附接至您的 Amazon EC2 執行個體設定檔的許可政策。無論執行應用程式的使用者或群組,或 Amazon S3 中資料的位置為何,都使用相同 Amazon EC2 執行個體設定檔。mydata
如果您的叢集有多個使用者,他們需要透過 EMRFS 對 Amazon S3 中的資料有不同層級的存取,您可以設定含 EMRFS 的 IAM 角色的安全組態。EMRFS 可以根據發出請求的使用者或群組或是根據 Amazon S3 中資料的位置擔任叢集 EC2 執行個體的不同服務角色。針對存取 Amazon S3 中的資料,EMRFS 的每個 IAM 角色可以擁有不同的許可。如需有關叢集 EC2 執行個體的服務角色的詳細資訊,請參閱 叢集 EC2 執行個體的服務角色 (EC2 執行個體設定檔)。
Amazon EMR 5.10.0 版及更新版本支援針對 EMRFS 使用自訂 IAM 角色。如果您使用較早版本或您的需求超出 EMRFS 的 IAM 角色提供的範圍,可以改為建立自訂憑證提供者。如需詳細資訊,請參閱授權存取 Amazon S3 中的 EMRFS 資料。
在使用安全組態來指定 EMRFS 的 IAM 角色時,設定角色映射。每個角色映射指定對應至識別符的 IAM 角色。這些識別符決定透過 EMRFS 存取 Amazon S3 的基礎。識別符可以是使用者、群組或顯示資料位置的 Amazon S3 字首。當 EMRFS 向 Amazon S3 發出請求時,如果請求符合存取基準,EMRFS 便可讓叢集 EC2 執行個體擔任請求的對應 IAM 角色。附接至該角色的 IAM 許可,而不是附接至叢集 EC2 執行個體服務角色的 IAM 許可。
角色映射中的使用者和群組是叢集上定義的 Hadoop 使用者和群組。在應用程式使用 EMRFS 的情況下,使用者和群組會傳送給 EMRFS (例如,YARN 使用者模擬)。Amazon S3 字首可以是任何深度的儲存貯體指標 (例如,s3://amzn-s3-demo-bucket 或 s3://amzn-s3-demo-bucket/myproject/mydata)。您可以在單一角色映射中指定多個識別符,但識別符必須全部都是相同的類型。
重要
EMRFS 的 IAM 角色在應用程式使用者之間提供應用程式層級隔離。它不提供主機上使用者之間的主機層級隔離。任何有權存取叢集的使用者,都可以略過隔離以承擔任何角色。
叢集應用程式透過 EMRFS 向 Amazon S3 提出請求時,EMRFS 會依角色映射出現在安全組態中的順序,由上而下進行評估。如果透過 EMRFS 提出的請求不符合任何識別符,EMRFS 會回退至使用叢集 EC2 執行個體的服務角色。因此,建議附接至此角色的政策限制對 Amazon S3 的許可。如需詳細資訊,請參閱叢集 EC2 執行個體的服務角色 (EC2 執行個體設定檔)。
設定角色
使用 EMRFS 的 IAM 角色設定安全組態前,請規劃並建立角色和要附接至角色的許可政策。如需詳細資訊,請參閱《IAM 使用者指南》中的 EC2 執行個體的角色如何運作?。建立許可政策時,建議您從附接至 EC2 預設 Amazon EMR 角色的受管政策開始,接著根據您的需求編輯此政策。預設角色名稱是 EMR_EC2_DefaultRole,而要編輯的預設受管政策是 AmazonElasticMapReduceforEC2Role。如需詳細資訊,請參閱叢集 EC2 執行個體的服務角色 (EC2 執行個體設定檔)。
更新承擔角色許可的信任政策
EMRFS 使用的每個角色都必須擁有信任政策,以允許 EC2 的叢集 Amazon EMR 角色來擔任此角色。同樣地,EC2 的叢集 Amazon EMR 角色也必須擁有信任政策,以允許 EMRFS 角色來擔任此角色。
以下範例信任政策連接到 EMRFS 的角色。陳述式允許 EC2 的預設 Amazon EMR 角色擔任此角色。例如,如果您有兩個虛構的 EMRFS 角色:EMRFSRole_First 和 EMRFSRole_Second,此政策陳述式會新增到這兩個角色的信任政策。
此外,以下範例信任政策陳述式新增到 EMR_EC2_DefaultRole 以允許兩個虛構的 EMRFS 角色擔任此角色。
更新 IAM 角色的信任政策
前往 https://console.aws.amazon.com/iam/
-
選擇 Roles (角色)、在 Search (搜尋) 中輸入角色的名稱,然後選取它的 Role name (角色名稱)。
-
選擇 Trust relationships (信任關係)、Edit trust relationship (編輯信任關係)。
-
依照上述指導方針,根據政策文件新增信任陳述式,然後選擇更新信任政策。
將角色指定為金鑰使用者
如果角色允許存取 Amazon S3 中的位置,而此位置已使用 AWS KMS key加密,請確定已將該角色指定為金鑰使用者。這會授予角色使用 KMS 金鑰的許可。如需詳細資訊,請參閱《AWS Key Management Service 開發人員指南》中的在 AWS KMS中使用金鑰政策。
使用 EMRFS 的 IAM 角色設定安全組態
重要
如果您指定 EMRFS 的 IAM 角色皆不套用,EMRFS 會回退至 EC2 的 Amazon EMR 角色。請考慮自訂此角色,來為您的應用程式適當地限制對 Amazon S3 的許可,然後在建立叢集時指定此自訂角色,而非指定 EMR_EC2_DefaultRole。如需詳細資訊,請參閱使用 Amazon EMR 自訂 IAM 角色及建立叢集時指定自訂 IAM 角色。
使用主控台指定向 Amazon S3 請求使用 EMRFS 的 IAM 角色
-
建立指定角色映射的安全組態:
-
在 Amazon EMR 主控台中,選取安全組態和建立。
-
輸入安全組態的 Name (名稱)。您建立叢集時會使用此名稱來指定安全組態。
-
選擇向 Amazon S3 請求使用 EMRFS 的 IAM 角色。
-
選取要套用的 IAM 角色),然後在存取的基準下,從清單中選取識別符類型 (使用者、群組或 S3 字首),並輸入對應的識別符。如果您使用多個識別符,以逗號和不含空格的方式分隔識別符。如需每個識別符類型的詳細資訊,請參閱下面的「JSON configuration reference」。
-
選擇 Add role (新增角色),來設定如先前步驟中所述的額外角色對應。
-
適當地設定其他的安全組態選項,然後選擇 Create (建立)。如需詳細資訊,請參閱使用 Amazon EMR 主控台或使用 建立安全組態 AWS CLI。
-
-
建立叢集時指定您在上面建立的安全組態。如需詳細資訊,請參閱指定 Amazon EMR 叢集的安全組態。
使用 為 Amazon S3 的 EMRFS 請求指定 IAM 角色 AWS CLI
-
使用
aws emr create-security-configuration命令,指定安全組態的名稱,以及採用 JSON 格式的安全組態詳細資訊。以下所示範例命令建立名稱為
EMRFS_Roles_Security_Configuration的安全組態。這是以MyEmrfsSecConfig.json檔案中的 JSON 結構為基礎,其儲存在與命令執行的相同目錄中。aws emr create-security-configuration --nameEMRFS_Roles_Security_Configuration--security-configurationfile://MyEmrFsSecConfig.json.使用下列針對
MyEmrFsSecConfig.json檔案結構的指導方針。您可以指定此結構以及其他安全組態選項的結構。如需詳細資訊,請參閱使用 Amazon EMR 主控台或使用 建立安全組態 AWS CLI。以下是 JSON 程式碼片段範例,用於在安全組態內為 EMRFS 指定自訂 IAM 角色。它示範了三種不同標識符類型的角色映射,後接參數參考。
{ "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_demo_s3_buckets", "IdentifierType": "Prefix", "Identifiers": [ "s3://amzn-s3-demo-bucket1/","s3://amzn-s3-demo-bucket2/" ] },{ "Role": "arn:aws:iam::123456789101:role/allow_EMRFS_access_for_AdminGroup", "IdentifierType": "Group", "Identifiers": [ "AdminGroup" ] }] } } }參數 Description "AuthorizationConfiguration":必要.
"EmrFsConfiguration":必要. 包含角色映射。
"RoleMappings":必要. 包含一或多個角色映射定義。角色映射以顯示的由上而下順序進行評估。如果對於 Amazon S3 中的資料的 EMRFS 呼叫,角色映射評估為 true,則不會評估進一步的角色映射,且 EMRFS 會為請求使用指定的 IAM 角色。角色映射包含下列必要參數:
"Role":以格式
arn:aws:iam::指定 IAM 角色的 ARN 識別符。如果向 Amazon S3 發出的 EMRFS 請求符合任何指定的account-id:role/role-nameIdentifiers,則這是 Amazon EMR 擔任的 IAM 角色。"IdentifierType":可為下列其中之一:
"User"指定識別符是一或多個 Hadoop 使用者,這些使用者可以是 Linux 帳戶使用者或 Kerberos 主體。當 EMRFS 請求源自指定的一個或多個使用者時,會擔任 IAM 角色。"Prefix"指定此識別符為 Amazon S3 位置。對於具有指定字首的一個或多個位置的呼叫,會擔任 IAM 角色。例如,字首s3://amzn-s3-demo-bucket/符合s3://amzn-s3-demo-bucket/mydir和s3://amzn-s3-demo-bucket/yetanotherdir。"Group"指定識別符是一或多個 Hadoop 群組。如果請求源自指定群組中的使用者,則會擔任 IAM 角色。
"Identifiers":指定適當識別符類型的一或多個識別符。以逗號分隔多個識別符,不含空格。
-
使用
aws emr create-cluster命令來建立叢集並指定您在上一個步驟建立的安全組態。以下範例在安裝預設核心 Hadoop 應用程式下建立叢集。該叢集會使用上面建立為
EMRFS_Roles_Security_Configuration的安全組態,也會使用 EC2 的自訂 Amazon EMR 角色EC2_Role_EMR_Restrict_S3,這個角色是透過--ec2-attributes參數的InstanceProfile引數所指定。注意
包含 Linux 行接續字元 (\) 是為了提高可讀性。它們可以在 Linux 命令中移除或使用。對於 Windows,請將其移除或取代為插入符號 (^)。
aws emr create-cluster --nameMyEmrFsS3RolesCluster\ --release-labelemr-7.12.0--ec2-attributes InstanceProfile=EC2_Role_EMR_Restrict_S3,KeyName=MyKey\ --instance-typem5.xlarge--instance-count3\ --security-configurationEMRFS_Roles_Security_Configuration