すべてのプロダクト
Search
ドキュメントセンター

Container Service for Kubernetes:Terraform を使用した ACK の有効化とサービスロールの割り当て

最終更新日:Sep 04, 2026

初めて Container Service for Kubernetes (ACK) を使用する場合は、Terraform を使用して ACK を有効化し、必要なサービスロールを割り当てます。

このトピックのサンプルコードは、ここここここ をクリックすると直接実行できます。

ACK コンソールで代わりにロールを認可するには、RAM ユーザー権限の管理をご参照ください。

前提条件

以下を確認してください。

  • RAM ユーザーの AccessKey ペア

    ルートアカウントではなく、RAM ユーザーを使用してください。権限を制限することで、認証情報が漏洩した場合の影響を軽減できます。
  • RAM ユーザーにアタッチする次のポリシーは、ここで使用する Terraform コマンドを実行するための最小限の権限を付与します。

    {
      "Version": "1",
      "Statement": [
        {
          "Effect": "Allow",
          "Action": [
            "ram:GetRole",
            "ram:ListRoles",
            "ram:AttachPolicyToRole",
            "ram:ListPoliciesForRole",
            "ram:CreateRole",
            "ram:DetachPolicyFromRole",
            "ram:DeleteRole"
          ],
          "Resource": "*"
        }
      ]
    }
  • Terraform ランタイム環境 (いずれか 1 つを選択):

    オプション

    最適な用途

    Terraform Explorer

    ブラウザベースのセットアップ、インストール不要

    Cloud Shell

    Terraform がプリインストールされ、認証情報が設定済み

    ローカルマシン

    不安定なネットワークまたはカスタム環境

使用する Terraform リソース

すべての例で、これらの Terraform リソースを使用します:

リソース

タイプ

目的

alicloud_ack_service

データソース

ACK を自動的に有効化

alicloud_ram_role

リソース

RAM ロールを作成

alicloud_ram_role_policy_attachment

リソース

ポリシーを RAM ロールにアタッチ

alicloud_ram_roles

データソース

指定されたフィルターに一致するアカウント内の RAM ロールを一覧表示

ステップ 1: ACK の有効化

  1. main.tf ファイルを含む作業ディレクトリを作成し、次の内容をコピーします。

    // ACK を有効化します。
    data "alicloud_ack_service" "open" {
        enable = "On"
        type   = "propayasgo"
    }
  2. Terraform ランタイム環境を初期化します。

    terraform init

    初期化が成功すると、次の出力が表示されます。

    Terraform has been successfully initialized!
    
    You may now begin working with Terraform. Try running "terraform plan" to see
    any changes that are required for your infrastructure. All Terraform commands
    should now work.
    
    If you ever set or change modules or backend configuration for Terraform,
    rerun this command to reinitialize your working directory. If you forget, other
    commands will detect it and remind you to do so if necessary.
  3. ACK を有効化します。

    terraform apply

    プロンプトが表示されたら、yes と入力し、[Enter] キーを押します。ACK 有効化の出力は次のとおりです。

    Apply complete! Resources: 0 added, 0 changed, 0 destroyed.

ステップ 2:ACK へのサービスロールの割り当て

Container Service for Kubernetes (ACK) でクラスターを作成する前に、アドオンがお客様に代わって他の Alibaba Cloud サービスにアクセスできるよう、Resource Access Management (RAM) サービスロールが必要です。

複数回実行しても安全です。既存のロールはスキップされ、不足しているロールのみが作成されます。

サービスロールと、それを使用する ACK コンポーネント:

ロール

アドオン

アクセス対象のクラウドサービス

AliyunCSManagedLogRole

ロギングコンポーネント

Simple Log Service (SLS)

AliyunCSManagedCmsRole

モニタリングコンポーネント

CloudMonitor、SLS

AliyunCSManagedCsiRole

ボリュームプラグイン

Elastic Compute Service (ECS)、File Storage NAS (NAS)、Object Storage Service (OSS)

AliyunCSManagedCsiPluginRole

ボリュームプラグイン (csi-plugin)

ECS

AliyunCSManagedCsiProvisionerRole

ボリュームプラグイン (csi-provisioner)

ECS、NAS、OSS

AliyunCSManagedVKRole

VK コンポーネント (ACK Serverless)

複数の Alibaba Cloud サービス

AliyunCSServerlessKubernetesRole

ACK Serverless と Edge のデフォルトロール

ECS、Virtual Private Cloud (VPC)、Server Load Balancer (SLB)、Alibaba Cloud DNS PrivateZone

AliyunCSKubernetesAuditRole

監査機能

SLS

AliyunCSManagedNetworkRole

ネットワークプラグイン

ECS、VPC

AliyunCSDefaultRole

ACK クラスター管理 (デフォルト)

ECS、VPC、SLB、Resource Orchestration Service (ROS)、Auto Scaling

AliyunCSManagedKubernetesRole

ACK マネージドクラスターと Edge クラスターのデフォルトロール

ECS、VPC、SLB、Container Registry

AliyunCSManagedArmsRole

ARMS コンポーネント

Application Real-Time Monitoring Service (ARMS)

AliyunCISDefaultRole

Container Intelligence Service (CIS)

ECS、VPC、SLB (診断)

AliyunOOSLifecycleHook4CSRole

ノードプールスケーリング (OOS)

ACK、ECS、PolarDB

AliyunCSManagedAutoScalerRole

オートスケーリングコンポーネント

ECS、ACK ノードプールリソース

ユースケースに応じてロールを選択してください。以下の変数ブロックで default リストを調整してください。

  1. main.tf に次のコードをコピーしてください:

    // 作成する RAM ロール。
    variable "roles" {
      type = list(object({
        name            = string
        policy_document = string
        description     = string
        policy_name     = string
      }))
      default = [
        {
          name            = "AliyunCSManagedLogRole"
          policy_document = "{\"Statement\":[{\"Action\":\"sts:AssumeRole\",\"Effect\":\"Allow\",\"Principal\":{\"Service\":[\"cs.aliyuncs.com\"]}}],\"Version\":\"1\"}"
          description     = "ACK クラスターのロギングコンポーネントがこのロールを引き受け、他の Alibaba Cloud サービスのリソースにアクセスします。"
          policy_name     = "AliyunCSManagedLogRolePolicy"
        },
        {
          name            = "AliyunCSManagedCmsRole"
          policy_document = "{\"Statement\":[{\"Action\":\"sts:AssumeRole\",\"Effect\":\"Allow\",\"Principal\":{\"Service\":[\"cs.aliyuncs.com\"]}}],\"Version\":\"1\"}"
          description     = "ACK クラスターのモニタリングコンポーネントがこのロールを引き受け、他の Alibaba Cloud サービスのリソースにアクセスします。"
          policy_name     = "AliyunCSManagedCmsRolePolicy"
        },
        {
          name            = "AliyunCSManagedCsiRole"
          policy_document = "{\"Statement\":[{\"Action\":\"sts:AssumeRole\",\"Effect\":\"Allow\",\"Principal\":{\"Service\":[\"cs.aliyuncs.com\"]}}],\"Version\":\"1\"}"
          description     = "ACK クラスターのボリュームプラグインがこのロールを引き受け、他の Alibaba Cloud サービスのリソースにアクセスします。"
          policy_name     = "AliyunCSManagedCsiRolePolicy"
        },
        {
          name            = "AliyunCSManagedCsiPluginRole"
          policy_document = "{\"Statement\":[{\"Action\":\"sts:AssumeRole\",\"Effect\":\"Allow\",\"Principal\":{\"Service\":[\"cs.aliyuncs.com\"]}}],\"Version\":\"1\"}"
          description     = "ACK クラスターのボリュームプラグインがこのロールを引き受け、他の Alibaba Cloud サービスのリソースにアクセスします。"
          policy_name     = "AliyunCSManagedCsiPluginRolePolicy"
        },
        {
          name            = "AliyunCSManagedCsiProvisionerRole"
          policy_document = "{\"Statement\":[{\"Action\":\"sts:AssumeRole\",\"Effect\":\"Allow\",\"Principal\":{\"Service\":[\"cs.aliyuncs.com\"]}}],\"Version\":\"1\"}"
          description     = "ACK クラスターのボリュームプラグインがこのロールを引き受け、他の Alibaba Cloud サービスのリソースにアクセスします。"
          policy_name     = "AliyunCSManagedCsiProvisionerRolePolicy"
        },
        {
          name            = "AliyunCSManagedVKRole"
          policy_document = "{\"Statement\":[{\"Action\":\"sts:AssumeRole\",\"Effect\":\"Allow\",\"Principal\":{\"Service\":[\"cs.aliyuncs.com\"]}}],\"Version\":\"1\"}"
          description     = "ACK Serverless クラスターの VK コンポーネントがこのロールを引き受け、他の Alibaba Cloud サービスのリソースにアクセスします。"
          policy_name     = "AliyunCSManagedVKRolePolicy"
        },
        {
          name            = "AliyunCSServerlessKubernetesRole"
          policy_document = "{\"Statement\":[{\"Action\":\"sts:AssumeRole\",\"Effect\":\"Allow\",\"Principal\":{\"Service\":[\"cs.aliyuncs.com\"]}}],\"Version\":\"1\"}"
          description     = "デフォルトでは、ACK クラスターがこのロールを引き受け、クラウドリソースにアクセスします。"
          policy_name     = "AliyunCSServerlessKubernetesRolePolicy"
        },
        {
          name            = "AliyunCSKubernetesAuditRole"
          policy_document = "{\"Statement\":[{\"Action\":\"sts:AssumeRole\",\"Effect\":\"Allow\",\"Principal\":{\"Service\":[\"cs.aliyuncs.com\"]}}],\"Version\":\"1\"}"
          description     = "ACK の監査機能がこのロールを引き受け、他の Alibaba Cloud サービスのリソースにアクセスします。"
          policy_name     = "AliyunCSKubernetesAuditRolePolicy"
        },
        {
          name            = "AliyunCSManagedNetworkRole"
          policy_document = "{\"Statement\":[{\"Action\":\"sts:AssumeRole\",\"Effect\":\"Allow\",\"Principal\":{\"Service\":[\"cs.aliyuncs.com\"]}}],\"Version\":\"1\"}"
          description     = "ACK クラスターのネットワークプラグインがこのロールを引き受け、他の Alibaba Cloud サービスのリソースにアクセスします。"
          policy_name     = "AliyunCSManagedNetworkRolePolicy"
        },
        {
          name            = "AliyunCSDefaultRole"
          policy_document = "{\"Statement\":[{\"Action\":\"sts:AssumeRole\",\"Effect\":\"Allow\",\"Principal\":{\"Service\":[\"cs.aliyuncs.com\"]}}],\"Version\":\"1\"}"
          description     = "デフォルトでは、ACK クラスターの管理時に ACK がこのロールを引き受け、他の Alibaba Cloud サービスのリソースにアクセスします。"
          policy_name     = "AliyunCSDefaultRolePolicy"
        },
        {
          name            = "AliyunCSManagedKubernetesRole"
          policy_document = "{\"Statement\":[{\"Action\":\"sts:AssumeRole\",\"Effect\":\"Allow\",\"Principal\":{\"Service\":[\"cs.aliyuncs.com\"]}}],\"Version\":\"1\"}"
          description     = "デフォルトでは、ACK クラスターがこのロールを引き受け、クラウドリソースにアクセスします。"
          policy_name     = "AliyunCSManagedKubernetesRolePolicy"
        },
        {
          name            = "AliyunCSManagedArmsRole"
          policy_document = "{\"Statement\":[{\"Action\":\"sts:AssumeRole\",\"Effect\":\"Allow\",\"Principal\":{\"Service\":[\"cs.aliyuncs.com\"]}}],\"Version\":\"1\"}"
          description     = "ACK クラスターの Application Real-Time Monitoring Service (ARMS) プラグインがこのロールを引き受け、他の Alibaba Cloud サービスのリソースにアクセスします。"
          policy_name     = "AliyunCSManagedArmsRolePolicy"
        },
        {
          name            = "AliyunCISDefaultRole"
          policy_document = "{\"Statement\":[{\"Action\":\"sts:AssumeRole\",\"Effect\":\"Allow\",\"Principal\":{\"Service\":[\"cs.aliyuncs.com\"]}}],\"Version\":\"1\"}"
          description     = "Container Intelligence Service (CIS) がこのロールを引き受け、他の Alibaba Cloud サービスのリソースにアクセスします。"
          policy_name     = "AliyunCISDefaultRolePolicy"
        },
        {
          name            = "AliyunOOSLifecycleHook4CSRole"
          policy_document = "{\"Statement\":[{\"Action\":\"sts:AssumeRole\",\"Effect\":\"Allow\",\"Principal\":{\"Service\":[\"oos.aliyuncs.com\"]}}],\"Version\":\"1\"}"
          description     = "Operation Orchestration Service (OOS) がこのロールを引き受け、他の Alibaba Cloud サービスのリソースにアクセスします。ACK は OOS を利用してノードプールをスケーリングします。"
          policy_name     = "AliyunOOSLifecycleHook4CSRolePolicy"
        },
        {
          name            = "AliyunCSManagedAutoScalerRole"
          policy_document = "{\"Statement\":[{\"Action\":\"sts:AssumeRole\",\"Effect\":\"Allow\",\"Principal\":{\"Service\":[\"cs.aliyuncs.com\"]}}],\"Version\":\"1\"}"
          description     = "ACK クラスターのオートスケーリングコンポーネントがこのロールを引き受け、他の Alibaba Cloud サービスのノードプールリソースにアクセスします。"
          policy_name     = "AliyunCSManagedAutoScalerRolePolicy"
        }
      ]
    }
    
    // 既存の RAM ロールをクエリします。
    data "alicloud_ram_roles" "roles" {
        policy_type = "Custom"
        name_regex  = "^Aliyun.*Role$"
    }
    
    locals {
      # 作成するすべてのロール名。
      all_role_names = [for role in var.roles : role.name]
      # 既存のロール。
      created_role_names  = [for role in data.alicloud_ram_roles.roles.roles : role.name]
      # 作成が必要なロール (差集合)。
      complement_names = setsubtract(local.all_role_names, local.created_role_names)
      # 完全なリストをフィルターして、作成が必要なロールのみを取得します。
      complement_roles = [for role in var.roles : role if contains(local.complement_names, role.name)]
    }
    
    // RAM ロールを作成します。
    resource "alicloud_ram_role" "role" {
      for_each    = { for r in local.complement_roles : r.name => r }
      name        = each.value.name
      document    = each.value.policy_document
      description = each.value.description
      force       = true
    }
    
    // システムポリシーを RAM ロールにアタッチします。
    resource "alicloud_ram_role_policy_attachment" "attach" {
      for_each    = { for r in local.complement_roles : r.name => r }
      policy_name = each.value.policy_name
      policy_type = "System"
      role_name   = each.value.name
      depends_on  = [alicloud_ram_role.role]
    }
  2. 変更をプレビューしてください:

    terraform plan
  3. 変更を適用してください:

    terraform apply

    プロンプトが表示されたら、yes と入力して [Enter] キーを押してください。ロール作成の出力:

    Apply complete!  Resources: 2 added, 0 changed, 0 destroyed.

