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

Terraform:RAM ロールの作成と権限付与

最終更新日:Jun 04, 2026

Terraform を使用して RAM ロールを作成し、カスタム権限ポリシーをアタッチします。

説明

サンプルコードを Terraform Explorer で直接実行できます。

前提条件

  • セキュリティのため、必要な最小限の権限を持つ 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
    }
    
    # Create a policy.
    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 show
    shell@Alicloud:~/ram2$ terraform show
    # alicloud_ram_policy.policy:
    resource "alicloud_ram_policy" "policy" {
        attachment_count = 0
        default_version  = "v1"
        description      = "this is a policy test"
        document         = <<-EOT
            {
    
                "Statement": [
                    {
                        "Action": [
                            "oss:ListObjects",
                            "oss:GetObject"
                        ],
                        "Effect": "Deny",
                        "Resource": [
                            "acs:oss:*:*:mybucket",
                            "acs:oss:*:*:mybucket/*"
                        ]
                    }
                ],
                "Version": "1"
            }
    
        EOT
        force            = true
        id               = "policy-name-xxx"
        name             = "policy-name-xxx"
        policy_document  = <<-EOT
            {
    
                "Statement": [
                    {
                        "Action": [
                            "oss:ListObjects",
                            "oss:GetObject"
                        ],
                        "Effect": "Deny",
                        "Resource": [
                            "acs:oss:*:*:mybucket",
                            "acs:oss:*:*:mybucket/*"
                        ]
                    }
                ],
                "Version": "1"
            }
    
        EOT
        policy_name      = "policy-name-xxx"
        type             = "Custom"
    }

    コンソール

    RAM コンソールにログインします。権限 > ポリシー の順に選択してポリシーを表示します。

    ポリシーは説明が this is a policy test で参照回数が 0 のカスタムポリシーとして一覧表示されます。

ステップ 2:RAM ロールの作成と権限付与

  1. main.tf ファイルに次のコードを追加します。

    # Create a RAM role.
    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
    }
    
    # Attach the policy to the RAM role.
    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 show
    # alicloud_ram_role.role:
    resource "alicloud_ram_role" "role" {
        arn                  = "acs:ram::xxx:role/role-name-xxx"
        description          = "this is a role test."
        document             = jsonencode(
            {
                Statement = [
                    {
                        Action    = "sts:AssumeRole"
                        Effect    = "Allow"
                        Principal = {
                            Service = [
                                "apigateway.aliyuncs.com",
                                "ecs.aliyuncs.com",
                            ]
                        }
                    },
                ]
                Version   = "1"
            }
        )
        force                = true
        id                   = "role-name-xxx"
        max_session_duration = 3600
        name                 = "role-name-xxx"
        ram_users            = []
        role_id              = "xxx"
        services             = [
            "apigateway.aliyuncs.com",
            "ecs.aliyuncs.com",
        ]
        version              = "1"
    }
    
    # alicloud_ram_role_policy_attachment.attach:
    resource "alicloud_ram_role_policy_attachment" "attach" {
        id          = "role:policy-name-xxx:Custom:role-name-xxx"
        policy_name = "policy-name-xxx"
        policy_type = "Custom"
        role_name   = "role-name-xxx"
    }

    コンソール

    1. RAM コンソールにログインします。ID 管理 > ロール の順に選択して RAM ロールを表示します。

    2. ロール名をクリックして権限を表示します。

      ロール詳細ページの権限タブで、ポリシーがロールにアタッチされていることを確認します。ポリシー一覧には、ポリシー名、説明、リソーススコープ、アタッチ時刻などの情報が表示されます。

リソースのリリース

不要になったリソースをリリースするには、terraform destroy を実行します。一般的なコマンド

terraform destroy

完全なサンプル

説明

サンプルコードを Terraform Explorer で直接実行できます。

サンプルコード

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

# Create a policy.
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
}

# Create a RAM role.
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
}

# Attach the policy to the RAM role.
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
}

より完全なサンプル リポジトリ内のプロダクト固有のフォルダをご確認ください。