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

Amazon EC2 的 IAM 的角色

應用程式必須使用 AWS 登入資料簽署它們的 API 請求。因此,若您是應用程式開發人員,對於在 EC2 執行個體上運作的應用程式,您會需要其登入資料的管理策略。例如,您可安全將 AWS 登入資料分發給執行個體,讓其上運作的應用程式能夠使用此登入資料來簽署請求,同時避免其他使用者取得您的登入資料。然而,安全將登入資料分發給所有執行個體的挑戰重重,尤其是分發給 AWS 代您建立的執行個體,例如 Spot 執行個體或 Auto Scaling 群組內的執行個體。您亦必須在更換 AWS 登入資料時,能夠更新每個執行個體的登入資料。

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

  1. 建立 IAM 角色。

  2. 定義可擔任這個角色的帳戶或 AWS 服務。

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

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

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

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

建立 IAM 角色時,請與最低權限 IAM 政策建立關聯,以限制對應用程式所需之特定 API 呼叫的存取。

您無法將多個 IAM 角色連接至單一執行個體,但您可以將單一 IAM 角色連接至多個執行個體。如需建立 IAM 角色的詳細資訊,請參閱IAM 使用者指南中的角色

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

執行個體描述檔

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

若您使用 AWS CLI、API 或 AWS 開發套件來建立角色,則建立角色與執行個體描述檔為不同動作,且可以使用不同名稱。若您接著使用 AWS CLI、API 或 AWS 開發套件來啟動具備 IAM 角色的執行個體,或以相同方式將 IAM 角色連接至執行個體,請指定執行個體描述檔名稱。

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

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

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

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

警告

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

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

IMDSv2
[ec2-user ~]$ TOKEN=`curl -X PUT "http://169.254.169.254/latest/api/token" -H "X-aws-ec2-metadata-token-ttl-seconds: 21600"` \ && curl -H "X-aws-ec2-metadata-token: $TOKEN" -v http://169.254.169.254/latest/meta-data/iam/security-credentials/s3access
IMDSv1
[ec2-user ~]$ curl 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 開發套件、AWS CLI 和 適用於 Windows PowerShell 的 工具 會自動從 EC2 執行個體中繼資料服務取得登入資料並加以使用。欲使用暫時安全登入資料在執行個體外部進行呼叫 (如為了測試 IAM 政策),您必須提供存取金鑰、私有金鑰和工作階段字符。如需詳細資訊,請參閱IAM 使用者指南中的使用暫時安全登入資料來請求 AWS 資源的存取

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

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

若要讓 IAM 使用者能夠啟動具備 IAM 角色的執行個體,或讓其能夠為現有執行個體連接 IAM 角色或加以取代,您必須授予該使用者將角色傳遞至執行個體的許可。

下列 IAM 政策授予使用者啟動具備 IAM 角色的執行個體 (ec2:RunInstances) 之許可,或讓其能夠為現有執行個體 (ec2:AssociateIamInstanceProfileec2:ReplaceIamInstanceProfileAssociation) 連接 IAM 角色或加以取代。

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

此政策將資源指定為 "*",藉此授予 IAM 使用者存取您所有角色的許可。然而,若使用者啟動的執行個體具備您的角色 (現有或稍後建立的),請考量他們是否會被授予不需要或不應具備的許可。

使用 IAM 角色

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

建立IAM 角色

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

使用 IAM 主控台建立 IAM 角色

  1. 開啟位於 https://console.aws.amazon.com/iam/ 的 IAM 主控台。

  2. 在導覽窗格中,選擇 Roles (角色)、Create role (建立新角色)。

  3. Select role type (選取角色類型) 頁面上,選擇 EC2EC2 使用案例。選擇 Next: Permissions (下一步:許可)

  4. Attach permissions policy (連接許可政策) 頁面上,選取授予您執行個體存取所需資源權限的 AWS 受管政策。

  5. Review (檢閱) 頁面上輸入角色的名稱,然後選擇 Create role (建立角色)

或者,您可使用 AWS CLI 來建立 IAM 角色。下列範例利用允許角色使用 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. 使用 create-instance-profile 命令建立名為 s3access-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

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

