使用服務連結角色 - AWS Identity and Access Management

使用服務連結角色

服務連結角色是一種獨特的 IAM 角色類型,可直接連結到 AWS 服務。服務連結的角色由服務預先定義,並包含所有該服務代表您呼叫其他 AWS 服務所需的許可。連結的服務也定義您如何建立、修改和刪除服務連結的角色。服務可能會自動建立或刪除角色。做為服務中精靈或程序一部分,它也許可讓您建立、修改或刪除角色。或者,它可能要求您使用 IAM 來建立或刪除角色。不論以何種方式,服務連結角色可讓設定服務更為簡單,因為您不必為代您完成動作的服務手動新增必要許可。

連結的服務定義其服務連結角色的許可,除非另有定義,否則僅有該服務可以擔任其角色。定義的許可包括信任政策和許可政策,並且該許可政策不能連接到任何其他 IAM 實體。

您必須先刪除角色的相關資源,才能刪除角色。這可保護您的資源,避免您不小心移除資源的存取許可。

提示

如需哪些服務支援使用服務連結角色的資訊,請參閱 AWS可搭配 IAM 運作的 服務,並尋找 Service-Linked Role (服務連結角色) 欄中顯示 Yes (是) 的服務。選擇具有連結的 Yes (是),以檢視該服務的服務連結角色文件。

服務連結角色許可

您必須設定 IAM 實體 (使用者或角色) 的許可,允許使用者或角色建立或編輯服務連結角色。

注意

服務連結角色的 ARN 包括服務委託人,這在下列政策中以 SERVICE-NAME.amazonaws.com 形式指出。不要嘗試猜測服務委託人,因為它是區分大小寫,且格式可以因各 AWS 服務而異。若要檢視服務的服務委託人,請參閱該服務連結的角色文件。

允許 IAM 實體建立特定服務連結角色

將下列政策新增至需要建立服務連結角色的 IAM 實體。

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "iam:CreateServiceLinkedRole", "Resource": "arn:aws:iam::*:role/aws-service-role/SERVICE-NAME.amazonaws.com/SERVICE-LINKED-ROLE-NAME-PREFIX*", "Condition": {"StringLike": {"iam:AWSServiceName": "SERVICE-NAME.amazonaws.com"}} }, { "Effect": "Allow", "Action": [ "iam:AttachRolePolicy", "iam:PutRolePolicy" ], "Resource": "arn:aws:iam::*:role/aws-service-role/SERVICE-NAME.amazonaws.com/SERVICE-LINKED-ROLE-NAME-PREFIX*" } ] }

若要允許 IAM 實體建立任何服務連結角色

將下列陳述式新增至需要建立服務連結角色的 IAM 實體的許可政策,或包含所需政策的任何服務角色。此政策陳述式不允許 IAM 實體連接政策到角色。

{ "Effect": "Allow", "Action": "iam:CreateServiceLinkedRole", "Resource": "arn:aws:iam::*:role/aws-service-role/*" }

若要允許 IAM 實體編輯任何服務連結角色的說明

將下列陳述式新增至需要編輯服務連結角色說明或任何服務角色的 IAM 實體的許可政策。

{ "Effect": "Allow", "Action": "iam:UpdateRoleDescription", "Resource": "arn:aws:iam::*:role/aws-service-role/*" }

若要允許 IAM 實體刪除特定服務連結角色

將下列陳述式新增至需要刪除服務連結角色的 IAM 實體的許可政策。

{ "Effect": "Allow", "Action": [ "iam:DeleteServiceLinkedRole", "iam:GetServiceLinkedRoleDeletionStatus" ], "Resource": "arn:aws:iam::*:role/aws-service-role/SERVICE-NAME.amazonaws.com/SERVICE-LINKED-ROLE-NAME-PREFIX*" }

允許 IAM 實體刪除任何服務連結角色

將下列陳述式新增至需要刪除服務連結角色 (但並非服務角色) 的 IAM 實體許可政策。

{ "Effect": "Allow", "Action": [ "iam:DeleteServiceLinkedRole", "iam:GetServiceLinkedRoleDeletionStatus" ], "Resource": "arn:aws:iam::*:role/aws-service-role/*" }

允許 IAM 實體將現有角色傳遞到服務

