スキップしてコンテンツを表示

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 エラーの発生を防ぐには、Amazon ECS のタスク定義に IAM ロールを含めます。

ECS コンテナエージェント構成ファイルで IAM ロールを有効にする必要があります。また、IAM ロールには、タスクがロールを使用し、API コールを行うために必要な権限がすべて含まれていることを確認してください。

注: 構成に問題があり、タスクが IAM タスクロールを見つけられない場合、そのタスクは Amazon Elastic Compute Cloud (Amazon EC2) インスタンスロールを使用します。

解決策

ECS コンテナエージェントが実行中であることを確認する

docker ps コマンドを実行します。

docker ps

注: インスタンスを再起動した場合、iptables のルールはデフォルトにリセットされます。リセットされないようにするには、次のいずれかのコマンドを実行してルールを保存します。

Amazon ECS 最適化 Amazon Linux Amazon マシンイメージ (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. bridge または default のネットワークモードにおいて、コンテナ内のタスクで IAM ロールを有効にするには、ECS_ENABLE_TASK_IAM_ROLEtrue に設定します。

    ECS_ENABLE_TASK_IAM_ROLE=true
  3. host ネットワークモードにおいて、コンテナ内のタスクで IAM ロールを有効にするには、ECS_ENABLE_TASK_IAM_ROLE_NETWORK_HOSTtrue に設定します。

    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 バージョンを使用する

コンテナで実行するアプリケーションは、AWS SDK バージョン 2016 以降を使用する必要があります。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年前
コメントはありません

関連するコンテンツ