啟動具備 IAM 角色的執行個體

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

重要

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

使用 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 開發套件建立 IAM 角色,您可能已給予執行個體描述檔不同名稱。

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

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

  7. 若您的應用程式使用 Amazon EC2 API 動作,請擷取執行個體上可用的 AWS 安全登入資料,並用其來簽署請求。AWS 開發套件會為您執行此動作。

    IMDSv2
    [ec2-user ~]$ TOKEN=`curl -X PUT "http://169.254.169.254/latest/api/token" -H "X-aws-ec2-metadata-token-ttl-seconds: 21600"` \ && curl -H "X-aws-ec2-metadata-token: $TOKEN" –v http://169.254.169.254/latest/meta-data/iam/security-credentials/role_name
    IMDSv1
    [ec2-user ~]$ curl http://169.254.169.254/latest/meta-data/iam/security-credentials/role_name

或者,您可在啟動期間使用 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 適用於 Windows PowerShell 的 工具 命令。

  2. 若您的應用程式使用 Amazon EC2 API 動作,請擷取執行個體上可用的 AWS 安全登入資料,並用其來簽署請求。AWS 開發套件會為您執行此動作。

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

將 IAM 角色連接至執行個體

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

新的主控台

將 IAM 角色連接至執行個體 (主控台)

  1. https://console.aws.amazon.com/ec2/ 開啟 Amazon EC2 主控台。

  2. 在導覽窗格中,選擇執行個體

  3. 選取執行個體,選擇動作執行個體設定修改 IAM 角色

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

舊版主控台

將 IAM 角色連接至執行個體 (主控台)

  1. https://console.aws.amazon.com/ec2/ 開啟 Amazon EC2 主控台。

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

  3. 選取執行個體,選擇 Actions (動作)Instance Settings (執行個體設定)Attach/Replace IAM role (連接/取代 IAM 角色)

  4. 選取欲連接至執行個體的 IAM 角色,然後選擇 Apply (套用)

將 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 動作不會中斷。

新的主控台

取代執行個體的 IAM 角色

  1. https://console.aws.amazon.com/ec2/ 開啟 Amazon EC2 主控台。

  2. 在導覽窗格中,選擇執行個體

  3. 選取執行個體,選擇動作執行個體設定修改 IAM 角色

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

舊版主控台

取代執行個體的 IAM 角色

  1. https://console.aws.amazon.com/ec2/ 開啟 Amazon EC2 主控台。

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

  3. 選取執行個體,選擇 Actions (動作)Instance Settings (執行個體設定)Attach/Replace IAM role (連接/取代 IAM 角色)

  4. 選取欲連接至執行個體的 IAM 角色,然後選擇 Apply (套用)

取代執行個體的 IAM 角色 (AWS CLI)

  1. 您可視需要描述您的 IAM 執行個體描述檔關聯,以取得 IAM 執行個體描述檔欲取代的關聯 ID。

    aws ec2 describe-iam-instance-profile-associations
  2. 使用 replace-iam-instance-profile-association 命令,指定現有執行個體描述檔的關聯 ID,並指定取代後的執行個體描述檔 ARN 或名稱,藉此取代 IAM 執行個體描述檔。

    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 角色。

新的主控台

分離 IAM 角色和執行個體

  1. https://console.aws.amazon.com/ec2/ 開啟 Amazon EC2 主控台。

  2. 在導覽窗格中,選擇執行個體

  3. 選取執行個體,選擇動作執行個體設定修改 IAM 角色

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

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

舊版主控台

分離 IAM 角色和執行個體

  1. https://console.aws.amazon.com/ec2/ 開啟 Amazon EC2 主控台。

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

  3. 選取執行個體,選擇 Actions (動作)Instance Settings (執行個體設定)Attach/Replace IAM role (連接/取代 IAM 角色)

  4. 針對 IAM role (IAM 角色),選擇 No Role (無角色)。選擇 Apply (套用)。

  5. 在確認對話方塊中,選擇 Yes, Detach (是,分離)。

分離 IAM 角色和執行個體 (AWS CLI)

  1. 您可視需要使用 describe-iam-instance-profile-associations 來描述您的 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 的 工具 命令: