Amazon EC2 的 IAM 的角色 - Amazon Elastic Compute Cloud

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

Amazon EC2 的 IAM 的角色

應用程式必須使用 AWS 認證簽署其 API 要求。因此,若您是應用程式開發人員,對於在 EC2 執行個體上運作的應用程式,您會需要其登入資料的管理策略。例如,您可安全將 AWS 登入資料分配給執行個體,讓在這些執行個體上運作的應用程式能夠使用此登入資料來簽署請求,同時避免其他使用者取得您的登入資料。但是,要將憑證安全地分配到每個執行個體,尤其是代表您 AWS 建立的執行個體 (例如 Spot 執行個體或 Auto Scaling 群組中的執行個體) 是一件困難的事。輪換認證時,您也必須能夠更新每個執行個體上的 AWS 認證。

注意

對於 Amazon EC2 工作負載,建議您使用下述方法擷取工作階段憑證。這些憑證應該可讓您的工作負載發起 AWS API 請求,而無需使用 sts:AssumeRole 擔任已與執行個體相關聯的相同角色。除非您需要為屬性型存取控制 (ABAC) 傳遞工作階段標籤,或需要傳遞工作階段政策以進一步限制角色權限,否則此類角色擔任呼叫是不必要的,因為它們會建立一組新的相同的臨時角色工作階段憑證。

如果您的工作負載使用角色來擔任它自己,則必須建立信任政策,明確允許該角色擔任它自己。如果您不建立信任政策,會得到 AccessDenied 錯誤。如需詳細資訊,請參閱《IAM 使用者指南》中的修改角色信任政策

我們設計的 IAM 角色,讓您的應用程式能夠從執行個體安全提出 API 請求,您無須管理應用程式使用的安全登入資料。您可以使用 IAM 角色委派許可以發出 API 請求,而不是建立和分發 AWS 登入資料,如下所示:

  1. 建立 IAM 角色。

  2. 定義哪些帳戶或 AWS 服務可以擔任該角色。

  3. 定義應用程式在角色擔任後可使用的 API 動作與資源。

  4. 啟動執行個體時指定該角色,或將該角色連接至現有執行個體。

  5. 讓應用程式擷取一組暫時登入資料並加以使用。

例如,若執行於您執行個體上的應用程式需要使用 Amazon S3 內的儲存貯體,您可使用 IAM 角色為其授予許可。您可建立 JSON 格式的政策,藉此指定 IAM 角色的許可。這些政策類似於您為使用者建立的政策。若您變更角色,此變更會傳播至所有執行個體。

注意

Amazon EC2 IAM 角色登入資料不受該角色中設定的最長工作階段持續時間限制。如需詳細資訊,請參閱《IAM 使用者指南》中的使用 IAM 角色

雖然您只能將一個 IAM 角色連接到一個執行個體中,但您可以將相同的角色連接到多個執行個體中。如需建立 IAM 角色的詳細資訊,請參閱IAM 使用者指南中的角色

您可將資源層級許可套用至 IAM 政策,藉此控制使用者連接、取代或分離執行個體的 IAM 角色的能力。如需詳細資訊,請參閱 Amazon EC2 API 動作支援的資源層級許可及下列範例:範例:使用 IAM 角色

執行個體描述檔

Amazon EC2 會使用執行個體描述檔做為 IAM 角色的容器。使用 IAM 主控台建立 IAM 角色時,主控台會自動建立執行個體描述檔,並將其命名為與對應角色相同的名稱。若您使用 Amazon EC2 主控台來啟動具備 IAM 角色的執行個體,或使用該主控台將 IAM 角色連接至執行個體,您須根據執行個體描述檔名稱清單來選擇角色。

如果您使用 AWS CLI、API 或 AWS SDK 建立角色,則可以將角色和執行個體設定檔建立為個別動作,名稱可能不同。如果您接著使用 AWS CLI、API 或 AWS SDK 啟動具有 IAM 角色的執行個體,或將 IAM 角色附加至執行個體,請指定執行個體設定檔名稱。

執行個體描述檔內僅有一個 IAM 角色。此限制無法提高。

如需詳細資訊,請參閱IAM 使用者指南中的執行個體描述檔

從執行個體中繼資料中擷取安全登入資料

執行個體上的應用程式會從執行個體中繼資料項目 iam/security-credentials/role-name,擷取角色提供的安全登入資料。如此即授予該應用程式許可,能夠執行您在建立角色與安全登入資料的關聯時所定義的角色動作與資源。這些安全登入資料為暫時的,我們會定期更換。舊的登入資料過期前至少五分鐘,我們就會提供新的登入資料。

警告

若您使用的服務會運用具備 IAM 角色的執行個體中繼資料,請確認該服務代您發出 HTTP 呼叫時不會暴露您的登入資料。可能會暴露登入資料的服務類型包括 HTTP 代理、HTML/CSS 驗證器服務和支援納入 XML 的 XML 處理器。

下列命令會擷取名為 s3access 之 IAM 角色的安全登入資料。

IMDSv2
PS C:\> [string]$token = Invoke-RestMethod -Headers @{"X-aws-ec2-metadata-token-ttl-seconds" = "21600"} -Method PUT -Uri http://169.254.169.254/latest/api/token
PS C:\> Invoke-RestMethod -Headers @{"X-aws-ec2-metadata-token" = $token} -Method GET -Uri http://169.254.169.254/latest/meta-data/iam/security-credentials/s3access
IMDSv1
PS C:\> Invoke-RestMethod -uri http://169.254.169.254/latest/meta-data/iam/security-credentials/s3access

下列為範例輸出。

{ "Code" : "Success", "LastUpdated" : "2012-04-26T16:39:16Z", "Type" : "AWS-HMAC", "AccessKeyId" : "ASIAIOSFODNN7EXAMPLE", "SecretAccessKey" : "wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY", "Token" : "token", "Expiration" : "2017-05-17T15:09:54Z" }

對於在執行個體上執行的應用程式 AWS CLI、和 Windows 專用工具 PowerShell 命令,您不必明確取得臨時安全登入資料 — AWS SDK 和 Windows Tools PowerShell 會自動從 EC2 執行個體中繼資料服務取得認證並加以使用。 AWS CLI欲使用暫時安全登入資料在執行個體外部進行呼叫 (如為了測試 IAM 政策),您必須提供存取金鑰、私有金鑰和工作階段字符。如需詳細資訊,請參閱 IAM 使用者指南中的使用臨時安全登入資料申請 AWS 資源存取權。

如需執行個體中繼資料的詳細資訊,請參閱執行個體中繼資料與使用者資料。如需執行個體中繼資料 IP 地址的相關資訊,請參閱擷取執行個體中繼資料

授予 IAM 使用者將 IAM 角色傳遞至執行個體的許可

若要讓使用者能夠啟動具備 IAM 角色的執行個體,或者連接或取代現有執行個體的 IAM 角色,您必須授予使用者許可才能使用下列 API 動作:

  • iam:PassRole

  • ec2:AssociateIamInstanceProfile

  • ec2:ReplaceIamInstanceProfileAssociation

例如,使用 AWS CLI,下列 IAM 政策授予使用者許可以啟動具備 IAM 角色的執行個體,或讓其能夠連接或取代現有執行個體的 IAM 角色。

注意

如果希望政策將使用者存取權限授予給所有角色,請在政策中將資源指定為 *。但請考慮將最低權限原則當作最佳實務。

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "ec2:RunInstances", "ec2:AssociateIamInstanceProfile", "ec2:ReplaceIamInstanceProfileAssociation" ], "Resource": "*" }, { "Effect": "Allow", "Action": "iam:PassRole", "Resource": "arn:aws:iam::123456789012:role/DevTeam*" } ] }

若要授予使用者許可以啟動具備 IAM 角色的執行個體,或讓其能夠使用 Amazon EC2 主控台為現有執行個體連接或取代 IAM 角色,除了他們可能需要的任何其他許可之外,您還必須授予他們使用 iam:ListInstanceProfilesiam:PassRoleec2:AssociateIamInstanceProfileec2:ReplaceIamInstanceProfileAssociation 的許可。如需取得範例政策,請參閱「在 Amazon EC2 主控台中進行操作的範例政策。」。

使用 IAM 角色

您可建立 IAM 角色,並在啟動期間或之後將其連接至執行個體。您亦可取代或分離執行個體的 IAM 角色。

建立 IAM 角色

您必須建立 IAM 角色,之後才能啟動具備該角色的執行個體,或將該角色連接至執行個體。

Console
使用 IAM 主控台建立 IAM 角色
  1. 在以下網址開啟 IAM 主控台:https://console.aws.amazon.com/iam/

  2. 在導覽窗格中,選擇角色,然後選擇建立角色

  3. 選取信任的實體頁面上,選擇 AWS 服務,然後選取 EC2 使用案例。選擇下一步

  4. 新增許可頁面上,選取可授予執行個體存取所需資源的政策。選擇下一步

  5. 命名、檢閱和建立頁面上,輸入角色的名稱和描述。或者,將標籤新增至角色。選擇建立角色

Command line