有些 AWS 服務可讓您將現有角色傳遞到服務,而不是建立新的服務連結角色。若要執行此操作,使用者必須擁有傳遞角色給服務的許可。在需要傳遞角色之 IAM 實體的許可政策中,新增下列陳述式。透過這個政策陳述式,實體也可以檢視角色清單,並從中選擇要傳遞的角色。如需詳細資訊,請參閱 授予使用者將角色傳遞至 AWS 服務的許可

{ "Effect": "Allow", "Action": [ "iam:ListRoles", "iam:PassRole" ], "Resource": "arn:aws:iam::123456789012:role/my-role-for-XYZ" }

傳輸服務連結角色許可

可將服務連結角色授予的許可間接轉移給其他使用者和角色。當您允許服務在其他服務中執行操作時,該原始服務以後就可以使用這些許可。如果另一個使用者或角色具有在原始服務中執行動作的許可,則原始服務可以擔任該角色,並存取其他服務中的資源。這表示其他使用者或角色可以間接存取其他服務。

例如,建立 Amazon RDS 資料庫執行個體時,RDS 會為您建立服務連結角色。此角色可讓 RDS 在您每次編輯資料庫執行個體時代您呼叫 Amazon EC2、Amazon SNS、Amazon SNS、Amazon CloudWatch Logs 和 Amazon Kinesis。如果您建立政策以允許您帳戶或另一個帳戶中的使用者和角色對該 Amazon RDS 執行個體具有相同的許可,則 RDS 仍然可以使用該角色代他們對 EC2、SNS、CloudWatch Logs 和 Kinesis 進行變更。新使用者或角色可以間接編輯這些其他服務中的資源。

建立服務連結角色

您用來建立服務連結角色的方法取決於服務。在某些情況下,您不需要手動建立一個服務連結角色。例如,當您在服務中完成特定動作 (例如建立資源),該服務可能會為您建立服務連結角色。或者,您若在服務開始支援服務連結角色之前已在使用該服務,則服務可能已在您的帳戶中自動建立角色。如需進一步了解,請參閱 顯示在我的 AWS 帳戶中的新角色

在其他情況下,服務可能支援使用服務主控台、API 或 CLI 手動建立服務連結角色。如需哪些服務支援使用服務連結角色的資訊,請參閱AWS可搭配 IAM 運作的 服務,並尋找 Service-Linked Role (服務連結角色) 欄中顯示 Yes (是) 的服務。若要了解服務是否支援建立服務連結角色,請選擇連結以檢視該服務的服務連結角色的文件。

如果服務不支援建立角色,則可以使用 IAM 來建立服務連結角色。

重要

服務連結角色算作您的 AWS 帳戶中的 IAM 角色限制,但是如果您已達到限制,仍然可以在您的帳戶中建立服務連結角色。只有服務連結角色可以超過限制。

建立服務連結角色 (主控台)

在 IAM 中建立服務連結角色之前,了解連結的服務是否自動建立服務連結角色,此外,了解是否您可以從服務主控台、API 或 CLI 建立角色。

建立服務連結角色 (主控台)

  1. 登入 AWS Management Console,並開啟位於 https://console.aws.amazon.com/iam/ 的 IAM 主控台。

  2. 在 IAM 主控台的導覽窗格中,選擇 Roles (角色)。然後選擇 Create role (建立角色)。

  3. 選擇 AWS 服務角色類型,然後選擇您要允許擔任此角色的服務。

  4. 選擇服務的使用案例。如果指定的服務只有一個使用案例,則會自動選取它。服務會定義使用案例,以包含服務所需的信任政策。然後選擇 Next: Permissions (下一步:許可)。

  5. 選擇一或多個許可政策以連接至角色。根據您選取的使用案例,服務可能可以執行下列任何操作:

    • 定義角色所使用的許可

    • 可讓您從有限的一組許可中進行選擇

    • 可讓您從任何許可中進行選擇

    • 可讓您目前無法選取政策、稍後建立政策,然後將它們連接至角色.

    選取可指派您要角色具有之許可政策旁的方塊,然後選擇 Next: Tags (下一步:標籤)

    注意

    您指定的許可適用於任何使用角色的實體。角色預設沒有任何許可。

  6. 選擇 Next:Review (下一步:檢閱)。您不能在建立角色時,將標籤連接至服務連結的角色。如需有關在 IAM 中使用標籤的詳細資訊,請參閱 標記 IAM 資源

  7. 針對 Role name (角色名稱),服務會定義角色名稱自訂程度。如果服務定義角色的名稱,則此選項無法編輯。在其他情況下,服務可能會定義角色的字首,並且可讓您鍵入選用後綴。

    如果可能,輸入要新增至預設名稱的角色名稱後綴。此後綴可協助您識別此角色的用途。角色名稱在您的 AWS 帳戶內必須是獨一無二的。它們無法透過大小寫進行區分。例如,您無法建立名為 <service-linked-role-name>_SAMPLE<service-linked-role-name>_sample 的角色。因為有各種實體可能會參照角色,所以您無法在建立角色之後編輯角色名稱。

  8. (選擇性) 針對 Role description (角色描述),編輯新服務連結角色的描述。

  9. 檢閱角色,然後選擇 Create role (建立角色)

