使用IAM角色將許可授與在 Amazon EC2 執行個體上執行的應用程式 - AWS Identity and Access Management

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

使用IAM角色將許可授與在 Amazon EC2 執行個體上執行的應用程式

在 Amazon 執行個EC2體上執行的應用程式必須包含 AWS 中的認證 AWS API請求。你可以有你的開發商商店 AWS 直接在 Amazon EC2 執行個體中登入資料,並允許該執行個體中的應用程式使用這些登入資 但是開發人員接著必須管理登入資料,並確保他們安全地將登入資料傳遞給每個執行個體,並在需要更新登入資料時更新每個 Amazon EC2 執行個體。這是許多額外的工作。

相反地,您可以而且應該使用IAM角色來管理在 Amazon 執行個EC2體上執行的應用程式的臨時登入資料。使用角色時,您不必將長期登入資料 (例如登入登入資料或存取金鑰) 散發到 Amazon EC2 執行個體。相反地,此角色會提供應用程式在呼叫其他應用程式時可以使用的暫時權限 AWS 的費用。啟動 Amazon EC2 執行個體時,您可以指定與執行個體建立關聯的IAM角色。然後,在執行個體上執行的應用程式可以使用角色提供的臨時登入資料來簽署API要求。

使用角色將許可授予在 Amazon 執行個體上EC2執行的應用程式需要一些額外的組態。Amazon EC2 執行個體上執行的應用程式摘要自 AWS 由虛擬化作業系統。由於這種額外的分離,您需要一個額外的步驟來指定 AWS 角色及其與 Amazon EC2 執行個體相關的許可,並提供給其應用程式使用。此額外步驟是建立連接到執行個體的執行個體設定檔。執行個體描述檔包含角色,可以將角色的臨時憑證提供給在執行個體上執行的應用程式。然後,這些臨時認證可以用於應用程序的訪問資源的API調用,並限制對角色指定的那些資源的訪問。

注意

一次只能將一個角色指派給 Amazon EC2 執行個體,且執行個體上的所有應用程式共用相同的角色和許可。當您利用 Amazon ECS 管理 Amazon EC2 執行個體時,可以將角色指派給 Amazon ECS 任務,這些任務可與其執行的 Amazon EC2 執行個體角色區分開來。為每項任務指派一個角色的做法符合最低權限存取原則,並且允許對動作和資源進行更精細的控制。

如需詳細資訊,請參閱 Amazon 彈性容器服務最佳實務指南中的將IAM角色與 Amazon ECS 任務搭配使用。

以這種方式使用角色有幾個好處。由於角色憑證是臨時的並且是自動更新的,因此您不需要管理憑證,也不必擔心長期的安全風險。此外,如果對多個執行個體使用單一角色,則可以對該角色進行變更,並將變更自動傳播到所有執行個體。

注意

雖然角色通常會在您啟動 Amazon EC2 執行個體時指派給該執行個體,但角色也可以附加到目前EC2執行的 Amazon 執行個體。要了解如何將角色附加到正在運行的執行個體,請參閱 Amazon 的IAM角色EC2

Amazon EC2 執行個體的角色如何運作?

在下圖中,開發人員在 Amazon 執行個體上執行應用程式,該EC2執行個體需要存取名為的 S3 儲存貯體amzn-s3-demo-bucket-photos。管理員建立Get-pics服務角色,並將角色附加到 Amazon EC2 執行個體。該角色包括許可政策,該政策授予對指定的 S3 儲存貯體的唯讀存取許可。它還包括一個信任政策,允許 Amazon EC2 執行個體擔任該角色並擷取臨時登入資料。當應用程式在執行個體上執行時,它可以使用角色的臨時憑證來存取照片儲存貯體。管理員不必授予開發人員存取照片儲存貯體的許可,開發人員也不必共用或管理憑證。

