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

本文涉及的产品
函数计算FC,每月15万CU 3个月
容器服务 Serverless 版 ACK Serverless,952元额度 多规格
容器服务 Serverless 版 ACK Serverless,317元额度 多规格
简介: 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

相关实践学习
巧用云服务器ECS制作节日贺卡
本场景带您体验如何在一台CentOS 7操作系统的ECS实例上,通过搭建web服务器,上传源码到web容器,制作节日贺卡网页。
容器应用与集群管理
欢迎来到《容器应用与集群管理》课程,本课程是“云原生容器Clouder认证“系列中的第二阶段。课程将向您介绍与容器集群相关的概念和技术,这些概念和技术可以帮助您了解阿里云容器服务ACK/ACK Serverless的使用。同时,本课程也会向您介绍可以采取的工具、方法和可操作步骤,以帮助您了解如何基于容器服务ACK Serverless构建和管理企业级应用。 学习完本课程后,您将能够: 掌握容器集群、容器编排的基本概念 掌握Kubernetes的基础概念及核心思想 掌握阿里云容器服务ACK/ACK Serverless概念及使用方法 基于容器服务ACK Serverless搭建和管理企业级网站应用
目录
相关文章
|
6月前
|
弹性计算 运维 监控
带你读《云上自动化运维宝典》——提升云上资源稳定性的两大利器:事件驱动体系构建&自诊断工具(2)
带你读《云上自动化运维宝典》——提升云上资源稳定性的两大利器:事件驱动体系构建&自诊断工具(2)
109 1
|
23天前
|
运维 Linux Apache
Puppet 作为一款强大的自动化运维工具,被广泛应用于配置管理领域。通过定义资源的状态和关系,Puppet 能够确保系统始终处于期望的配置状态。
Puppet 作为一款强大的自动化运维工具,被广泛应用于配置管理领域。通过定义资源的状态和关系,Puppet 能够确保系统始终处于期望的配置状态。
46 3
|
6月前
|
消息中间件 弹性计算 运维
带你读《云上自动化运维宝典》——提升云上资源稳定性的两大利器:事件驱动体系构建&自诊断工具(1)
带你读《云上自动化运维宝典》——提升云上资源稳定性的两大利器:事件驱动体系构建&自诊断工具(1)
145 1
|
3月前
|
运维 Linux Apache
【一键变身超人!】Puppet 自动化运维神器 —— 让你的服务器听话如婴儿,轻松管理资源不是梦!
【8月更文挑战第9天】随着云计算与容器化技术的发展,自动化运维已成为现代IT基础设施的核心部分。Puppet是一款强大的自动化工具,用于配置管理,确保系统保持预期状态。通过易于理解的配置文件定义资源及其依赖关系,Puppet实现了“基础设施即代码”的理念。本文简要介绍了Puppet的安装配置方法及示例,包括Puppet Agent与Master的安装、基本配置步骤和一个简单的Apache HTTP Server管理示例,展示了Puppet在实际应用中的强大功能与灵活性。
54 9
|
3月前
|
弹性计算 JSON 开发工具
"一键玩转阿里云ECS!Python大神揭秘:如何自动化创建镜像并跨地域复制,让你的云资源部署秒变高效达人!"
【8月更文挑战第14天】本文介绍如何使用Python与阿里云SDK自动化管理ECS镜像,包括创建镜像及跨地域复制,以优化云资源部署。首先安装`aliyun-python-sdk-ecs`并配置阿里云凭证。接着,通过Python脚本实现镜像创建与复制功能,简化日常运维工作并增强灾难恢复能力。注意权限及费用问题。
85 2
|
3月前
|
存储 Linux 数据中心
【Azure 环境】在Windows系统中 使用Terraform创建中国区Azure资源步骤(入门级)
【Azure 环境】在Windows系统中 使用Terraform创建中国区Azure资源步骤(入门级)
|
5月前
|
数据采集 Web App开发 JavaScript
Puppeteer实战指南:自动化抓取网页中的图片资源
Puppeteer实战指南:自动化抓取网页中的图片资源
|
5月前
|
数据采集 Web App开发 JavaScript
Puppeteer实战案例:自动化抓取社交媒体上的媒体资源
Puppeteer实战案例:自动化抓取社交媒体上的媒体资源
|
6月前
|
消息中间件 Kubernetes Kafka
Terraform阿里云创建资源1分钟创建集群一键发布应用Terraform 创建 Kubernetes 集群
Terraform阿里云创建资源1分钟创建集群一键发布应用Terraform 创建 Kubernetes 集群
115 0
|
6月前
|
弹性计算 运维 安全
带你读《云上自动化运维宝典》——提升云上资源稳定性的两大利器:事件驱动体系构建&自诊断工具(3)
带你读《云上自动化运维宝典》——提升云上资源稳定性的两大利器:事件驱动体系构建&自诊断工具(3)
132 1
带你读《云上自动化运维宝典》——提升云上资源稳定性的两大利器:事件驱动体系构建&自诊断工具(3)

推荐镜像

更多