タスク用の Windows IAM ロールの追加設定 - Amazon Elastic Container Service

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

タスク用の Windows IAM ロールの追加設定

重要

タスクロールを使用する Fargate 上にある Windows コンテナでは、これ以外のアクションは必要ありません。タスクロールを使用する EC2 上にある Windows コンテナについては、以下の手順に従います。

Windows 機能を使用するタスク用の IAM ロールでは、EC2 での追加の設定が必要になりますが、その設定の多くは、Linux コンテナインスタンスでタスク用の IAM ロールを設定する場合と類似です。Windows コンテナのタスク用の IAM ロールを設定にするには、以下の要件を満たす必要があります。

  • コンテナインスタンスを起動する際に、コンテナインスタンスのユーザーデータスクリプトの -EnableTaskIAMRole オプションを設定して、この機能を有効にする必要があります。EnableTaskIAMRoleは、タスクの Task IAM ロール機能をオンにします。例:

    <powershell> Import-Module ECSTools Initialize-ECSAgent -Cluster 'windows' -EnableTaskIAMRole </powershell>
  • タスクコンテナのブートストラップスクリプト用の IAM ロール に提供されているネットワーキングコマンドを使用してコンテナをブートストラップする必要があります。

  • タスク用の IAM ロールとポリシーを作成する必要があります。詳細については、「タスク用の IAM ロールとポリシーの作成」を参照してください。

  • タスク用に作成した IAM ロールを、タスク定義の登録時に指定する必要があります。または、タスクの実行時にオーバーライドとして指定する必要があります。詳細については、「タスク用の IAM ロールを指定する」を参照してください。

  • タスク認証情報プロバイダーの IAM ロールは、コンテナインスタンスのポート 80 を使用します。したがって、コンテナインスタンスでタスクの IAM ロールを設定にすると、コンテナはポートマッピングのホストポートにポート 80 を使用できません。コンテナをポート 80 で公開するには、負荷分散を使用するサービスをコンテナ用に設定することをお勧めします。ロードバランサーのポート 80 を使用できます。これにより、コンテナインスタンス上の別のホストポートにトラフィックをルーティングできます。詳細については、「負荷分散を使用して Amazon ECS サービストラフィックを分散する」を参照してください。

  • Windows インスタンスが再起動された場合は、プロキシインターフェイスを削除して、Amazon ECS コンテナエージェントを再度初期化し、認証情報プロキシを元に戻す必要があります。

タスクコンテナのブートストラップスクリプト用の IAM ロール

コンテナからコンテナインスタンスの認証情報プロキシにアクセスする前に、必要なネットワーキングコマンドを使用してコンテナをブートストラップする必要があります。起動時にコンテナで次のコードのサンプルスクリプトを実行する必要があります。

注記

Windows で awsvpc ネットワークモードを使用している場合は、このスクリプトを実行する必要はありません。

Powershell を含む Windows コンテナを実行する場合は、次のスクリプトを使用します。

# Copyright Amazon.com Inc. or its affiliates. All Rights Reserved. # # Licensed under the Apache License, Version 2.0 (the "License"). You may # not use this file except in compliance with the License. A copy of the # License is located at # # http://aws.amazon.com/apache2.0/ # # or in the "license" file accompanying this file. This file is distributed # on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either # express or implied. See the License for the specific language governing # permissions and limitations under the License. $gateway = (Get-NetRoute | Where { $_.DestinationPrefix -eq '0.0.0.0/0' } | Sort-Object RouteMetric | Select NextHop).NextHop $ifIndex = (Get-NetAdapter -InterfaceDescription "Hyper-V Virtual Ethernet*" | Sort-Object | Select ifIndex).ifIndex New-NetRoute -DestinationPrefix 169.254.170.2/32 -InterfaceIndex $ifIndex -NextHop $gateway -PolicyStore ActiveStore # credentials API New-NetRoute -DestinationPrefix 169.254.169.254/32 -InterfaceIndex $ifIndex -NextHop $gateway -PolicyStore ActiveStore # metadata API

コマンドシェルのみを持つ Windows コンテナを実行する場合は、次のスクリプトを使用します。

# Copyright Amazon.com Inc. or its affiliates. All Rights Reserved. # # Licensed under the Apache License, Version 2.0 (the "License"). You may # not use this file except in compliance with the License. A copy of the # License is located at # # http://aws.amazon.com/apache2.0/ # # or in the "license" file accompanying this file. This file is distributed # on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either # express or implied. See the License for the specific language governing # permissions and limitations under the License. for /f "tokens=1" %i in ('netsh interface ipv4 show interfaces ^| findstr /x /r ".*vEthernet.*"') do set interface=%i for /f "tokens=3" %i in ('netsh interface ipv4 show addresses %interface% ^| findstr /x /r ".*Default.Gateway.*"') do set gateway=%i netsh interface ipv4 add route prefix=169.254.170.2/32 interface="%interface%" nexthop="%gateway%" store=active # credentials API netsh interface ipv4 add route prefix=169.254.169.254/32 interface="%interface%" nexthop="%gateway%" store=active # metadata API