Todos los productos
Search
Centro de documentos

Terraform:Create a RAM role and grant permissions

Última actualización: Sep 21, 2026

Use Terraform para crear un rol de RAM y adjuntar una política de permisos personalizada.

Nota

Ejecute el código de ejemplo directamente en Terraform Explorer.

Requisitos previos

  • Por motivos de seguridad, utilice un usuario de RAM con los permisos mínimos obligatorios. Create a RAM user y Grant permissions to a RAM user. Permisos obligatorios:

    {
      "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": "*"
        }
      ]
    }
  • Entorno de ejecución de Terraform (elija una opción):

    Option

    Best for

    Terraform Explorer

    Configuración basada en navegador, sin instalación

    Cloud Shell

    Terraform preinstalado con credenciales configuradas

    Local machine

    Redes inestables o entornos personalizados

Recursos utilizados

Paso 1: crear una política

  1. Cree un directorio de trabajo con un archivo main.tf y copie a continuación el código en main.tf. Este código crea una política personalizada mediante Policy language.

    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. Inicialice el entorno de ejecución de Terraform.

    terraform init

    Salida esperada si la operación se completa correctamente:

    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. Aplique la configuración.

    terraform apply

    Introduzca yes cuando el sistema lo solicite y presione Enter. Salida esperada:

    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. Compruebe el resultado.

    Terraform show

    Ejecute el siguiente comando para consultar los recursos creados:

    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"
    }

    Console

    Inicie sesión en la consola de RAM. Elija Permissions > Policies para consultar la política.

    La política aparece como una política personalizada con la descripción this is a policy test y un recuento de referencias de 0.

Paso 2: crear un rol de RAM y otorgar permisos

  1. Agregue el siguiente código al archivo 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. Genere un plan de ejecución y revise los cambios.

    terraform plan
  3. Aplique la configuración.

    terraform apply

    Introduzca yes cuando el sistema lo solicite y presione Enter. Salida esperada:

    Apply complete! Resources: 2 added, 0 changed, 0 destroyed.
  4. Compruebe el resultado.

    Terraform show

    Ejecute el siguiente comando para consultar los recursos creados:

    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"
    }

    Console

    1. Inicie sesión en la consola de RAM. Elija Identities > Roles para consultar el rol de RAM.

    2. Haga clic en Role Name para consultar sus permisos.

      En la página de detalles del rol, dentro de la pestaña Permissions, compruebe que la política esté adjunta al rol. La tabla de políticas muestra información como el nombre de la política, la descripción, el alcance de los recursos y la fecha de vinculación.

Liberar recursos

Ejecute terraform destroy para liberar los recursos que ya no necesite. Common commands.

terraform destroy

Ejemplo completo

Nota

Ejecute el código de ejemplo directamente en Terraform Explorer.

Código de ejemplo

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
}

Explore las carpetas específicas de cada producto en el repositorio More Complete Examples.