結果の確認

いずれかの方法でロールが存在することを確認します。

terraform show の実行

terraform show
D:\tool\terraform\projects\ack>terraform show
# alicloud_ram_role.role["AliyunCISDefaultRole"]:
resource "alicloud_ram_role" "role" {
    arn                  = "acs:ram::14xxx64:role/aliyuncisdefaultrole"
    description          = "Container Intelligence Service (CIS) がこのロールを引き受け、他の Alibaba Cloud サービスのリソースにアクセスします。"
    document             = jsonencode(
        {
            Statement = [
                {
                    Action    = "sts:AssumeRole"
                    Effect    = "Allow"
                    Principal = {
                        Service = [
                            "cs.aliyuncs.com",
                        ]
                    }
                },
            ]
            Version   = "1"
        }
    )
    force                = true
    id                   = "AliyunCISDefaultRole"
    max_session_duration = 3600
    name                 = "AliyunCISDefaultRole"
    ram_users            = []
    role_id              = "30xxx91"
    services             = [
        "cs.aliyuncs.com",
    ]
    version              = "1"
}

# alicloud_ram_role.role["AliyunCSDefaultRole"]:
resource "alicloud_ram_role" "role" {
    arn                  = "acs:ram::14xxx64:role/aliyuncsdefaultrole"
    description          = "デフォルトでは、ACK クラスターの管理時に ACK がこのロールを引き受け、他の Alibaba Cloud サービスのリソースにアクセスします。"
    document             = jsonencode(
        {
            Statement = [
                {
                    Action    = "sts:AssumeRole"
                    Effect    = "Allow"
                    Principal = {
                        Service = [
                            "cs.aliyuncs.com",
                        ]
                    }
                },
            ]
            Version   = "1"
        }
    )
    force                = true
    id                   = "AliyunCSDefaultRole"
    max_session_duration = 3600
    name                 = "AliyunCSDefaultRole"
    ram_users            = []
    role_id              = "30xxx91"
    services             = [
        "cs.aliyuncs.com",
    ]
    version              = "1"
}

