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

ApsaraMQ for Kafka:Terraform を使用して SASL ユーザーを管理する

最終更新日:Mar 19, 2025

Kafka 向け ApsaraMQ インスタンスのデフォルトの簡易認証およびセキュリティ層(SASL)ユーザーは、ID 検証に使用されます。 デフォルトの SASL ユーザーには、インスタンスで作成されたすべてのトピックおよびコンシューマーグループに対する読み取りおよび書き込み権限が付与されます。 ApsaraMQ for KafkaApsaraMQ for Kafka リソースに対してきめ細かいアクセス制御を実行する場合は、アクセス制御リスト(ACL)機能を有効にし、SASL ユーザーを作成してから、alicloud_alikafka_sasl_user リソースに必要な権限を SASL ユーザーに付与する必要があります。 Terraform によって提供される リソースを使用して、Kafka 向け ApsaraMQ で SASL ユーザーを作成および管理できます。

説明

このトピックのサンプルコードは、数回クリックするだけで実行できます。 サンプルコードを実行するには、[ここ]をクリックしてください。

始める前に

  • Alibaba Cloud アカウントは、このアカウントに属するすべてのリソースに対する完全な権限を持っています。 Alibaba Cloud アカウントの資格情報が漏洩した場合、セキュリティリスクが発生する可能性があります。 リソースアクセス管理(RAM)ユーザーを使用し、RAM ユーザーの AccessKey ペアを作成することをお勧めします。 詳細については、「RAM ユーザーを作成する」および「AccessKey ペアを作成する」をご参照ください。

  • RAM を使用して、クラウド リソースへのアクセス許可を効率的に管理する必要があります。 これは、マルチユーザーコラボレーションの要件を満たすのに役立ち、過剰な許可によって引き起こされるセキュリティの脆弱性を防ぐために、最小権限の原則に基づいてユーザーに許可を付与することができます。 詳細については、「RAM ユーザーに権限を付与する」をご参照ください。

    {
        "Version": "1",
        "Statement": [
            {
                "Effect": "Allow",
                "Action": [
                    "vpc:DescribeVpcAttribute",
                    "vpc:DescribeRouteTableList",
                    "vpc:DescribeVSwitchAttributes",
                    "vpc:DeleteVpc",
                    "vpc:DeleteVSwitch",
                    "vpc:CreateVpc",
                    "vpc:CreateVSwitch"
                ],
                "Resource": "*"
            },
            {
                "Effect": "Allow",
                "Action": "bss:ModifyAgreementRecord",
                "Resource": "*"
            },
            {
                "Effect": "Allow",
                "Action": [
                    "bss:DescribeOrderList",
                    "bss:DescribeOrderDetail",
                    "bss:PayOrder",
                    "bss:CancelOrder"
                ],
                "Resource": "*"
            },
            {
                "Effect": "Allow",
                "Action": [
                    "ecs:CreateSecurityGroup",
                    "ecs:ModifySecurityGroupPolicy",
                    "ecs:DescribeSecurityGroups",
                    "ecs:ListTagResources",
                    "ecs:DeleteSecurityGroup",
                    "ecs:DescribeSecurityGroupAttribute",
                    "ecs:AuthorizeSecurityGroup",
                    "ecs:RevokeSecurityGroup"
                ],
                "Resource": "*"
            },
            {
                "Action": "alikafka:*",
                "Resource": "*",
                "Effect": "Allow"
            },
            {
                "Action": "ram:CreateServiceLinkedRole",
                "Resource": "*",
                "Effect": "Allow",
                "Condition": {
                    "StringEquals": {
                        "ram:ServiceName": [
                            "connector.alikafka.aliyuncs.com",
                            "instanceencryption.alikafka.aliyuncs.com",
                            "alikafka.aliyuncs.com",
                            "etl.alikafka.aliyuncs.com"
                        ]
                    }
                }
            }
        ]
    }
  • 次のいずれかの方法で、Terraform のランタイム環境を準備します。

    • Terraform Explorer で Terraform を使用する: Alibaba Cloud は、Terraform のオンライン ランタイム環境である Terraform Explorer を提供しています。 Terraform をインストールする必要なく、Terraform Explorer にログインした後に Terraform を使用できます。 この方法は、追加費用なしで Terraform を迅速かつ便利に使用およびデバッグする場合に適しています。

    • Cloud Shell で Terraform を使用する: Terraform は Cloud Shell にプリインストールされており、ID 資格情報が構成されています。 Cloud Shell で Terraform コマンドを直接実行できます。 この方法は、低コストで Terraform を迅速かつ便利に使用およびデバッグする場合に適しています。

    • オンプレミス マシンに Terraform をインストールして構成する: この方法は、ネットワーク接続が不安定な場合、またはカスタム開発環境が必要な場合に適しています。