建立服務連結角色 (AWS CLI)

在 IAM 中建立服務連結角色之前,了解連結的服務是否自動建立服務連結角色,並且了解是否您可以從服務的 CLI 建立角色。如果不支援服務 CLI,您可以使用 IAM 命令,使用服務擔任該角色所需的信任政策與內嵌政策來建立服務連結角色。

建立服務連結角色 (AWS CLI)

執行以下命令:

aws iam create-service-linked-role --aws-service-name SERVICE-NAME.amazonaws.com

建立服務連結角色 (AWS API)

在 IAM 中建立服務連結角色之前,了解連結的服務是否自動建立服務連結角色,並且了解是否您可以從服務的 API 建立角色。如果不支援服務 API,您可以使用 AWS API,使用服務擔任該角色所需的信任政策與內嵌政策來建立服務連結角色。

若要建立服務連結角色 (AWS API)

使用 CreateServiceLinkedRole API 呼叫。在請求中指定 SERVICE_NAME_URL.amazonaws.com 的服務名稱。

例如,要建立 Lex Bots 服務連結的角色,使用 lex.amazonaws.com

編輯服務連結角色

您用來編輯服務連結角色的方法取決於服務。有些服務也許可讓您從服務主控台、API 或 CLI 編輯服務連結角色的許可。不過,因為有各種實體可能會參考服務連結角色,所以您無法在建立角色之後變更角色名稱。您可以從 IAM 主控台、API 或 CLI 編輯任何角色的說明。

如需哪些服務支援使用服務連結角色的資訊,請參閱AWS可搭配 IAM 運作的 服務,並尋找 Service-Linked Role (服務連結角色) 欄中顯示 Yes (是) 的服務。若要了解服務是否支援編輯服務連結角色,請選擇連結以檢視該服務的服務連結角色的文件。

編輯服務連結角色描述 (主控台)

您可以使用 IAM 主控台來編輯服務連結角色的說明。

編輯服務連結角色的說明 (主控台)

  1. 在 IAM 主控台的導覽窗格中,選擇 Roles (角色)

  2. 選擇要修改之角色的名稱。

  3. Role description (角色說明) 的最右邊,選擇 Edit (編輯)。

  4. 在方塊中鍵入新的說明,然後選擇 Save (儲存)。

編輯服務連結角色描述 (AWS CLI)

您可以從 AWS CLI 使用 IAM 命令來編輯服務連結角色的說明。

變更服務連結角色的說明 (AWS CLI)

  1. (選用) 若要檢視角色的目前說明,請執行下列命令:

    aws iam get-role --role-name ROLE-NAME

    透過 CLI 命令,使用角色名稱 (而非 ARN) 來參照角色。例如,如果角色具有下列 ARN:arn:aws:iam::123456789012:role/myrole,請將角色參照為 myrole

  2. 若要更新服務連結角色的說明,請執行下列命令:

    aws iam update-role --role-name ROLE-NAME --description OPTIONAL-DESCRIPTION

編輯服務連結角色描述 (AWS API)

您可以使用 AWS API 來編輯服務連結角色的說明。

若要變更服務連結角色的說明 (AWS API)

  1. (選用) 若要檢視角色的目前說明,請呼叫以下操作並指定角色的名稱:

    AWS API:GetRole

  2. (選用) 若要更新角色的說明,請呼叫以下操作並指定角色的名稱 (和選用描述):

    AWS API:UpdateRole

