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

Terraform:Terraform を使用した RAM ロールの作成および権限付与

最終更新日:Mar 14, 2026

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

説明

このチュートリアルに記載されているサンプルコードはワンクリック実行に対応しており、そのまま実行できます。ワンクリックで実行

前提条件

  • セキュリティリスクを低減するため、このチュートリアルで実行する操作には、最小限の必要な権限のみを持つ Resource Access Management (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 の実行には、以下のいずれかの方法を使用できます。

    • Terraform Explorer での Terraform の使用:Alibaba Cloud が提供するオンライン環境で Terraform を実行できます。Terraform のインストールは不要であり、ログインするだけでオンラインで Terraform を利用・試用できます。これは、無料で迅速かつ簡単に Terraform を試験・デバッグしたい場合に適した方法です。

    • Cloud Shell:Alibaba Cloud Cloud Shell には、事前にインストール済みの Terraform コンポーネントと設定済みの認証情報が含まれています。Cloud Shell 内で Terraform コマンドを直接実行できます。これは、低コストで迅速かつ簡単に Terraform にアクセス・利用したい場合に適した方法です。

    • ローカルマシンへの Terraform のインストールおよび構成:ネットワーク接続が不安定な場合や、カスタム開発環境が必要な場合に適した方法です。

使用するリソース

ステップ 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     = "this is a policy test"
      force           = true
    }
  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. 次のコマンドを実行してコードを実行します。

    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

    コンソールでの確認

    Resource Access Management (RAM) コンソール にログインします。権限管理 > ポリシー ページに移動し、作成したアクセスポリシーを確認します。

    image

ステップ 2: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 = "this is a role test."
      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 によって作成されたリソースの詳細を照会します:

    terraform show

    image

    コンソールでの確認

    1. Resource Access Management (RAM) コンソール にログインします。ID 管理 > ロール ページに移動し、作成した RAM ロールを確認します。

      image

    2. ロール名 をクリックして、RAM ロールの権限を確認します。

      image

リソースのクリーンアップ

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

terraform destroy

完全なサンプルコード

説明

このチュートリアルに記載されているサンプルコードはワンクリック実行に対応しており、そのまま実行できます。ワンクリックで実行

サンプルコード

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     = "this is a policy test"
  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 = "this is a role test."
  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
}

より完全なサンプルについては、「より完全なサンプル」の製品固有フォルダをご参照ください。