リソース

説明

このトピックで必要な特定のリソースに対して課金されます。 リソースが不要になった場合は、できるだけ早くリソースを解放するか、サブスクライブを解除してください。

SASL ユーザーを作成する

次の例では、中国(深セン)リージョンにあるインスタンスの SASL ユーザーが作成されます。

  1. 作業ディレクトリと、main.tf という名前の構成ファイルをディレクトリに作成します。 次のコードを main.tf 構成ファイルにコピーします。

    • 必要なリソースを作成します。

      説明

      ACL 機能が有効になっている Professional エディション の Kafka 向け ApsaraMQ インスタンスに対してのみ、SASL ユーザーを作成できます。

      variable "region" {
        default = "cn-shenzhen"
      }
      
      variable "instance_name" {
        default = "alikafkaInstanceName"
      }
      
      variable "zone_id" {
        default = "cn-shenzhen-f"
      }
      
      provider "alicloud" {
        region = var.region
      }
      
      # VPC を作成します。
      resource "alicloud_vpc" "default" {
        vpc_name   = "alicloud"
        cidr_block = "172.16.0.0/16"
      }
      
      # vSwitch を作成します。
      resource "alicloud_vswitch" "default" {
        vpc_id     = alicloud_vpc.default.id
        cidr_block = "172.16.192.0/20"
        zone_id    = var.zone_id
      }
      
      # セキュリティグループを作成します。
      resource "alicloud_security_group" "default" {
        vpc_id = alicloud_vpc.default.id
      }
      
      # インスタンスを作成します。 ディスクタイプは Ultra ディスク、ディスク容量は 500 GB、トラフィック仕様は alikafka.hw.2xlarge です。
      # インスタンスをデプロイします。
      resource "alicloud_alikafka_instance" "default" {
        name            = var.instance_name
        partition_num   = 50
        disk_type       = "1"
        disk_size       = "500"
        deploy_type     = "5"
        io_max          = "20"
        spec_type       = "professional"
        service_version = "2.2.0"
        vswitch_id      = alicloud_vswitch.default.id
        security_group  = alicloud_security_group.default.id
        config          = <<EOF
        {
          "enable.acl": "true"
        }
        EOF
      }
    • main.tf 構成ファイルに、resource alicloud_alikafka_sasl_user "default" 設定項目を追加します。

      variable "name" {
        default = "tf-example"
      }
      
      resource "alicloud_alikafka_sasl_user" "default" {
        instance_id = alicloud_alikafka_instance.default.id
        username    = var.name
        password    = "tf_example123"
      }
  2. 次のコマンドを実行して、Terraform のランタイム環境を初期化します。

    terraform init

    次の情報が返された場合、Terraform は初期化されています。

    Initializing the backend...
    
    Initializing provider plugins...
    - Checking for available provider plugins...
    - Downloading plugin for provider "alicloud" (hashicorp/alicloud) 1.90.1...
    ...
    
    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
  3. 実行計画を作成し、変更をプレビューします。

    terraform plan
  4. 次のコマンドを実行して、リソースを作成します。

    terraform apply

    実行中に、プロンプトが表示されたら yes と入力し、[enter] キーを押します。 コマンドが実行されるまで待ちます。 次の情報が返された場合、コマンドは実行されています。

    alicloud_vpc.default: Creating...
    alicloud_vpc.default: Creation complete after 6s [id=vpc-****]
    alicloud_security_group.default: Creating...
    alicloud_vswitch.default: Creating...
    alicloud_security_group.default: Creation complete after 1s [id=sg-****]
    alicloud_vswitch.default: Creation complete after 4s [id=vsw-****]
    alicloud_alikafka_instance.default: Creating...
    alicloud_alikafka_instance.default: Still creating... [10s elapsed]
    ···
    alicloud_alikafka_instance.default: Still creating... [3m30s elapsed]
    alicloud_alikafka_instance.default: Creation complete after 3m33s [id=alikafka_post-cn-****]
    alicloud_alikafka_sasl_user.default: Creating...
    alicloud_alikafka_sasl_user.default: Creation complete after 3s [id=alikafka_post-cn-****:tf-example]
    
    Apply complete!  Resources: 5 added, 0 changed, 0 destroyed.
  5. 結果を確認します。

    terraform show コマンドを使用する

    terraform show コマンドを実行して、SASL ユーザーに関する情報を表示します。

    terraform show
    # alicloud_alikafka_sasl_user.default:
    resource "alicloud_alikafka_sasl_user" "default" {
        id          = "alikafka_post-cn-****:tf-example"
        instance_id = "alikafka_post-cn-****"
        password    = (sensitive value)
        type        = "plain"
        username    = "tf-example"
    }

    Kafka 向け ApsaraMQ コンソールを使用する

    Kafka 向け ApsaraMQ コンソール にログインして、SASL ユーザーに関する情報を表示します。image