刪除服務連結角色

您用來建立服務連結角色的方法取決於服務。在某些情況下,您不需要手動刪除一個服務連結角色。例如,當您在服務中完成特定動作 (例如移除資源),該服務可能會為您刪除服務連結角色。

在其他情況下,服務可能支援從服務主控台、API 或 AWS CLI 手動刪除服務連結角色。

如需哪些服務支援使用服務連結角色的資訊,請參閱AWS可搭配 IAM 運作的 服務,並尋找 Service-Linked Role (服務連結角色) 欄中顯示 Yes (是) 的服務。若要了解服務是否支援刪除服務連結角色,請選擇連結以檢視該服務的服務連結角色的文件。

如果服務不支援刪除角色,則您可以從 IAM 主控台、API 或 AWS CLI 刪除服務連結角色。若您不再使用需要服務連結角色的功能或服務,我們建議您刪除該角色。如此一來,您就沒有未主動監控或維護的未使用實體。然而,務必清除您的服務連結角色,之後才能將其刪除。

清除服務連結角色

您必須先確認服務連結角色沒有作用中的工作階段,並移除該角色使用的資源,之後才能使用 IAM 將其刪除。

檢查服務連結角色是否於 IAM 主控台有作用中的工作階段

  1. 登入 AWS Management Console,並開啟位於 https://console.aws.amazon.com/iam/ 的 IAM 主控台。

  2. 在 IAM 主控台的導覽窗格中,選擇 Roles (角色)。然後,選擇服務連結角色的名稱 (而非核取方塊)。

  3. 在所選角色的 Summary (摘要) 頁面中,選擇 Access Advisor (存取 Advisor) 分頁。

  4. Access Advisor (存取 Advisor) 分頁中,檢閱服務連結角色的近期活動。

    注意

    如果您不確定服務是否正在使用服務連結角色,您可以嘗試刪除該角色。如果服務正在使用該角色,則刪除會失敗,而您可以檢視正在使用該角色的區域。如果服務正在使用該角色,您必須先等到工作階段結束,才能刪除該角色。您無法撤銷服務連結角色的工作階段。

若要移除服務連結角色所使用的資源

如需哪些服務支援使用服務連結角色的資訊,請參閱AWS可搭配 IAM 運作的 服務,並尋找 Service-Linked Role (服務連結角色) 欄中顯示 Yes (是) 的服務。若要了解服務是否支援刪除服務連結角色,請選擇連結以檢視該服務的服務連結角色的文件。請參閱該服務的文件,以了解如何移除服務連結角色所使用的資源。

刪除服務連結角色 (主控台)

您可以使用 IAM 主控台刪除服務連結角色。

刪除服務連結角色 (主控台)

  1. 登入 AWS Management Console,並開啟位於 https://console.aws.amazon.com/iam/ 的 IAM 主控台。

  2. 在 IAM 主控台的導覽窗格中,選擇 Roles (角色)。然後,選擇您要刪除的角色名稱旁的核取方塊,而非名稱或資料列本身。

  3. 在頁面頂端的 Role actions (角色動作) 中選擇 Delete (刪除)。

  4. 在確認對話方塊中,檢閱上次存取資訊,以顯示每個所選取角色上次存取 AWS 服務的時間。這可協助您確認角色目前是否作用中。如果您想要繼續進行,請選擇 Yes, Delete (是,刪除) 來提交服務連結角色以進行刪除。

  5. 查看 IAM 主控台通知,監視服務連結角色刪除的進度。因為 IAM 服務連結角色刪除不同步,所以在您提交角色進行刪除之後,刪除任務可能會成功或失敗。

    • 如果任務成功,則會從清單中移除角色,而且成功通知會出現在頁面頂端。

    • 如果任務失敗,您可以從通知中選擇 View details (檢視詳細資訊)View Resources (檢視資源),以了解刪除失敗的原因。如果刪除因角色使用服務資源而失敗,則服務傳回該資訊時,通知會包含資源清單。您接著可以清除資源,並重新提交刪除。

      注意

      根據服務所傳回的資訊,您可能需要重複此程序數次。例如,您的服務連結角色可能會使用六個資源,而且您的服務可能傳回其中五項的相關資訊。如果您清除五個資源,並重新提交刪除角色,則刪除會失敗,而且服務會報告還有一個資源。服務可能會傳回所有資源、其中一些資源,或未報告任何資源。

    • 如果任務失敗,而且通知未包含資源清單,則服務可能未傳回該資訊。若要了解如何清除該服務的資源,請參閱AWS可搭配 IAM 運作的 服務。請在表格中找到您的服務,然後選擇 Yes (是) 連結,檢視該服務的服務連結角色文件。

