Terraform 自动化执行云资源访问授权

本文涉及的产品
函数计算FC,每月15万CU 3个月
简介: Terraform 自动化执行云资源访问授权,解决云产品初始化需要手工点击授权问题。

1. 背景问题

使用云产品时,有一些云产品功能需要到控制台点击授权,比如使用容器服务场景。中断了自动化集成流程。

image.png

2. 解决方式

可以通过调用以下API实现,自动授权。

2.1 Terrafrom 实现方式

  • 执行模板
//创建角色
resource "alicloud_ram_role" "role" {
    for_each   = {for r in var.roles:r.name => r}
    name = each.value.name
    document= each.value.policy_document
    description = each.value.description
    force       = true
}
//角色关联系统权限
resource "alicloud_ram_role_policy_attachment" "attach" {
  for_each   = {for r in var.roles:r.name => r}
  policy_name = each.value.policy_name
  policy_type = "System"
  role_name   = each.value.name
  depends_on  = [alicloud_ram_role.role]
}
  • 模板参数
variable "access_key" {
  default = ""
}
variable "secret_key" {
  default = ""
}
variable "roles" {
  type = list(object({
    name = string
    policy_document = string
    description = string
    policy_name = string
  }))
  //用到的服务角色
  default = [
    {
    }
  ]
}

2.1.1 容器服务初始化

  • 包含了开通和访问授权
variable "roles" {
  type = list(object({
    name = string
    policy_document = string
    description = string
    policy_name = string
  }))
  default = [
    {
      name = "AliyunCSManagedLogRole"
      policy_document="{\"Statement\":[{\"Action\":\"sts:AssumeRole\",\"Effect\":\"Allow\",\"Principal\":{\"Service\":[\"cs.aliyuncs.com\"]}}],\"Version\":\"1\"}"
      description = "容器服务(CS)Kubernetes集群日志组件使用此角色来访问您在其他云产品中的资源"
      policy_name = "AliyunCSManagedLogRolePolicy"
    },
    {
      name = "AliyunCSManagedCmsRole"
      policy_document="{\"Statement\":[{\"Action\":\"sts:AssumeRole\",\"Effect\":\"Allow\",\"Principal\":{\"Service\":[\"cs.aliyuncs.com\"]}}],\"Version\":\"1\"}"
      description = "容器服务(CS)集群CMS组件使用此角色来访问您在其他云产品中的资源。"
      policy_name = "AliyunCSManagedCmsRolePolicy"
    },
    {
      name = "AliyunCSManagedCsiRole"
      policy_document="{\"Statement\":[{\"Action\":\"sts:AssumeRole\",\"Effect\":\"Allow\",\"Principal\":{\"Service\":[\"cs.aliyuncs.com\"]}}],\"Version\":\"1\"}"
      description = "容器服务(CS)Kubernetes集群存储插件使用此角色来访问您在其他云产品中的资源"
      policy_name = "AliyunCSManagedCsiRolePolicy"
    },
    {
      name = "AliyunCSManagedVKRole"
      policy_document="{\"Statement\":[{\"Action\":\"sts:AssumeRole\",\"Effect\":\"Allow\",\"Principal\":{\"Service\":[\"cs.aliyuncs.com\"]}}],\"Version\":\"1\"}"
      description = "容器服务(CS)Serverless集群VK组件使用此角色来访问您在其他云产品中的资源。"
      policy_name = "AliyunCSManagedVKRolePolicy"
    },
    {
      name = "AliyunCSClusterRole"
      policy_document="{\"Statement\":[{\"Action\":\"sts:AssumeRole\",\"Effect\":\"Allow\",\"Principal\":{\"Service\":[\"cs.aliyuncs.com\"]}}],\"Version\":\"1\"}"
      description = "容器服务(CS)在应用运行期使用此角色来访问您在其他云产品中的资源"
      policy_name = "AliyunCSClusterRolePolicy"
    },
    {
      name = "AliyunCSServerlessKubernetesRole"
      policy_document="{\"Statement\":[{\"Action\":\"sts:AssumeRole\",\"Effect\":\"Allow\",\"Principal\":{\"Service\":[\"cs.aliyuncs.com\"]}}],\"Version\":\"1\"}"
      description = "容器服务(CS)ServerlessKubernetes版默认使用此角色来访问您在其他云产品中的资源"
      policy_name = "AliyunCSServerlessKubernetesRolePolicy"
    },
    {
      name = "AliyunCSKubernetesAuditRole"
      policy_document="{\"Statement\":[{\"Action\":\"sts:AssumeRole\",\"Effect\":\"Allow\",\"Principal\":{\"Service\":[\"cs.aliyuncs.com\"]}}],\"Version\":\"1\"}"
      description = "容器服务(CS)Kubernetes审计功能使用此角色来访问您在其他云产品中的资源"
      policy_name = "AliyunCSKubernetesAuditRolePolicy"
    },
    {
      name = "AliyunCSManagedNetworkRole"
      policy_document="{\"Statement\":[{\"Action\":\"sts:AssumeRole\",\"Effect\":\"Allow\",\"Principal\":{\"Service\":[\"cs.aliyuncs.com\"]}}],\"Version\":\"1\"}"
      description = "容器服务(CS)集群网络组件使用此角色来访问您在其他云产品中的资源。"
      policy_name = "AliyunCSManagedNetworkRolePolicy"
    },
    {
      name = "AliyunCSDefaultRole"
      policy_document="{\"Statement\":[{\"Action\":\"sts:AssumeRole\",\"Effect\":\"Allow\",\"Principal\":{\"Service\":[\"cs.aliyuncs.com\"]}}],\"Version\":\"1\"}"
      description = "容器服务(CS)在集群操作时默认使用此角色来访问您在其他云产品中的资源"
      policy_name = "AliyunCSDefaultRolePolicy"
    },
    {
      name = "AliyunCSManagedKubernetesRole"
      policy_document="{\"Statement\":[{\"Action\":\"sts:AssumeRole\",\"Effect\":\"Allow\",\"Principal\":{\"Service\":[\"cs.aliyuncs.com\"]}}],\"Version\":\"1\"}"
      description = "容器服务(CS)ManagedKubernetes版默认使用此角色来访问您在其他云产品中的资源"
      policy_name = "AliyunCSManagedKubernetesRolePolicy"
    }
  ,
    {
      name = "AliyunCSManagedArmsRole"
      policy_document="{\"Statement\":[{\"Action\":\"sts:AssumeRole\",\"Effect\":\"Allow\",\"Principal\":{\"Service\":[\"cs.aliyuncs.com\"]}}],\"Version\":\"1\"}"
      description = "容器服务(CS) Kubernetes 集群Arms插件使用此角色来访问您在其他云产品中的资源。"
      policy_name = "AliyunCSManagedArmsRolePolicy"
    }
  ]
}
data "alicloud_ack_service" "open" {
    enable = "On"
    type   = "propayasgo"
}
resource "alicloud_ram_role" "role" {
    for_each   = {for r in var.roles:r.name => r}
    name = each.value.name
    document= each.value.policy_document
    description = each.value.description
    force       = true
}
resource "alicloud_ram_role_policy_attachment" "attach" {
  for_each   = {for r in var.roles:r.name => r}
  policy_name = each.value.policy_name
  policy_type = "System"
  role_name   = each.value.name
  depends_on  = [alicloud_ram_role.role]
}