RAM コンソールでの確認

RAM コンソールにログインし、作成されたロールを確認します。

ナビゲーションペインで、[ID] > [ロール] を選択してロール一覧ページを開きます。このページには、ACK クラスター用に作成されたすべてのロールについて、ロール名、ロールタイプ、説明、作成日時などが一覧表示されます。[操作] 列で、[権限付与] または [ロールの削除] をクリックできます。

リソースの削除

Terraform で作成したすべてのリソースを削除します。

terraform destroy

共通コマンドをご参照ください。

完全なサンプルコード

このトピックのサンプルコードは、すぐに実行できます。直接実行するには、こちらこちらこちら&example=201-use-case-enable-ack-and-assign-role) をクリックしてください。
provider "alicloud" {
    region = var.region_id
}

variable "region_id" {
   type    = string
   default = "cn-hangzhou"
}

// ACK を有効化します。
data "alicloud_ack_service" "open" {
    enable = "On"
    type   = "propayasgo"
}

// 作成する RAM ロール。
variable "roles" {
  type = list(object({
    name            = string
    policy_document = string
    description     = string
    policy_name     = string
  }))
  default = [
    {
      name            = "AliyunCSManagedLogRole"
      policy_document = "{\"Statement\":[{\"Action\":\"sts:AssumeRole\",\"Effect\":\"Allow\",\"Principal\":{\"Service\":[\"cs.aliyuncs.com\"]}}],\"Version\":\"1\"}"
      description     = "ACK クラスターのロギングコンポーネントがこのロールを引き受け、他の Alibaba Cloud サービスのリソースにアクセスします。"
      policy_name     = "AliyunCSManagedLogRolePolicy"
    },
    {
      name            = "AliyunCSManagedCmsRole"
      policy_document = "{\"Statement\":[{\"Action\":\"sts:AssumeRole\",\"Effect\":\"Allow\",\"Principal\":{\"Service\":[\"cs.aliyuncs.com\"]}}],\"Version\":\"1\"}"
      description     = "ACK クラスターの CMS コンポーネントがこのロールを引き受け、他の Alibaba Cloud サービスのリソースにアクセスします。"
      policy_name     = "AliyunCSManagedCmsRolePolicy"
    },
    {
      name            = "AliyunCSManagedCsiRole"
      policy_document = "{\"Statement\":[{\"Action\":\"sts:AssumeRole\",\"Effect\":\"Allow\",\"Principal\":{\"Service\":[\"cs.aliyuncs.com\"]}}],\"Version\":\"1\"}"
      description     = "ACK クラスターのボリュームプラグインがこのロールを引き受け、他の Alibaba Cloud サービスのリソースにアクセスします。"
      policy_name     = "AliyunCSManagedCsiRolePolicy"
    },
    {
      name            = "AliyunCSManagedCsiPluginRole"
      policy_document = "{\"Statement\":[{\"Action\":\"sts:AssumeRole\",\"Effect\":\"Allow\",\"Principal\":{\"Service\":[\"cs.aliyuncs.com\"]}}],\"Version\":\"1\"}"
      description     = "ACK クラスターのボリュームプラグインがこのロールを引き受け、他の Alibaba Cloud サービスのリソースにアクセスします。"
      policy_name     = "AliyunCSManagedCsiPluginRolePolicy"
    },
    {
      name            = "AliyunCSManagedCsiProvisionerRole"
      policy_document = "{\"Statement\":[{\"Action\":\"sts:AssumeRole\",\"Effect\":\"Allow\",\"Principal\":{\"Service\":[\"cs.aliyuncs.com\"]}}],\"Version\":\"1\"}"
      description     = "ACK クラスターのボリュームプラグインがこのロールを引き受け、他の Alibaba Cloud サービスのリソースにアクセスします。"
      policy_name     = "AliyunCSManagedCsiProvisionerRolePolicy"
    },
    {
      name            = "AliyunCSManagedVKRole"
      policy_document = "{\"Statement\":[{\"Action\":\"sts:AssumeRole\",\"Effect\":\"Allow\",\"Principal\":{\"Service\":[\"cs.aliyuncs.com\"]}}],\"Version\":\"1\"}"
      description     = "ACK Serverless クラスターの VK コンポーネントがこのロールを引き受け、他の Alibaba Cloud サービスのリソースにアクセスします。"
      policy_name     = "AliyunCSManagedVKRolePolicy"
    },
    {
      name            = "AliyunCSServerlessKubernetesRole"
      policy_document = "{\"Statement\":[{\"Action\":\"sts:AssumeRole\",\"Effect\":\"Allow\",\"Principal\":{\"Service\":[\"cs.aliyuncs.com\"]}}],\"Version\":\"1\"}"
      description     = "デフォルトでは、ACK クラスターがこのロールを引き受け、クラウドリソースにアクセスします。"
      policy_name     = "AliyunCSServerlessKubernetesRolePolicy"
    },
    {
      name            = "AliyunCSKubernetesAuditRole"
      policy_document = "{\"Statement\":[{\"Action\":\"sts:AssumeRole\",\"Effect\":\"Allow\",\"Principal\":{\"Service\":[\"cs.aliyuncs.com\"]}}],\"Version\":\"1\"}"
      description     = "ACK の監査機能がこのロールを引き受け、他の Alibaba Cloud サービスのリソースにアクセスします。"
      policy_name     = "AliyunCSKubernetesAuditRolePolicy"
    },
    {
      name            = "AliyunCSManagedNetworkRole"
      policy_document = "{\"Statement\":[{\"Action\":\"sts:AssumeRole\",\"Effect\":\"Allow\",\"Principal\":{\"Service\":[\"cs.aliyuncs.com\"]}}],\"Version\":\"1\"}"
      description     = "ACK クラスターのネットワークプラグインがこのロールを引き受け、他の Alibaba Cloud サービスのリソースにアクセスします。"
      policy_name     = "AliyunCSManagedNetworkRolePolicy"
    },
    {
      name            = "AliyunCSDefaultRole"
      policy_document = "{\"Statement\":[{\"Action\":\"sts:AssumeRole\",\"Effect\":\"Allow\",\"Principal\":{\"Service\":[\"cs.aliyuncs.com\"]}}],\"Version\":\"1\"}"
      description     = "デフォルトでは、ACK はクラスター管理時にこのロールを引き受け、他の Alibaba Cloud サービスのリソースにアクセスします。"
      policy_name     = "AliyunCSDefaultRolePolicy"
    },
    {
      name            = "AliyunCSManagedKubernetesRole"
      policy_document = "{\"Statement\":[{\"Action\":\"sts:AssumeRole\",\"Effect\":\"Allow\",\"Principal\":{\"Service\":[\"cs.aliyuncs.com\"]}}],\"Version\":\"1\"}"
      description     = "デフォルトでは、ACK クラスターがこのロールを引き受け、クラウドリソースにアクセスします。"
      policy_name     = "AliyunCSManagedKubernetesRolePolicy"
    },
    {
      name            = "AliyunCSManagedArmsRole"
      policy_document = "{\"Statement\":[{\"Action\":\"sts:AssumeRole\",\"Effect\":\"Allow\",\"Principal\":{\"Service\":[\"cs.aliyuncs.com\"]}}],\"Version\":\"1\"}"
      description     = "ACK クラスターの ARMS プラグインがこのロールを引き受け、他の Alibaba Cloud サービスのリソースにアクセスします。"
      policy_name     = "AliyunCSManagedArmsRolePolicy"
    },
    {
      name            = "AliyunCISDefaultRole"
      policy_document = "{\"Statement\":[{\"Action\":\"sts:AssumeRole\",\"Effect\":\"Allow\",\"Principal\":{\"Service\":[\"cs.aliyuncs.com\"]}}],\"Version\":\"1\"}"
      description     = "CIS がこのロールを引き受け、他の Alibaba Cloud サービスのリソースにアクセスします。"
      policy_name     = "AliyunCISDefaultRolePolicy"
    },
    {
      name            = "AliyunOOSLifecycleHook4CSRole"
      policy_document = "{\"Statement\":[{\"Action\":\"sts:AssumeRole\",\"Effect\":\"Allow\",\"Principal\":{\"Service\":[\"oos.aliyuncs.com\"]}}],\"Version\":\"1\"}"
      description     = "OOS がこのロールを引き受け、他の Alibaba Cloud サービスのリソースにアクセスします。ACK は OOS を利用してノードプールをスケーリングします。"
      policy_name     = "AliyunOOSLifecycleHook4CSRolePolicy"
    },
    {
      name            = "AliyunCSManagedAutoScalerRole"
      policy_document = "{\"Statement\":[{\"Action\":\"sts:AssumeRole\",\"Effect\":\"Allow\",\"Principal\":{\"Service\":[\"cs.aliyuncs.com\"]}}],\"Version\":\"1\"}"
      description     = "ACK クラスターの自動スケーリングコンポーネントがこのロールを引き受け、他の Alibaba Cloud サービスのノードプールリソースにアクセスします。"
      policy_name     = "AliyunCSManagedAutoScalerRolePolicy"
    }
  ]
}

// 既存の RAM ロールをクエリします。
data "alicloud_ram_roles" "roles" {
    policy_type = "Custom"
    name_regex  = "^Aliyun.*Role$"
}

locals {
  # 作成するすべてのロール名。
  all_role_names = [for role in var.roles : role.name]
  # 既存のロール。
  created_role_names  = [for role in data.alicloud_ram_roles.roles.roles : role.name]
  # 作成が必要なロール (差集合)。
  complement_names = setsubtract(local.all_role_names, local.created_role_names)
  # 完全なリストをフィルターして、作成が必要なロールのみを取得します。
  complement_roles = [for role in var.roles : role if contains(local.complement_names, role.name)]
}

// RAM ロールを作成します。
resource "alicloud_ram_role" "role" {
  for_each    = { for r in local.complement_roles : r.name => r }
  name        = each.value.name
  document    = each.value.policy_document
  description = each.value.description
  force       = true
}

// システムポリシーを RAM ロールにアタッチします。
resource "alicloud_ram_role_policy_attachment" "attach" {
  for_each    = { for r in local.complement_roles : r.name => r }
  policy_name = each.value.policy_name
  policy_type = "System"
  role_name   = each.value.name
  depends_on  = [alicloud_ram_role.role]
}

付録

サービスロール

AliyunCSManagedLogRole