Amazon EC2 執行個體上的應用程式存取 AWS 資源
  1. 系統管理員用IAM來建立Get-pics角色。在角色的信任政策中,管理員指定只有 Amazon EC2 執行個體可以擔任該角色。在角色的許可政策中,管理員為 amzn-s3-demo-bucket-photos 儲存貯體指定唯讀許可。

  2. 開發人員會啟動 Amazon EC2 執行個體,並將Get-pics角色指派給該執行個體。

    注意

    如果您使用IAM主控台,則系統會為您管理執行個體設定檔,而且對您來說大部分都是透明的。但是,如果您使用 AWS CLI 或者,API若要建立和管理角色和 Amazon EC2 執行個體,則必須建立執行個體設定檔,並以單獨的步驟將角色指派給該執行個體。然後,當您啟動執行個體時,必須指定執行個體設定檔名稱,而不是角色名稱。

  3. 應用程式執行時,會從 Amazon 執行個體中繼資料取得臨時安全登入資料,如從EC2執行個體中繼資料擷取安全登入資料中所述。這些是代表角色的暫時安全憑證,並且在有限的時間段內有效。

    隨著一些 AWS SDKs,開發人員可以使用透明地管理臨時安全憑據的提供程序。(個人文檔 AWS SDKs說明管理認證所支援的功能。) SDK

    或者,應用程式也可以直接從 Amazon EC2 執行個體的執行個體中繼資料取得臨時登入資料。您可以從中繼資料的 iam/security-credentials/role-name 類別 (在本例中為 iam/security-credentials/Get-pics) 中取得憑證和相關的值。如果應用程式從執行個體中繼資料取得憑證,則可以快取憑證。

  4. 使用擷取到的臨時憑證,應用程式存取照片儲存貯體。基於連接至 Get-pics 角色的政策,應用程式具有唯讀許可。

    在執行個體上提供的臨時安全憑證在到期之前會自動更新,以便有效設定為永久可用。應用程式只需要確保在目前中繼資料到期之前,它從執行個體中繼資料中取得一組新的憑證。它是可以使用 AWS SDK以管理認證,以便應用程式不需要包含其他邏輯即可重新整理認證。例如,使用執行個體描述檔憑證提供者建立用戶端。不過,如果應用程式從執行個體中繼資料取得臨時安全憑證並快取它們,則應每小時或在目前設定過期之前至少 15 分鐘取得重新整理的憑證集。過期時間包含在 iam/security-credentials/role-name 類別中所傳回的資訊。

將角色與 Amazon 搭配使用所需的許可 EC2

若要啟動具有角色的執行個體,開發人員必須擁有啟動 Amazon EC2 執行個體的權限,以及傳遞IAM角色的權限。

下列範例策略允許使用者使用 AWS Management Console 以啟動具有角色的執行個體。該政策包括萬用字元 (*),可讓使用者傳遞任何角色並執行列出的 Amazon EC2 動作。此ListInstanceProfiles動作可讓使用者檢視 AWS 帳戶.

範例 授予使用者使用 Amazon EC2 主控台以任何角色啟動執行個體的範例政策
{ "Version": "2012-10-17", "Statement": [ { "Sid": "IamPassRole", "Effect": "Allow", "Action": "iam:PassRole", "Resource": "*", "Condition": { "StringEquals": { "iam:PassedToService": "ec2.amazonaws.com" } } }, { "Sid": "ListEc2AndListInstanceProfiles", "Effect": "Allow", "Action": [ "iam:ListInstanceProfiles", "ec2:Describe*", "ec2:Search*", "ec2:Get*" ], "Resource": "*" } ] }

限制可傳遞給 Amazon EC2 執行個體的角色 (使用 PassRole)

您可以使用該PassRole權限來限制使用者在使用者啟動執行個EC2體時可傳遞給 Amazon 執行個體的角色。這有助於防止使用者執行具有比授予使用者更多許可的應用程式,也就是說,能夠獲得更高的許可。例如,假設使用者愛麗絲只有啟動 Amazon EC2 執行個體和使用 Amazon S3 儲存貯體的許可,但她傳遞給 Amazon EC2 執行個體的角色具有IAM與 Amazon DynamoDB 合作的許可。在這種情況下,Alice 可能能夠啟動執行個體、登入該執行個體、取得臨時安全登入資料,然後執行IAM或未授權的 DynamoDB 動作。

若要限制使用者可傳遞給 Amazon EC2 執行個體的角色,請建立允許該PassRole動作的政策。然後將政策附加到將啟動 Amazon EC2 執行個體的使用者 (或使用者所屬的IAM群組)。在政策Resource元素中,您會列出允許使用者傳遞至 Amazon EC2 執行個體的一或多個角色。當使用者啟動執行個體並將角色與其關聯時,Amazon 會EC2檢查使用者是否允許傳遞該角色。當然,您也應當確保使用者可以傳遞的角色不包含比使用者應具有的許可更多的許可。

注意

PassRole不是以或相同的方式的APIRunInstancesListInstanceProfiles作。相反,這是一個權限 AWS 每當角色ARN作為參數傳遞給API(或控制台代表用戶執行此操作)時進行檢查。它可協助管理員控制哪些使用者可以傳遞哪些角色。在這種情況下,它可確保允許使用者將特定角色附加到 Amazon EC2 執行個體。

範例 授予使用者權限以特定角色啟動 Amazon EC2 執行個體的範例政策

