Use Terraform para crear un rol de RAM y adjuntar una política de permisos personalizada.
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
Configuración basada en navegador, sin instalación
Terraform preinstalado con credenciales configuradas
Redes inestables o entornos personalizados
Recursos utilizados
alicloud_ram_policy: crea una política.
alicloud_ram_role: crea un rol de RAM.
alicloud_ram_role_policy_attachment: adjunta una política a un rol de RAM.
Paso 1: crear una política
-
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 } -
Inicialice el entorno de ejecución de Terraform.
terraform initSalida 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. -
Aplique la configuración.
terraform applyIntroduzca
yescuando 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. -
Compruebe el resultado.
Terraform show
Ejecute el siguiente comando para consultar los recursos creados:
terraform showshell@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 para consultar la política.
La política aparece como una política personalizada con la descripción
this is a policy testy un recuento de referencias de 0.
Paso 2: crear un rol de RAM y otorgar permisos
-
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 } -
Genere un plan de ejecución y revise los cambios.
terraform plan -
Aplique la configuración.
terraform applyIntroduzca
yescuando el sistema lo solicite y presione Enter. Salida esperada:Apply complete! Resources: 2 added, 0 changed, 0 destroyed. -
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
Inicie sesión en la consola de RAM. Elija para consultar el rol de RAM.
-
Haga clic en 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
Ejecute el código de ejemplo directamente en Terraform Explorer.
Código de ejemplo
Explore las carpetas específicas de cada producto en el repositorio More Complete Examples.