ACK マネージド、エッジ、およびサーバーレスクラスターのロギングコンポーネントがこのロールを引き受けて、Simple Log Service (SLS) のリソースにアクセスします。

name            = "AliyunCSManagedLogRole"
policy_document = "{\"Statement\":[{\"Action\":\"sts:AssumeRole\",\"Effect\":\"Allow\",\"Principal\":{\"Service\":[\"cs.aliyuncs.com\"]}}],\"Version\":\"1\"}"
description     = "ACK クラスターのロギングコンポーネントがこのロールを引き受けて、他の Alibaba Cloud サービスのリソースにアクセスします。"
policy_name     = "AliyunCSManagedLogRolePolicy"

AliyunCSManagedCmsRole

ACK マネージド、エッジ、およびサーバーレスクラスターのモニタリングコンポーネントがこのロールを引き受けて、CloudMonitor や SLS などのクラウドサービスのリソースにアクセスします。

name            = "AliyunCSManagedCmsRole"
policy_document = "{\"Statement\":[{\"Action\":\"sts:AssumeRole\",\"Effect\":\"Allow\",\"Principal\":{\"Service\":[\"cs.aliyuncs.com\"]}}],\"Version\":\"1\"}"
description     = "ACK クラスターの CMS コンポーネントがこのロールを引き受けて、他の Alibaba Cloud サービスのリソースにアクセスします。"
policy_name     = "AliyunCSManagedCmsRolePolicy"

AliyunCSManagedCsiRole

ACK マネージド、エッジ、およびサーバーレスクラスターのボリュームプラグインがこのロールを引き受けて、Elastic Compute Service (ECS)、File Storage NAS (NAS)、および Object Storage Service (OSS) のリソースにアクセスします。

name            = "AliyunCSManagedCsiRole"
policy_document = "{\"Statement\":[{\"Action\":\"sts:AssumeRole\",\"Effect\":\"Allow\",\"Principal\":{\"Service\":[\"cs.aliyuncs.com\"]}}],\"Version\":\"1\"}"
description     = "ACK クラスターのボリュームプラグインがこのロールを引き受けて、他の Alibaba Cloud サービスのリソースにアクセスします。"
policy_name     = "AliyunCSManagedCsiRolePolicy"

AliyunCSManagedCsiPluginRole

ACK マネージド、エッジ、およびサーバーレスクラスターの csi-plugin コンポーネントがこのロールを引き受けて、ECS のリソースにアクセスします。

name            = "AliyunCSManagedCsiPluginRole"
policy_document = "{\"Statement\":[{\"Action\":\"sts:AssumeRole\",\"Effect\":\"Allow\",\"Principal\":{\"Service\":[\"cs.aliyuncs.com\"]}}],\"Version\":\"1\"}"
description     = "ACK マネージドクラスター、ACK エッジクラスター、および ACK サーバーレスクラスターのボリュームプラグイン (新しい csi-plugin) がこのロールを引き受けて、ECS のリソースにアクセスします。"
policy_name     = "AliyunCSManagedCsiPluginRolePolicy"

AliyunCSManagedCsiProvisionerRole

ACK マネージド、エッジ、およびサーバーレスクラスターの csi-provisioner コンポーネントがこのロールを引き受けて、ECS、NAS、および OSS のリソースにアクセスします。

name            = "AliyunCSManagedCsiProvisionerRole"
policy_document = "{\"Statement\":[{\"Action\":\"sts:AssumeRole\",\"Effect\":\"Allow\",\"Principal\":{\"Service\":[\"cs.aliyuncs.com\"]}}],\"Version\":\"1\"}"
description     = "ACK マネージドクラスター、ACK エッジクラスター、および ACK サーバーレスクラスターのボリュームプラグイン (新しい csi-provisioner) がこのロールを引き受けて、ECS、NAS、および OSS のリソースにアクセスします。"
policy_name     = "AliyunCSManagedCsiProvisionerRolePolicy"

AliyunCSServerlessKubernetesRole

ACK エッジおよびサーバーレスクラスターがこのロールを引き受けて、ECS、Virtual Private Cloud (VPC)、Server Load Balancer (SLB)、および Alibaba Cloud DNS PrivateZone のリソースにアクセスします。

name            = "AliyunCSServerlessKubernetesRole"
policy_document = "{\"Statement\":[{\"Action\":\"sts:AssumeRole\",\"Effect\":\"Allow\",\"Principal\":{\"Service\":[\"cs.aliyuncs.com\"]}}],\"Version\":\"1\"}"
description     = "デフォルトでは、ACK サーバーレスクラスターがこのロールを引き受けて、他のクラウドサービスのリソースにアクセスします。"
policy_name     = "AliyunCSServerlessKubernetesRolePolicy"

AliyunCSKubernetesAuditRole

ACK マネージド、エッジ、およびサーバーレスクラスターの監査コンポーネントがこのロールを引き受けて、SLS のリソースにアクセスします。