以下範例政策允許使用者使用 Amazon 啟EC2API動具有角色的執行個體。元Resource素會指定角色的 Amazon 資源名稱 (ARN)。藉由指定ARN,原則會授與使用者僅傳遞Get-pics角色的權限。如果使用者在啟動執行個體時嘗試指定不同的角色,則動作會失敗。使用者沒有執行任何執行個體的許可,無論其是否有傳遞角色。

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "ec2:RunInstances", "Resource": "*" }, { "Effect": "Allow", "Action": "iam:PassRole", "Resource": "arn:aws:iam::account-id:role/Get-pics" } ] }

允許執行個體設定檔角色切換到另一個帳戶中的角色

您可以允許在 Amazon 執行個EC2體上執行的應用程式在另一個帳戶中執行命令。若要執行此操作,您必須允許第一個帳戶中的 Amazon EC2 執行個體角色切換到第二個帳戶中的角色。

想像一下,你正在使用兩個 AWS 帳戶 並且您希望允許在 Amazon EC2 實例上運行的應用程序運行 AWS CLI兩個帳戶中的命令。假設 Amazon 實EC2例存在於帳戶中111111111111。該執行個體包含 abcd 執行個體描述檔角色,該角色會允許應用程式在相同 111111111111 帳戶中對 amzn-s3-demo-bucket1 儲存貯體執行唯讀 Amazon S3 任務。不過,也必須允許應用程式擔任 efgh 跨帳戶角色來在帳戶 222222222222 中存取 amzn-s3-demo-bucket2Amazon S3 儲存貯體。

圖表顯示開發人員如何啟動具有該角色的 Amazon EC2 執行個體,以存取 Amazon S3 儲存貯體中的相片。

abcdAmazon EC2 執行個體設定檔角色必須具有下列許可政策,才能允許應用程式存取 amzn-s3-demo-bucket1 Amazon S3 儲存貯體:

帳戶 111111111111 abcd 角色許可政策

{ "Version": "2012-10-17", "Statement": [ { "Sid": "AllowAccountLevelS3Actions", "Effect": "Allow", "Action": [ "s3:GetBucketLocation", "s3:GetAccountPublicAccessBlock", "s3:ListAccessPoints", "s3:ListAllMyBuckets" ], "Resource": "arn:aws:s3:::*" }, { "Sid": "AllowListAndReadS3ActionOnMyBucket", "Effect": "Allow", "Action": [ "s3:Get*", "s3:List*" ], "Resource": [ "arn:aws:s3:::amzn-s3-demo-bucket1/*", "arn:aws:s3:::amzn-s3-demo-bucket1" ] }, { "Sid": "AllowIPToAssumeCrossAccountRole", "Effect": "Allow", "Action": "sts:AssumeRole", "Resource": "arn:aws:iam::222222222222:role/efgh" } ] }

abcd角色必須信任 Amazon EC2 服務才能擔任該角色。若要執行此操作,abcd 角色必須有以下信任政策:

帳戶 111111111111 abcd 角色信任政策

{ "Version": "2012-10-17", "Statement": [ { "Sid": "abcdTrustPolicy", "Effect": "Allow", "Action": "sts:AssumeRole", "Principal": {"Service": "ec2.amazonaws.com"} } ] }

假設 efgh 跨帳戶角色允許在相同 222222222222 帳戶中對 amzn-s3-demo-bucket2 儲存貯體的唯讀 Amazon S3 任務。若要執行此操作,efgh 跨帳戶角色必須有以下許可政策:

帳戶 222222222222 efgh 角色許可政策

{ "Version": "2012-10-17", "Statement": [ { "Sid": "AllowAccountLevelS3Actions", "Effect": "Allow", "Action": [ "s3:GetBucketLocation", "s3:GetAccountPublicAccessBlock", "s3:ListAccessPoints", "s3:ListAllMyBuckets" ], "Resource": "arn:aws:s3:::*" }, { "Sid": "AllowListAndReadS3ActionOnMyBucket", "Effect": "Allow", "Action": [ "s3:Get*", "s3:List*" ], "Resource": [ "arn:aws:s3:::amzn-s3-demo-bucket2/*", "arn:aws:s3:::amzn-s3-demo-bucket2" ] } ] }

efgh 角色必須信任 abcd 執行個體設定檔角色擔任該角色。若要執行此操作,efgh 角色必須有以下信任政策:

帳戶 222222222222 efgh 角色信任政策

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

我該如何開始?

若要瞭解角色如何與 Amazon EC2 執行個體搭配使用,您需要使用IAM主控台建立角色、啟動使用該角色的 Amazon EC2 執行個體,然後檢查執行中的執行個體。您可以檢查執行個體中繼資料以查看角色的暫時憑證如何可用於執行個體。您還可以查看在執行個體上執行的應用程式如何使用該角色。使用以下資源以進一步了解。

如需為 Amazon EC2 執行個體建立角色或角色的詳細資訊,請參閱下列資訊: