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

Terraform:Terraform を使用して RAM ロールを作成し、RAM ロールに権限を付与する

最終更新日:Jan 17, 2025

Terraform は、クラウド リソースを安全かつ効率的にプレビュー、構成、および管理できるオープンソースツールです。このトピックでは、Terraform を使用して Resource Access Management (RAM) ロールを作成し、RAM ロールにポリシーをアタッチする方法について説明します。

説明

このトピックのサンプルコードは、数クリックで実行できます。詳細については、Terraform Explorer にアクセスしてください。

前提条件

  • このトピックの操作を実行するために必要な最小限の権限を持つ RAM ユーザーを使用することをお勧めします。これにより、Alibaba Cloud アカウントの AccessKey ペアが漏洩するリスクが軽減されます。必要な最小限の権限を含むポリシーを RAM ユーザーにアタッチする方法については、「RAM ユーザーを作成する」および「RAM ユーザーに権限を付与する」をご参照ください。この例では、次のポリシーが使用されます。

    {
      "Version": "1",
      "Statement": [
        {
          "Effect": "Allow",
          "Action": [
            "ram:GetRole",
            "ram:ListPoliciesForRole",
            "ram:ListRoles",
            "ram:CreateRole",
            "ram:DeleteRole",
            "ram:DetachPolicyFromRole",
            "ram:UpdateRole",
            "ram:GetPolicy",
            "ram:GetPolicyVersion",
            "ram:AttachPolicyToRole",
            "ram:CreatePolicy",
            "ram:CreatePolicyVersion",
            "ram:ListEntitiesForPolicy",
            "ram:ListPolicyVersions",
            "ram:DeletePolicy",
            "ram:DeletePolicyVersion",
            "ram:ListPoliciesForGroup",
            "ram:ListPolicies",
            "ram:ListPolicyAttachments"
          ],
          "Resource": "*"
        }
      ]
    }
  • Terraform の実行環境は、次のいずれかの方法で準備します。

    • Terraform Explorer で Terraform を使用する: Alibaba Cloud は、Terraform 用のオンライン実行環境を提供しています。Terraform をインストールする必要なく、環境にログインして Terraform を使用できます。この方法は、低コスト、効率的、かつ便利な方法で Terraform を使用およびデバッグする必要があるシナリオに適しています。

    • Cloud Shell で Terraform を使用する: Cloud Shell には、Terraform がプリインストールされており、ID 資格情報が構成されています。Cloud Shell で Terraform コマンドを実行できます。この方法は、低コスト、効率的、かつ便利な方法で Terraform を使用およびアクセスする必要があるシナリオに適しています。

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

Resources used

ステップ 1: ポリシーを作成する

  1. 作業ディレクトリと、main.tf という名前の構成ファイルをディレクトリに作成します。次のサンプルコードは、カスタムポリシーを作成する方法を示しています。ポリシーの詳細については、「ポリシー言語」をご参照ください。サンプルコードを main.tf ファイルにコピーできます。

    resource "random_integer" "default" {
      min = 10000
      max = 99999
    }
    
    # ポリシー。
    resource "alicloud_ram_policy" "policy" {
      policy_name     = "policy-name-${random_integer.default.result}"
      policy_document = <<EOF
        {
          "Statement": [
            {
              "Action": [
                "oss:ListObjects",
                "oss:GetObject"
              ],
              "Effect": "Deny",
              "Resource": [
                "acs:oss:*:*:mybucket",
                "acs:oss:*:*:mybucket/*"
              ]
            }
          ],
            "Version": "1"
        }
    EOF
      description     = "これはポリシーテストです"
      force           = true
    }
  2. 次のコマンドを実行して、Terraform 実行環境を初期化します。

    terraform init

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

    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. 次のコマンドを実行して、コードを実行します。

    terraform apply

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

    You can apply this plan to save these new output values to the Terraform state, without changing any real infrastructure.
    
    Do you want to perform these actions?
      Terraform will perform the actions described above.
      Only 'yes' will be accepted to approve.
    
      Enter a value: yes
    
    
    Apply complete!  Resources: 2 added, 0 changed, 0 destroyed.
  4. 結果を確認します。

    terraform show コマンドを実行する

    作業ディレクトリで次のコマンドを実行して、Terraform を使用して作成されたポリシーの詳細をクエリします。

    terraform show

    image

    RAM コンソールにログインする

    RAM コンソール にログインします。左側のナビゲーションウィンドウで、[権限] > [ポリシー] を選択します。[ポリシー] ページで、作成されたポリシーを表示します。

    image

ステップ 2: RAM ロールを作成し、RAM ロールにポリシーをアタッチする

  1. main.tf ファイルに次のコンテンツを追加します。

    # RAM ロール。
    resource "alicloud_ram_role" "role" {
      name        = "role-name-${random_integer.default.result}"
      document    = <<EOF
        {
          "Statement": [
            {
              "Action": "sts:AssumeRole",
              "Effect": "Allow",
              "Principal": {
                "Service": [
                  "apigateway.aliyuncs.com",
                  "ecs.aliyuncs.com"
                ]
              }
            }
          ],
          "Version": "1"
        }
    EOF
      description = "これはロールテストです。"
      force       = true
    }
    
    # RAM ロールにポリシーをアタッチします。
    resource "alicloud_ram_role_policy_attachment" "attach" {
      policy_name = alicloud_ram_policy.policy.policy_name
      role_name   = alicloud_ram_role.role.name
      policy_type = alicloud_ram_policy.policy.type
    }
  2. 実行計画を作成し、変更をプレビューします。

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

    terraform apply

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

    Apply complete! Resources: 2 added, 0 changed, 0 destroyed.
  4. 結果を確認します。

    terraform show コマンドを実行する

    作業ディレクトリで次のコマンドを実行して、Terraform を使用して作成された RAM ロールの詳細をクエリします。

    terraform show

    image

    RAM コンソールにログインする

    1. RAM コンソール にログインします。左側のナビゲーションウィンドウで、[ID] > [ロール] を選択します。[ロール] ページで、作成された RAM ロールを表示します。

      image

    2. RAM ロールの名前をクリックして、RAM ロールにアタッチされているポリシーを表示します。

      image

リソースを解放する

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

terraform destroy

説明

このトピックのサンプルコードは、数クリックで実行できます。詳細については、Terraform Explorer にアクセスしてください。

サンプルコード

resource "random_integer" "default" {
  min = 10000
  max = 99999
}

# ポリシー。
resource "alicloud_ram_policy" "policy" {
  policy_name     = "policy-name-${random_integer.default.result}"
  policy_document = <<EOF
    {
      "Statement": [
        {
          "Action": [
            "oss:ListObjects",
            "oss:GetObject"
          ],
          "Effect": "Deny",
          "Resource": [
            "acs:oss:*:*:mybucket",
            "acs:oss:*:*:mybucket/*"
          ]
        }
      ],
        "Version": "1"
    }
EOF
  description     = "これはポリシーテストです"
  force           = true
}

# RAM ロール。
resource "alicloud_ram_role" "role" {
  name        = "role-name-${random_integer.default.result}"
  document    = <<EOF
    {
      "Statement": [
        {
          "Action": "sts:AssumeRole",
          "Effect": "Allow",
          "Principal": {
            "Service": [
              "apigateway.aliyuncs.com",
              "ecs.aliyuncs.com"
            ]
          }
        }
      ],
      "Version": "1"
    }
EOF
  description = "これはロールテストです。"
  force       = true
}

# RAM ロールにポリシーをアタッチします。
resource "alicloud_ram_role_policy_attachment" "attach" {
  policy_name = alicloud_ram_policy.policy.policy_name
  role_name   = alicloud_ram_role.role.name
  policy_type = alicloud_ram_policy.policy.type
}

より完全な例を表示する場合は、より完全な例 ページの対応するサービスのディレクトリにアクセスしてください。