name            = "AliyunCSKubernetesAuditRole"
policy_document = "{\"Statement\":[{\"Action\":\"sts:AssumeRole\",\"Effect\":\"Allow\",\"Principal\":{\"Service\":[\"cs.aliyuncs.com\"]}}],\"Version\":\"1\"}"
description     = "ACK の監査機能がこのロールを引き受けて、他の Alibaba Cloud サービスのリソースにアクセスします。"
policy_name     = "AliyunCSKubernetesAuditRolePolicy"

AliyunCSManagedNetworkRole

ACK マネージド、エッジ、およびサーバーレスクラスターのネットワークプラグインがこのロールを引き受けて、ECS および VPC のリソースにアクセスします。

name            = "AliyunCSManagedNetworkRole"
policy_document = "{\"Statement\":[{\"Action\":\"sts:AssumeRole\",\"Effect\":\"Allow\",\"Principal\":{\"Service\":[\"cs.aliyuncs.com\"]}}],\"Version\":\"1\"}"
description     = "ACK クラスターのネットワークプラグインがこのロールを引き受けて、他の Alibaba Cloud サービスのリソースにアクセスします。"
policy_name     = "AliyunCSManagedNetworkRolePolicy"

AliyunCSDefaultRole

ACK がクラスターを管理する際に、このロールを引き受けて、ECS、VPC、SLB、Resource Orchestration Service (ROS)、および Auto Scaling のリソースにアクセスします。

name            = "AliyunCSDefaultRole"
policy_document = "{\"Statement\":[{\"Action\":\"sts:AssumeRole\",\"Effect\":\"Allow\",\"Principal\":{\"Service\":[\"cs.aliyuncs.com\"]}}],\"Version\":\"1\"}"
description     = "デフォルトでは、ACK クラスターを管理する際に、ACK がこのロールを引き受けて、他の Alibaba Cloud サービスのリソースにアクセスします。"
policy_name     = "AliyunCSDefaultRolePolicy"

AliyunCSManagedKubernetesRole

ACK マネージドおよびエッジクラスターがこのロールを引き受けて、ECS、VPC、SLB、および Container Registry のリソースにアクセスします。

name            = "AliyunCSManagedKubernetesRole"
policy_document = "{\"Statement\":[{\"Action\":\"sts:AssumeRole\",\"Effect\":\"Allow\",\"Principal\":{\"Service\":[\"cs.aliyuncs.com\"]}}],\"Version\":\"1\"}"
description     = "デフォルトでは、ACK クラスターがこのロールを引き受けて、お客様のクラウドリソースにアクセスします。"
policy_name     = "AliyunCSManagedKubernetesRolePolicy"

AliyunCSManagedArmsRole

ACK エッジおよびサーバーレスクラスターの Application Real-Time Monitoring Service (ARMS) コンポーネントがこのロールを引き受けて、ARMS のリソースにアクセスします。

name            = "AliyunCSManagedArmsRole"
policy_document = "{\"Statement\":[{\"Action\":\"sts:AssumeRole\",\"Effect\":\"Allow\",\"Principal\":{\"Service\":[\"cs.aliyuncs.com\"]}}],\"Version\":\"1\"}"
description     = "ACK クラスターの ARMS プラグインがこのロールを引き受けて、他の Alibaba Cloud サービスのリソースにアクセスします。"
policy_name     = "AliyunCSManagedArmsRolePolicy"

AliyunCISDefaultRole

Container Intelligence Service (CIS) がこのロールを引き受けて、診断および巡回検査のために ECS、VPC、および SLB のリソースにアクセスします。

name            = "AliyunCISDefaultRole"
policy_document = "{\"Statement\":[{\"Action\":\"sts:AssumeRole\",\"Effect\":\"Allow\",\"Principal\":{\"Service\":[\"cs.aliyuncs.com\"]}}],\"Version\":\"1\"}"
description     = "CIS がこのロールを引き受けて、他の Alibaba Cloud サービスのリソースにアクセスします。"
policy_name     = "AliyunCISDefaultRolePolicy"

AliyunOOSLifecycleHook4CSRole

Operation Orchestration Service (OOS) がこのロールを引き受けて、ACK、ECS、および PolarDB のリソースにアクセスします。ACK はノードプールのスケーリングに OOS を使用します。

name            = "AliyunOOSLifecycleHook4CSRole"
policy_document = "{\"Statement\":[{\"Action\":\"sts:AssumeRole\",\"Effect\":\"Allow\",\"Principal\":{\"Service\":[\"oos.aliyuncs.com\"]}}],\"Version\":\"1\"}"
description     = "OOS がこのロールを引き受けて、他の Alibaba Cloud サービスのリソースにアクセスします。ACK はノードプールのスケーリングに OOS を使用します。"
policy_name     = "AliyunOOSLifecycleHook4CSRolePolicy"

オプションのロール

これらのロールは、基本的なクラスター作成にはオプションですが、特定の機能に必要です。

AliyunCSManagedAcrRole

ACK マネージド、エッジ、およびサーバーレスクラスターの Secret フリーのイメージプルプラグインがこのロールを引き受けて、Container Registry のリソースにアクセスします。

name            = "AliyunCSManagedAcrRole"
policy_document = "{\"Statement\":[{\"Action\":\"sts:AssumeRole\",\"Effect\":\"Allow\",\"Principal\":{\"Service\":[\"cs.aliyuncs.com\"]}}],\"Version\":\"1\"}"
description     = "ACK クラスターの Secret フリーのイメージプルコンポーネントがこのロールを引き受けて、Container Registry からイメージをプルします。"
policy_name     = "AliyunCSManagedAcrRolePolicy"

AliyunCSManagedNlcRole

ACK マネージドおよびエッジクラスターのノードライフサイクルコントローラーがこのロールを引き受けて、ECS および ACK のノードプールリソースにアクセスします。

name            = "AliyunCSManagedNlcRole"
policy_document = "{\"Statement\":[{\"Action\":\"sts:AssumeRole\",\"Effect\":\"Allow\",\"Principal\":{\"Service\":[\"cs.aliyuncs.com\"]}}],\"Version\":\"1\"}"
description     = "ACK クラスターのマネージドノードプールコントローラーがこのロールを引き受けて、ECS および ACK のノードプールリソースにアクセスします。"
policy_name     = "AliyunCSManagedNlcRolePolicy"

AliyunCSManagedAutoScalerRole

ACK マネージド、エッジ、およびサーバーレスクラスターの自動スケーリングコンポーネントがこのロールを引き受けて、ECS および ACK のノードプールリソースにアクセスします。

name            = "AliyunCSManagedAutoScalerRole"
policy_document = "{\"Statement\":[{\"Action\":\"sts:AssumeRole\",\"Effect\":\"Allow\",\"Principal\":{\"Service\":[\"cs.aliyuncs.com\"]}}],\"Version\":\"1\"}"
description     = "ACK クラスターの自動スケーリングコンポーネントがこのロールを引き受けて、ECS および ACK のノードプールリソースにアクセスします。"
policy_name     = "AliyunCSManagedAutoScalerRolePolicy"

AliyunCSManagedSecurityRole

ACK マネージド、エッジ、およびサーバーレスクラスターの Secret の暗号化・認証情報管理コンポーネントがこのロールを引き受けて、Key Management Service (KMS) のリソースにアクセスします。

name            = "AliyunCSManagedSecurityRole"
policy_document = "{\"Statement\":[{\"Action\":\"sts:AssumeRole\",\"Effect\":\"Allow\",\"Principal\":{\"Service\":[\"cs.aliyuncs.com\"]}}],\"Version\":\"1\"}"
description     = "ACK クラスターの Secret の暗号化コンポーネントがこのロールを引き受けて、Key Management Service (KMS) のリソースにアクセスします。"
policy_name     = "AliyunCSManagedSecurityRolePolicy"

AliyunCSManagedCostRole

ACK マネージド、エッジ、およびサーバーレスクラスターのコスト分析コンポーネントがこのロールを引き受けて、ECS および Elastic Container Instance のリソースにアクセスし、Bills Management API を呼び出します。

name            = "AliyunCSManagedCostRole"
policy_document = "{\"Statement\":[{\"Action\":\"sts:AssumeRole\",\"Effect\":\"Allow\",\"Principal\":{\"Service\":[\"cs.aliyuncs.com\"]}}],\"Version\":\"1\"}"
description     = "ACK クラスターのコスト分析コンポーネントがこのロールを引き受けて、ECS および Elastic Container Instance のリソースにアクセスし、Bills Management API を呼び出します。"
policy_name     = "AliyunCSManagedCostRolePolicy"

AliyunCSManagedNimitzRole

ACK Lingjun クラスターのネットワークプラグインがこのロールを引き受けて、Intelligent Computing LINGJUN のリソースにアクセスします。

name            = "AliyunCSManagedNimitzRole"
policy_document = "{\"Statement\":[{\"Action\":\"sts:AssumeRole\",\"Effect\":\"Allow\",\"Principal\":{\"Service\":[\"cs.aliyuncs.com\"]}}],\"Version\":\"1\"}"
description     = "ACK Lingjun クラスターのネットワークプラグインがこのロールを引き受けて、Intelligent Computing LINGJUN のリソースにアクセスします。"
policy_name     = "AliyunCSManagedNimitzRolePolicy"

AliyunCSManagedBackupRestoreRole

ACK マネージド、エッジ、およびサーバーレスクラスターのバックアップセンターコンポーネントがこのロールを引き受けて、Cloud Backup および Object Storage Service (OSS) のリソースにアクセスします。

name            = "AliyunCSManagedBackupRestoreRole"
policy_document = "{\"Statement\":[{\"Action\":\"sts:AssumeRole\",\"Effect\":\"Allow\",\"Principal\":{\"Service\":[\"cs.aliyuncs.com\"]}}],\"Version\":\"1\"}"
description     = "ACK クラスターのバックアップセンターコンポーネントがこのロールを引き受けて、Cloud Backup および OSS のリソースにアクセスします。"
policy_name     = "AliyunCSManagedBackupRestoreRolePolicy"

AliyunCSManagedEdgeRole

ACK エッジクラスターのコントロールコンポーネントがこのロールを引き受けて、SAG、VPC、および CEN のリソースにアクセスします。

name            = "AliyunCSManagedEdgeRole"
policy_document = "{\"Statement\":[{\"Action\":\"sts:AssumeRole\",\"Effect\":\"Allow\",\"Principal\":{\"Service\":[\"cs.aliyuncs.com\"]}}],\"Version\":\"1\"}"
description     = "ACK エッジクラスターのコントロールコンポーネントがこのロールを引き受けて、SAG、VPC、および CEN のリソースにアクセスします。"
policy_name     = "AliyunCSManagedEdgeRolePolicy"

次のステップ