SASL ユーザーをクエリする

  1. main.tf 構成ファイルに、data "alicloud_alikafka_sasl_users" "sasl_users_ds" 設定項目を追加し、次のコード スニペットに基づいて設定項目を構成します。

    data "alicloud_alikafka_sasl_users" "sasl_users_ds" {
      instance_id = alicloud_alikafka_instance.default.id
    }
  2. 実行計画を作成し、変更をプレビューします。

    terraform plan
  3. 次のコマンドを実行して、リソースを作成します。

    terraform apply

    実行中に、プロンプトが表示されたら yes と入力し、[enter] キーを押します。 コマンドが実行されるまで待ちます。 次の情報が返された場合、コマンドは実行されています。

    alicloud_vpc.default: Refreshing state... [id=vpc-****]
    alicloud_security_group.default: Refreshing state... [id=sg-****]
    alicloud_vswitch.default: Refreshing state... [id=vsw-****]
    alicloud_alikafka_instance.default: Refreshing state... [id=alikafka_post-cn-****]
    alicloud_alikafka_sasl_user.default: Refreshing state... [id=alikafka_post-cn-****:tf-example]
    data.alicloud_alikafka_sasl_users.sasl_users_ds: Reading...
    data.alicloud_alikafka_sasl_users.sasl_users_ds: Read complete after 0s [id=****]
    
    No changes. Your infrastructure matches the configuration.
    
    Terraform has compared your real infrastructure against your configuration and found no differences, so no changes are
    needed.
    
    Apply complete!  Resources: 0 added, 0 changed, 0 destroyed.
  4. 結果を確認します。 terraform show コマンドを実行して、SASL ユーザーに関する情報を表示します。

    terraform show
    # data.alicloud_alikafka_sasl_users.sasl_users_ds:
    data "alicloud_alikafka_sasl_users" "sasl_users_ds" {
        id          = "404393857"
        instance_id = "alikafka_post-cn-****"
        names       = [
            "tf-example",
        ]
        users       = [
            {
                password = "tf_example123"
                username = "tf-example"
            },
        ]
    }

リソースをクリアする

Terraform を使用して作成または管理された上記の不要になったリソースを解放するには、次のコマンドを実行します。 terraform destroy コマンドの詳細については、「共通コマンド」をご参照ください。

terraform destroy

サンプルコード

説明

サンプルコードは、数回クリックするだけで実行できます。 サンプルコードを実行するには、[ここ]をクリックしてください。

サンプルコード

variable "name" {
  default = "tf-example"
}

variable "region" {
  default = "cn-shenzhen"
}

variable "instance_name" {
  default = "alikafkaInstanceName"
}

variable "zone_id" {
  default = "cn-shenzhen-f"
}

provider "alicloud" {
  region = var.region
}

# VPC を作成します。
resource "alicloud_vpc" "default" {
  vpc_name   = "alicloud"
  cidr_block = "172.16.0.0/16"
}

# vSwitch を作成します。
resource "alicloud_vswitch" "default" {
  vpc_id     = alicloud_vpc.default.id
  cidr_block = "172.16.192.0/20"
  zone_id    = var.zone_id
}

# セキュリティグループを作成します。
resource "alicloud_security_group" "default" {
  vpc_id = alicloud_vpc.default.id
}

# インスタンスを作成します。 ディスクタイプは Ultra ディスク、ディスク容量は 500 GB、トラフィック仕様は alikafka.hw.2xlarge です。
# インスタンスをデプロイします。
resource "alicloud_alikafka_instance" "default" {
  name            = var.instance_name
  partition_num   = 50
  disk_type       = "1"
  disk_size       = "500"
  deploy_type     = "5"
  io_max          = "20"
  spec_type       = "professional"
  service_version = "2.2.0"
  vswitch_id      = alicloud_vswitch.default.id
  security_group  = alicloud_security_group.default.id
  config          = <<EOF
  {
    "enable.acl": "true"
  }
  EOF
}

resource "alicloud_alikafka_sasl_user" "default" {
  instance_id = alicloud_alikafka_instance.default.id
  username    = var.name
  password    = "tf_example123"
}

data "alicloud_alikafka_sasl_users" "sasl_users_ds" {
  instance_id = alicloud_alikafka_instance.default.id
  depends_on  = [alicloud_alikafka_sasl_user.default]
}

関連情報

  • ApsaraMQ コンソールで SASL ユーザーを作成および管理したり、API 操作を呼び出したりすることもできます。 詳細については、「SASL ユーザーに権限を付与する」および「SASL ユーザー」をご参照ください。

  • alicloud_alikafka_sasl_user リソースによって提供される他の引数の詳細については、「alicloud_alikafka_sasl_user」をご参照ください。