ApsaraMQ for Kafka プロフェッショナル版インスタンスでは、アクセス制御リスト (ACL) を使用して、Topic およびコンシューマーグループに対する簡易認証およびセキュリティ層 (SASL) ユーザーの権限を管理できます。Terraform を使用して、ACL 構成を Infrastructure as Code (IaC) プロセスに統合できます。たとえば、Terraform 構成ファイルでユーザー権限を定義し、Terraform コマンドを実行して構成を自動的に適用できます。
このトピックのサンプルコードは、数クリックで実行できます。 ここ をクリックしてサンプルコードを実行します。
始める前に
Alibaba Cloud アカウントは、このアカウントに属するすべてのリソースに対する完全な権限を持っています。Alibaba Cloud アカウントの資格情報が漏洩した場合、セキュリティリスクが発生する可能性があります。Resource Access Management (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 をインストールして構成する: この方法は、ネットワーク接続が不安定な場合、またはカスタム開発環境が必要な場合に適しています。
必要なリソース
このトピックで必要な特定のリソースに対して課金されます。リソースが不要になった場合は、できるだけ早くリソースを解放するか、サブスクライブを解除してください。
alicloud_vpc: 仮想プライベートクラウド (VPC) を作成します。
alicloud_vswitch: VPC 用の vSwitch を作成します。
alicloud_zones: ゾーンをクエリします。
alicloud_security_group: セキュリティグループを作成します。
alicloud_alikafka_instance: ApsaraMQ for Kafka インスタンスを作成します。
alicloud_alikafka_topic: ApsaraMQ for Kafka Topic を作成します。
alicloud_alikafka_sasl_user: SASL ユーザーを作成します。
alicloud_alikafka_sasl_acl: SASL ユーザーに権限を付与します。
alicloud_alikafka_sasl_acls: SASL ユーザーの権限をクエリします。
SASL ユーザーを作成し、ユーザーに権限を付与する
次の例では、中国 (深セン) リージョンにある ApsaraMQ for Kafka インスタンスの example-topic という名前の Topic に対して、example という名前の SASL ユーザーが作成され、Topic に対する書き込み権限が SASL ユーザーに付与されます。
作業ディレクトリと、ディレクトリ内に main.tf という名前の構成ファイルを作成します。次のコードを main.tf 構成ファイルにコピーします。
必要なリソースを作成します。
説明SASL ユーザーは、ACL 機能が有効になっている ApsaraMQ for Kafka プロフェッショナル版インスタンスに対してのみ作成できます。
variable "name" { default = "tf-example" } variable "region" { default = "cn-shenzhen" } data "alicloud_zones" "default" { available_resource_creation = "VSwitch" } variable "zone_id" { default = "cn-shenzhen-f" } provider "alicloud" { region = var.region } resource "alicloud_vpc" "default" { vpc_name = var.name cidr_block = "10.4.0.0/16" } resource "alicloud_vswitch" "default" { vswitch_name = var.name cidr_block = "10.4.0.0/24" vpc_id = alicloud_vpc.default.id zone_id = data.alicloud_zones.default.zones.0.id } # セキュリティグループを作成します。 resource "alicloud_security_group" "default" { vpc_id = alicloud_vpc.default.id } resource "random_integer" "default" { min = 10000 max = 99999 } resource "alicloud_alikafka_instance" "default" { name = "${var.name}-${random_integer.default.result}" partition_num = 50 disk_type = "1" disk_size = "500" deploy_type = "5" io_max = "20" spec_type = "professional" service_version = "2.2.0" config = "{\"enable.acl\":\"true\"}" vswitch_id = alicloud_vswitch.default.id security_group = alicloud_security_group.default.id } resource "alicloud_alikafka_topic" "default" { instance_id = alicloud_alikafka_instance.default.id topic = "example-topic" remark = "topic-remark" } resource "alicloud_alikafka_sasl_user" "default" { instance_id = alicloud_alikafka_instance.default.id username = var.name password = "tf_example123" }main.tf 構成ファイルに、
resource "alicloud_alikafka_sasl_acl" "default"設定項目を追加します。resource "alicloud_alikafka_sasl_acl" "default" { instance_id = alicloud_alikafka_instance.default.id username = alicloud_alikafka_sasl_user.default.username acl_resource_type = "Topic" acl_resource_name = alicloud_alikafka_topic.default.topic acl_resource_pattern_type = "LITERAL" acl_operation_type = "Write" }
次のコマンドを実行して、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実行計画を作成し、変更をプレビューします。
terraform plan次のコマンドを実行して、リソースを作成します。
terraform apply実行中に、プロンプトが表示されたら
yesと入力し、[enter] キーを押します。コマンドが実行されるまで待ちます。次の情報が表示された場合、操作は成功です。random_integer.default: Creating... random_integer.default: Creation complete after 0s [id=****] alicloud_vpc.default: Creating... alicloud_vpc.default: Creation complete after 7s [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... [4m20s elapsed] alicloud_alikafka_instance.default: Creation complete after 4m22s [id=alikafka_post-cn-****] alicloud_alikafka_sasl_user.default: Creating... alicloud_alikafka_topic.default: Creating... alicloud_alikafka_sasl_user.default: Creation complete after 3s [id=alikafka_post-cn-****:tf-example] alicloud_alikafka_topic.default: Creation complete after 8s [id=alikafka_post-cn-****:example-topic] alicloud_alikafka_sasl_acl.default: Creating... alicloud_alikafka_sasl_acl.default: Still creating... [10s elapsed] ··· alicloud_alikafka_sasl_acl.default: Still creating... [1m0s elapsed] alicloud_alikafka_sasl_acl.default: Creation complete after 1m1s [id=alikafka_post-cn-****:tf-example:Topic:example-topic:LITERAL:Write] Apply complete! Resources: 8 added, 0 changed, 0 destroyed.結果を確認します。
terraform show コマンドを使用する
terraform showコマンドを実行して、SASL ユーザーの権限を表示します。terraform show# alicloud_alikafka_sasl_acl.default: resource "alicloud_alikafka_sasl_acl" "default" { acl_operation_type = "Write" acl_resource_name = "example-topic" acl_resource_pattern_type = "LITERAL" acl_resource_type = "Topic" host = "*" id = "alikafka_post-cn-****:tf-example:Topic:example-topic:LITERAL:Write" instance_id = "alikafka_post-cn-****" username = "tf-example" }ApsaraMQ for Kafka コンソールを使用する
ApsaraMQ for Kafka コンソール にログインして、SASL ユーザーの権限を表示します。

SASL ユーザーの権限をクエリする
main.tf 構成ファイルに、
data "alicloud_alikafka_sasl_users" "sasl_acls_ds"設定項目を追加し、次のコード スニペットに基づいて設定項目を構成します。data "alicloud_alikafka_sasl_acls" "sasl_acls_ds" { instance_id = "<ApsaraMQ for Kafka インスタンスの ID>" username = "<SASL ユーザーの名前>" acl_resource_type = "<ACL が関連付けられているリソースのタイプ>" acl_resource_name = "<ACL が関連付けられているリソースの名前>" output_file = "saslAcls.txt" }実行計画を作成し、変更をプレビューします。
terraform plan次のコマンドを実行して、リソースを作成します。
terraform apply実行中に、プロンプトが表示されたら
yesと入力し、[enter] キーを押します。コマンドが実行されるまで待ちます。次の情報が表示された場合、操作は成功です。random_integer.default: Refreshing state... [id=****] data.alicloud_zones.default: Reading... alicloud_vpc.default: Refreshing state... [id=vpc-****] alicloud_security_group.default: Refreshing state... [id=sg-****] data.alicloud_zones.default: Read complete after 2s [id=****] 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_acls.sasl_acls_ds: Reading... alicloud_alikafka_topic.default: Refreshing state... [id=alikafka_post-cn-****:example-topic] data.alicloud_alikafka_sasl_acls.sasl_acls_ds: Read complete after 0s [id=0] alicloud_alikafka_sasl_acl.default: Refreshing state... [id=alikafka_post-cn-****:tf-example:Topic:example-topic:LITERAL:Write] 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.結果を確認します。
terraform showコマンドを実行して、SASL ユーザーの権限を表示します。terraform show# data.alicloud_alikafka_sasl_acls.sasl_acls_ds: data "alicloud_alikafka_sasl_acls" "sasl_acls_ds" { acl_resource_name = "testTopic" acl_resource_type = "Topic" acls = [] id = "0" instance_id = "alikafka_post-cn-****" output_file = "saslAcls.txt" username = "tf-example" }
リソースをクリアする
Terraform を使用して作成または管理された上記の不要なリソースがある場合は、次のコマンドを実行してリソースを解放します。terraform destroy コマンドの詳細については、「共通コマンド」をご参照ください。
terraform destroyサンプルコード
サンプルコードは、数クリックで実行できます。 ここ をクリックしてサンプルコードを実行します。
サンプルコード
関連情報
ApsaraMQ for Kafka コンソールで、または API 操作を呼び出すことによって、SASL ユーザーに権限を付与することもできます。詳細については、「SASL ユーザーに権限を付与する」および「CreateAcl」をご参照ください。
alicloud_alikafka_sasl_aclリソースによって提供されるその他の引数の詳細については、「alicloud_alikafka_sasl_acl」をご参照ください。