本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
設定向 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
,此政策陳述式會新增到這兩個角色的信任政策。
{ "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 角色的信任政策
開啟位於 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 --name
EMRFS_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
" ] }] } } }參數 描述 "AuthorizationConfiguration":
必要。
"EmrFsConfiguration":
必要。包含角色映射。
"RoleMappings":
必要。包含一或多個角色映射定義。角色映射以顯示的由上而下順序進行評估。如果對於 Amazon S3 中的資料的 EMRFS 呼叫,角色映射評估為 true,則不會評估進一步的角色映射,且 EMRFS 會為請求使用指定的 IAM 角色。角色映射包含下列必要參數:
"Role":
以格式
arn:aws:iam::
指定 IAM 角色的 ARN 識別符。如果向 Amazon S3 發出的 EMRFS 請求符合任何指定的account-id
:role/role-name
Identifiers
,則這是 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 --name
MyEmrFsS3RolesCluster
\ --release-labelemr-7.6.0
--ec2-attributes InstanceProfile=EC2_Role_EMR_Restrict_S3
,KeyName=MyKey
\ --instance-typem5.xlarge
--instance-count3
\ --security-configurationEMRFS_Roles_Security_Configuration