刪除服務連結角色 (AWS CLI)

您可以從 AWS CLI 使用 IAM 命令,刪除服務連結角色。

刪除服務連結角色 (AWS CLI)

  1. 如果您知道要刪除的服務相關角色的名稱,請輸入以下命令以列出您帳戶中的角色:

    aws iam get-role --role-name role-name

    透過 CLI 命令,使用角色名稱 (而非 ARN) 來參照角色。例如,如果角色具有下列 ARN:arn:aws:iam::123456789012:role/myrole,請將角色參照為 myrole

  2. 因為無法刪除正在使用或具有相關聯資源的服務連結角色,所以您必須提交刪除要求。如果不符合這些條件,則可以拒絕該請求。您必須從回應中擷取 deletion-task-id,以檢查刪除任務的狀態。鍵入下列命令,以提交服務連結角色刪除要求:

    aws iam delete-service-linked-role --role-name role-name
  3. 鍵入下列命令,以檢查刪除任務的狀態:

    aws iam get-service-linked-role-deletion-status --deletion-task-id deletion-task-id

    刪除任務的狀態可以是 NOT_STARTEDIN_PROGRESSSUCCEEDEDFAILED。如果刪除失敗,則呼叫會傳回失敗原因,以進行疑難排解。如果刪除因角色使用服務資源而失敗,則服務傳回該資訊時,通知會包含資源清單。您接著可以清除資源,並重新提交刪除。

    注意

    根據服務所傳回的資訊,您可能需要重複此程序數次。例如,您的服務連結角色可能會使用六個資源,而且您的服務可能傳回其中五項的相關資訊。如果您清除五個資源,並重新提交刪除角色,則刪除會失敗,而且服務會報告還有一個資源。服務可能會傳回所有資源、其中一些資源,或未報告任何資源。若要了解如何清除未報告任何資源之服務的資源,請參閱AWS可搭配 IAM 運作的 服務。請在表格中找到您的服務,然後選擇 Yes (是) 連結,檢視該服務的服務連結角色文件。

刪除服務連結角色 (AWS API)

您可以使用 AWS API 刪除服務連結角色。

若要刪除服務連結角色 (AWS API)

  1. 若要提交服務連結角色的刪除請求,請呼叫 DeleteServiceLinkedRole。在請求中,指定角色名稱。

    因為無法刪除正在使用或具有相關聯資源的服務連結角色,所以您必須提交刪除要求。如果不符合這些條件,則可以拒絕該請求。您必須從回應中擷取 DeletionTaskId,以檢查刪除任務的狀態。

  2. 若要檢查刪除的狀態,請呼叫 GetServiceLinkedRoleDeletionStatus。在請求中,指定 DeletionTaskId

    刪除任務的狀態可以是 NOT_STARTEDIN_PROGRESSSUCCEEDEDFAILED。如果刪除失敗,則呼叫會傳回失敗原因,以進行疑難排解。如果刪除因角色使用服務資源而失敗,則服務傳回該資訊時,通知會包含資源清單。您接著可以清除資源,並重新提交刪除。

    注意

    根據服務所傳回的資訊,您可能需要重複此程序數次。例如,您的服務連結角色可能會使用六個資源,而且您的服務可能傳回其中五項的相關資訊。如果您清除五個資源,並重新提交刪除角色,則刪除會失敗,而且服務會報告還有一個資源。服務可能會傳回所有資源、其中一些資源,或未報告任何資源。若要了解如何清除未報告任何資源之服務的資源,請參閱AWS可搭配 IAM 運作的 服務。請在表格中找到您的服務,然後選擇 Yes (是) 連結,檢視該服務的服務連結角色文件。