3. 服务授权策略获取

image.png

相关实践学习
使用ACS算力快速搭建生成式会话应用
阿里云容器计算服务 ACS(Container Compute Service)以Kubernetes为使用界面,采用Serverless形态提供弹性的算力资源,使您轻松高效运行容器应用。本文将指导您如何通过ACS控制台及ACS集群证书在ACS集群中快速部署并公开一个容器化生成式AI会话应用,并监控应用的运行情况。
深入解析Docker容器化技术
Docker是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux机器上,也可以实现虚拟化,容器是完全使用沙箱机制,相互之间不会有任何接口。Docker是世界领先的软件容器平台。开发人员利用Docker可以消除协作编码时“在我的机器上可正常工作”的问题。运维人员利用Docker可以在隔离容器中并行运行和管理应用,获得更好的计算密度。企业利用Docker可以构建敏捷的软件交付管道,以更快的速度、更高的安全性和可靠的信誉为Linux和Windows Server应用发布新功能。 在本套课程中,我们将全面的讲解Docker技术栈,从环境安装到容器、镜像操作以及生产环境如何部署开发的微服务应用。本课程由黑马程序员提供。     相关的阿里云产品:容器服务 ACK 容器服务 Kubernetes 版(简称 ACK)提供高性能可伸缩的容器应用管理能力,支持企业级容器化应用的全生命周期管理。整合阿里云虚拟化、存储、网络和安全能力,打造云端最佳容器化应用运行环境。 了解产品详情: https://www.aliyun.com/product/kubernetes
目录
相关文章
|
弹性计算 运维 监控
带你读《云上自动化运维宝典》——提升云上资源稳定性的两大利器:事件驱动体系构建&自诊断工具(2)
带你读《云上自动化运维宝典》——提升云上资源稳定性的两大利器:事件驱动体系构建&自诊断工具(2)
230 1
|
2月前
|
机器人 API
使用OOS实现RAM权限审批流授权及自动化撤销授权的概念验证
本方案通过阿里云OOS与ROS联动,实现RAM账户授权自动化。用户申请后由审批人确认,系统自动授予指定策略,并在预设时间后自动撤销权限,提升安全性与管理效率。
|
8月前
|
弹性计算 安全 API
长桥科技:通过Terraform自动化为客户提供安全、高效的产品服务体验
长桥科技通过采用Terraform加速业务上线,实现云资源的高效管理。作为一家金融科技公司,长桥为证券、资管等机构提供数字化解决方案。其SRE团队利用Terraform构建CICD流程,自动化配置云资源及应用配置,简化了基础设施管理,提升了开发效率。通过模块化和自动化部署,新租户的配置从一天缩短至20分钟,显著减少了人力成本和操作复杂度。此外,长桥还遵循编程规范,确保代码的可测试性和复用性,进一步优化了云上基础设施的构建与管理。
|
11月前
|
运维 Linux Apache
Puppet 作为一款强大的自动化运维工具,被广泛应用于配置管理领域。通过定义资源的状态和关系,Puppet 能够确保系统始终处于期望的配置状态。
Puppet 作为一款强大的自动化运维工具,被广泛应用于配置管理领域。通过定义资源的状态和关系,Puppet 能够确保系统始终处于期望的配置状态。
356 3
|
消息中间件 弹性计算 运维
带你读《云上自动化运维宝典》——提升云上资源稳定性的两大利器:事件驱动体系构建&自诊断工具(1)
带你读《云上自动化运维宝典》——提升云上资源稳定性的两大利器:事件驱动体系构建&自诊断工具(1)
222 1
|
8月前
|
弹性计算 监控 网络协议
自动化AutoTalk第十二期-使用Terraform高效实现云自动化
《自动化AutoTalk第十二期》聚焦使用Terraform高效实现云自动化。内容涵盖IaC(基础设施即代码)概述、Terraform简介与核心组件、实现云自动化步骤及最佳实践。通过Terraform的统一编排语言HCL和对资源生命周期管理,结合CI/CD流程,实现云资源的自服务管理。强调了Terraform在环境准备、业务集成、生产配置及持续监控中的应用,并分享了结合GitLab/GitHub进行代码托管和流程标准化的最佳实践。
216 9
|
运维 Linux Apache
【一键变身超人!】Puppet 自动化运维神器 —— 让你的服务器听话如婴儿,轻松管理资源不是梦!
【8月更文挑战第9天】随着云计算与容器化技术的发展,自动化运维已成为现代IT基础设施的核心部分。Puppet是一款强大的自动化工具,用于配置管理,确保系统保持预期状态。通过易于理解的配置文件定义资源及其依赖关系,Puppet实现了“基础设施即代码”的理念。本文简要介绍了Puppet的安装配置方法及示例,包括Puppet Agent与Master的安装、基本配置步骤和一个简单的Apache HTTP Server管理示例,展示了Puppet在实际应用中的强大功能与灵活性。
197 9
|
运维 持续交付 网络安全
自动化运维:Ansible与Terraform的比较
【8月更文挑战第16天】Ansible和Terraform都是自动化运维领域的重要工具,它们各自以其独特的功能和优势在市场中占据了一席之地。在选择使用哪个工具时,用户应根据自己的实际需求和应用场景进行综合考虑。如果主要关注系统配置管理和应用程序部署,那么Ansible可能是一个更好的选择;如果主要关注基础设施的自动化部署和管理,那么Terraform可能更适合您的需求。
|
弹性计算 JSON 开发工具
"一键玩转阿里云ECS!Python大神揭秘:如何自动化创建镜像并跨地域复制,让你的云资源部署秒变高效达人!"
【8月更文挑战第14天】本文介绍如何使用Python与阿里云SDK自动化管理ECS镜像,包括创建镜像及跨地域复制,以优化云资源部署。首先安装`aliyun-python-sdk-ecs`并配置阿里云凭证。接着,通过Python脚本实现镜像创建与复制功能,简化日常运维工作并增强灾难恢复能力。注意权限及费用问题。
280 2
|
存储 Linux 数据中心
【Azure 环境】在Windows系统中 使用Terraform创建中国区Azure资源步骤(入门级)
【Azure 环境】在Windows系统中 使用Terraform创建中国区Azure资源步骤(入门级)
167 0

推荐镜像

更多