下列範例利用允許角色使用 Amazon S3 儲存貯體的政策來建立 IAM 角色。

建立 IAM 角色和執行個體設定檔 (AWS CLI)
  1. 建立下列信任政策並將其儲存為名為 ec2-role-trust-policy.json 的文字檔案。

    { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": "ec2.amazonaws.com"}, "Action": "sts:AssumeRole" } ] }
  2. 建立 s3access 角色,並指定您已使用 create-role 命令建立的信任政策。

    aws iam create-role \ --role-name s3access \ --assume-role-policy-document file://ec2-role-trust-policy.json

    回應範例

    { "Role": { "AssumeRolePolicyDocument": { "Version": "2012-10-17", "Statement": [ { "Action": "sts:AssumeRole", "Effect": "Allow", "Principal": { "Service": "ec2.amazonaws.com" } } ] }, "RoleId": "AROAIIZKPBKS2LEXAMPLE", "CreateDate": "2013-12-12T23:46:37.247Z", "RoleName": "s3access", "Path": "/", "Arn": "arn:aws:iam::123456789012:role/s3access" } }
  3. 建立存取政策並將其儲存為名為 ec2-role-access-policy.json 的文字檔案。例如,下列政策將 Amazon S3 的管理許可授予執行個體上運作的應用程式。

    { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": ["s3:*"], "Resource": ["*"] } ] }
  4. 使用put-role-policy命令將存取原則附加至角色。

    aws iam put-role-policy \ --role-name s3access \ --policy-name S3-Permissions \ --policy-document file://ec2-role-access-policy.json
  5. s3access-profile使用create-instance-profile指令建立名為的執行個體設定檔。

    aws iam create-instance-profile --instance-profile-name s3access-profile

    回應範例

    { "InstanceProfile": { "InstanceProfileId": "AIPAJTLBPJLEGREXAMPLE", "Roles": [], "CreateDate": "2013-12-12T23:53:34.093Z", "InstanceProfileName": "s3access-profile", "Path": "/", "Arn": "arn:aws:iam::123456789012:instance-profile/s3access-profile" } }
  6. s3access 角色新增至 s3access-profile 執行個體設定檔。

    aws iam add-role-to-instance-profile \ --instance-profile-name s3access-profile \ --role-name s3access

或者,您也可以使用下列 AWS Tools for Windows PowerShell 指令:

使用 IAM 角色啟動執行個體

建立 IAM 角色後,即可啟動執行個體,並在啟動期間將該角色與執行個體建立關聯。

重要

建立 IAM 角色後,可能需要幾秒鐘的時間來傳播許可。若您第一次嘗試啟動具備角色的執行個體失敗,請等待數秒鐘後再試一次。如需詳細資訊,請參閱《IAM 使用者指南》中的 IAM 角色故障診斷

New console
使用 IAM 角色啟動執行個體 (主控台)
  1. 請遵循該程序來啟動執行個體

  2. 展開 Advanced details (進階詳細資訊),在 IAM instance profile (IAM 執行個體設定檔) 中選取您建立的 IAM 角色。

    注意

    IAM instance profile (IAM 執行個體設定檔) 清單會顯示您在建立 IAM 角色時所建立的執行個體設定檔名稱。若您已使用主控台建立 IAM 角色,則會為您建立執行個體描述檔,且其名稱會與該角色相同。如果您使用 AWS CLI、API 或 AWS SDK 建立 IAM 角色,可能會以不同的方式命名您的執行個體設定檔。

  3. 設定執行個體所需的任何其他詳細資訊,或接受預設值,然後選取一個金鑰對。如需有關啟動執行個體精靈中欄位的資訊,請參閱 使用定義的參數啟動執行個體

  4. Summary (摘要) 面板中,檢閱您的執行個體組態,然後選擇 Launch instance (啟動執行個體)。

  5. 如果您在應用程式中使用 Amazon EC2 API 動作,請擷取執行個體上提供的 AWS 安全登入資料,並使用這些登入資料簽署請求。 AWS SDK 會為您執行此動作。

    IMDSv2IMDSv1
    IMDSv2
    PS C:\> [string]$token = Invoke-RestMethod -Headers @{"X-aws-ec2-metadata-token-ttl-seconds" = "21600"} -Method PUT -Uri http://169.254.169.254/latest/api/token
    PS C:\> Invoke-RestMethod -Headers @{"X-aws-ec2-metadata-token" = $token} -Method GET -Uri http://169.254.169.254/latest/meta-data/iam/security-credentials/role_name
    IMDSv1
    PS C:\> Invoke-RestMethod -uri http://169.254.169.254/latest/meta-data/iam/security-credentials/role_name
Old console
使用 IAM 角色啟動執行個體 (主控台)
  1. https://console.aws.amazon.com/ec2/ 開啟 Amazon EC2 主控台。

  2. 在儀表板上,選擇啟動執行個體

  3. 選取 AMI 和執行個體類型,然後選取 Next: Configure Instance Details (下一步:設定執行個體詳細資訊)

  4. Configure Instance Details (設定執行個體詳細資訊) 頁面上,針對 IAM role (IAM 角色),請選取您建立的 IAM 角色。

    注意

    IAM role (IAM 角色) 清單會顯示您在建立 IAM 角色時所建立的執行個體描述檔名稱。若您已使用主控台建立 IAM 角色,則會為您建立執行個體描述檔,且其名稱會與該角色相同。如果您使用 AWS CLI、API 或 AWS SDK 建立 IAM 角色,可能會以不同的方式命名您的執行個體設定檔。

  5. 設定其他詳細資訊,然後按照指示完成剩下的精靈,或選擇 Review and Launch (檢閱和啟動) 來接受預設設定並直接前往 Review Instance Launch (檢閱執行個體的啟動) 頁面。

  6. 檢閱設定,然後選擇 Launch (啟動),選擇金鑰對並啟動您的執行個體。

  7. 如果您在應用程式中使用 Amazon EC2 API 動作,請擷取執行個體上提供的 AWS 安全登入資料,並使用這些登入資料簽署請求。 AWS SDK 會為您執行此動作。

    IMDSv2IMDSv1
    IMDSv2
    PS C:\> [string]$token = Invoke-RestMethod -Headers @{"X-aws-ec2-metadata-token-ttl-seconds" = "21600"} -Method PUT -Uri http://169.254.169.254/latest/api/token
    PS C:\> Invoke-RestMethod -Headers @{"X-aws-ec2-metadata-token" = $token} -Method GET -Uri http://169.254.169.254/latest/meta-data/iam/security-credentials/role_name
    IMDSv1
    PS C:\> Invoke-RestMethod -uri http://169.254.169.254/latest/meta-data/iam/security-credentials/role_name
Command line

您可以使用在 AWS CLI 啟動期間將角色與執行個體相關聯。您必須在命令中指定執行個體描述檔。

使用 IAM 角色啟動執行個體 (AWS CLI)
  1. 使用 run-instances 命令來啟動使用執行個體描述檔的執行個體。下列範例說明如何啟動具備執行個體描述檔的執行個體。

    aws ec2 run-instances \ --image-id ami-11aa22bb \ --iam-instance-profile Name="s3access-profile" \ --key-name my-key-pair \ --security-groups my-security-group \ --subnet-id subnet-1a2b3c4d

    或者,使用視窗New-EC2Instance工具 PowerShell 指令。

  2. 如果您在應用程式中使用 Amazon EC2 API 動作,請擷取執行個體上提供的 AWS 安全登入資料,並使用這些登入資料簽署請求。 AWS SDK 會為您執行此動作。

    curl http://169.254.169.254/latest/meta-data/iam/security-credentials/role_name

將 IAM 角色連接至執行個體

若要將 IAM 角色連接至無角色的執行個體,則執行個體可以處於 stoppedrunning 狀態。

Console
將 IAM 角色連接至執行個體 (主控台)
  1. https://console.aws.amazon.com/ec2/ 開啟 Amazon EC2 主控台。

  2. 在導覽窗格中,選擇 Instances (執行個體)。

  3. 選取執行個體,選取 動作安全性修改 IAM 角色

  4. 選取要連接至執行個體的 IAM 角色,然後選取 Save (儲存)

Command line
將 IAM 角色連接至執行個體 (AWS CLI)
  1. 您可視需要描述執行個體來取得欲連接角色的執行個體 ID。

    aws ec2 describe-instances
  2. 透過指定執行個體設定檔,使用associate-iam-instance-profile命令將 IAM 角色附加至執行個體。您可使用執行個體描述檔的 Amazon Resource Name (ARN) 或其名稱。

    aws ec2 associate-iam-instance-profile \ --instance-id i-1234567890abcdef0 \ --iam-instance-profile Name="TestRole-1"

    回應範例

    { "IamInstanceProfileAssociation": { "InstanceId": "i-1234567890abcdef0", "State": "associating", "AssociationId": "iip-assoc-0dbd8529a48294120", "IamInstanceProfile": { "Id": "AIPAJLNLDX3AMYZNWYYAY", "Arn": "arn:aws:iam::123456789012:instance-profile/TestRole-1" } } }

或者,您也可以使用下列適用於 Windows PowerShell 指令的工具:

取代 IAM 角色

若要取代已擁有連接 IAM 角色之執行個體上的 IAM 角色,則執行個體必須處於 running 狀態。如果您想要變更執行個體上的 IAM 角色,但不中斷現有的角色,您可以這麼做。例如,您可以這麼做確保執行個體上應用程式執行的 API 動作不會中斷。

Console
取代執行個體的 IAM 角色
  1. https://console.aws.amazon.com/ec2/ 開啟 Amazon EC2 主控台。

  2. 在導覽窗格中,選擇 Instances (執行個體)。

  3. 選取執行個體,選取 動作安全性修改 IAM 角色

  4. 選取要連接至執行個體的 IAM 角色,然後選取 Save (儲存)

Command line
取代執行個體的 IAM 角色 (AWS CLI)
  1. 您可視需要描述您的 IAM 執行個體描述檔關聯,以取得 IAM 執行個體描述檔欲取代的關聯 ID。

    aws ec2 describe-iam-instance-profile-associations
  2. 使用 replace-iam-instance-profile-關聯命令來取代IAM 執行個體設定檔,方法是指定現有執行個體設定檔的關聯 ID,以及應取代它的 ARN 或執行個體設定檔名稱。

    aws ec2 replace-iam-instance-profile-association \ --association-id iip-assoc-0044d817db6c0a4ba \ --iam-instance-profile Name="TestRole-2"

    回應範例

    { "IamInstanceProfileAssociation": { "InstanceId": "i-087711ddaf98f9489", "State": "associating", "AssociationId": "iip-assoc-09654be48e33b91e0", "IamInstanceProfile": { "Id": "AIPAJCJEDKX7QYHWYK7GS", "Arn": "arn:aws:iam::123456789012:instance-profile/TestRole-2" } } }

或者,您也可以使用下列適用於 Windows PowerShell 指令的工具:

分離 IAM 角色

您可從運作中或停止的執行個體分離 IAM 角色。

Console
分離 IAM 角色和執行個體
  1. https://console.aws.amazon.com/ec2/ 開啟 Amazon EC2 主控台。

  2. 在導覽窗格中,選擇 Instances (執行個體)。

  3. 選取執行個體,選取 動作安全性修改 IAM 角色

  4. 針對 IAM role (IAM 角色),選擇 No IAM Role (無 IAM 角色)。選擇 Save (儲存)。

  5. 在確認對話方塊中,輸入 Detach (分離),然後選擇 Detach (分離)

Command line
分離 IAM 角色和執行個體 (AWS CLI)
  1. 如有必要,請使用 describe-iam-instance-profile- sociation 描述您的 IAM 執行個體設定檔關聯,並取得要分離之 IAM 執行個體設定檔的關聯 ID。

    aws ec2 describe-iam-instance-profile-associations

    回應範例

    { "IamInstanceProfileAssociations": [ { "InstanceId": "i-088ce778fbfeb4361", "State": "associated", "AssociationId": "iip-assoc-0044d817db6c0a4ba", "IamInstanceProfile": { "Id": "AIPAJEDNCAA64SSD265D6", "Arn": "arn:aws:iam::123456789012:instance-profile/TestRole-2" } } ] }
  2. 使用命disassociate-iam-instance-profile令,使用其關聯 ID 卸離 IAM 執行個體設定檔。

    aws ec2 disassociate-iam-instance-profile --association-id iip-assoc-0044d817db6c0a4ba

    回應範例

    { "IamInstanceProfileAssociation": { "InstanceId": "i-087711ddaf98f9489", "State": "disassociating", "AssociationId": "iip-assoc-0044d817db6c0a4ba", "IamInstanceProfile": { "Id": "AIPAJEDNCAA64SSD265D6", "Arn": "arn:aws:iam::123456789012:instance-profile/TestRole-2" } } }

或者,您也可以使用下列適用於 Windows PowerShell 指令的工具:

根據存取活動產生 IAM 角色的政策

當您第一次為應用程式建立 IAM 角色時,有時可能會授予超出所需的許可。在生產環境中啟動應用程式之前,您可以根據 IAM 角色的存取活動產生 IAM 政策。IAM Access Analyzer 會檢閱您的 AWS CloudTrail 記錄檔,並產生政策範本,其中包含指定日期範圍內角色已使用的許可。您可以使用範本建立具有精細許可的受管政策,然後將其連接至 IAM 角色。如此一來,您只會針對特定使用案例授與角色與 AWS 資源互動所需的權限。這有助於您符合授予最低權限的最佳實務。若要進一步了解,請參閱 IAM 使用者指南中的根據存取活動產生政策