跳至內容

我該如何在 Amazon ECS 中設定 IAM 任務角色,以避免在進行 API 呼叫時出現 "Access Denied" 錯誤?

2 分的閱讀內容
0

我想在 Amazon Elastic Container Service (Amazon ECS) 中設定 AWS Identity and Access Management (IAM) 任務角色,以避免在進行 API 呼叫時發生 "Access Denied" 錯誤。

簡短描述

為避免出現 Access Denied 錯誤,請將您的 IAM 角色加入 Amazon ECS 任務定義

您必須在 ECS 容器代理程式組態檔案中啟用 IAM 角色。並且,請確認您的 IAM 角色具有所有必需的權限,讓您的任務能使用該角色進行 API 呼叫。

**注意:**如果任務因組態問題而找不到 IAM 任務角色,則該任務將使用 Amazon Elastic Compute Cloud (Amazon EC2) 執行個體角色。

解決方法

確認 ECS 容器代理程式正在執行

執行 docker ps 命令:

docker ps

**注意:**如果您重新啟動執行個體,則 iptables 規則將會重設為預設值。為避免重設,請執行以下其中一個命令來儲存規則。

針對 Amazon ECS 最佳化的 Amazon Linux Amazon Machine Image (AMI):

sudo service iptables save

針對 Amazon ECS 最佳化的 Amazon Linux 2 AMI:

sudo iptables-save | sudo tee /etc/sysconfig/iptables && sudo systemctl enable --now iptables

在 ECS 容器代理程式組態檔案中開啟您的 IAM 角色

請完成以下步驟:

  1. 開啟您的 /etc/ecs/ecs.config 檔案。

  2. 若要為具有橋接預設網路模式的容器任務中啟用 IAM 角色,請將 ECS_ENABLE_TASK_IAM_ROLE 設定為 true

    ECS_ENABLE_TASK_IAM_ROLE=true
  3. 若要為具有主機網路模式的容器中任務啟用 IAM 角色,請將 ECS_ENABLE_TASK_IAM_ROLE_NETWORK_HOST 設為 true

    ECS_ENABLE_TASK_IAM_ROLE_NETWORK_HOST=true
  4. 若要更新組態檔案,請執行以下其中一個命令,重新啟動 ECS 容器代理程式:
    針對 Amazon ECS 最佳化的 Amazon Linux AMI:

    sudo stop ecs
    sudo start ecs

    針對 Amazon ECS 最佳化的 Amazon Linux 2 AMI:

    sudo systemctl restart ecs

更新 IAM 角色信任政策

若要將 IAM 角色指派給 Amazon ECS 任務,請更新您的 IAM 角色信任政策

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

更新 ECS 容器代理程式的 HTTP_PROXY 設定

如果您在 Amazon ECS 容器代理程式組態中使用 HTTP_PROXY,則套用以下 NO_PROXY 設定

NO_PROXY=169.254.169.254,169.254.170.2,/var/run/docker.sock

使用最新的 AWS SDK 版本

在您容器中執行的應用程式必須使用 2016 或更新版本的 AWS SDK。若要更新您的 AWS,請參閱 AWS SDK 和工具版本支援在 AWS 上建置的工具

為非針對 Amazon ECS 最佳化的 AMI 設定 iptables 規則

如果您使用非針對 Amazon ECS 最佳化的 AMI,請為 iptables 設定必要規則

使非 PID 1 的程序可使用環境變數

AWS_CONTAINER_CREDENTIALS_RELATIVE_URI 環境變數僅適用於容器內的 PID 1 程序。如果容器中執行多個程序或 init 程序,則非 PID 1 程序將無法使用該環境變數。

若要將環境變數設定為可供非 PID 1 程序使用,請在 .profile 檔案中匯出環境變數。例如,執行以下命令來匯出容器映像檔 Dockerfile 中的環境變數:

RUN echo 'export $(strings /proc/1/environ | grep AWS_CONTAINER_CREDENTIALS_RELATIVE_URI)' >> /root/.profile

**注意:**匯出環境變數時,會相依於字串和 grep 命令

相關資訊

Amazon EC2 Windows 執行個體額外組態

AWS 官方已更新 2 年前