我试图在IAM角色中使用AWSBackupServiceRolePolicyForBackup策略:

data "aws_iam_policy" "aws_backup_service_policy" {
  arn = "arn:aws:iam::aws:policy/service-role/AWSBackupServiceRolePolicyForBackup"
}

resource "aws_iam_role_policy" "backup_service_aws_backup_role_policy" {
  policy = data.aws_iam_policy.aws_backup_service_policy.policy
  role   = aws_iam_role.backup_service_role.name
}

结果是:

错误:正在放置IAM角色策略terraform—20240401140929162200000001:LimitExceeded:超过角色foundry—terraform—backup—service—role—dev的最大策略大小10240字节


This makes sense, as the json for the role is actually over the maximum policy size. However, I've tried minifying the JSON with:

```hcl
resource "aws_iam_role_policy" "backup_service_aws_backup_role_policy" {
  policy = jsonencode(jsondecode(data.aws_iam_policy.aws_backup_service_policy.policy))
  role   = aws_iam_role.backup_service_role.name
}

如所述here:

从Terraform 0.12开始,您可以使用jsondecode和jsonencode的往返生成小型JSON,因为jsonencode总是生成最小的JSON.

如果我创建一个输出,我可以验证value确实被缩小了:

output "policy_json" {
  value = jsonencode(jsondecode(data.aws_iam_policy.aws_backup_service_policy.policy))
  description = "the policy json"

但当我try apply配置时,我最终会遇到同样的错误.为什么政策在申请时没有缩小?

推荐答案

在这种情况下,我try 做的是提供AWS托管策略的ARN,并使用aws_iam_role_policy_attachment资源将其附加:

resource "aws_iam_role_policy_attachment" "backup_service_aws_backup_role_policy" {
  policy_arn = "arn:aws:iam::aws:policy/service-role/AWSBackupServiceRolePolicyForBackup"
  role       = aws_iam_role.backup_service_role.name
}

Json相关问答推荐

Jolt Transformation—如果子对象为空,则将父对象更新为空

从Json响应中为需要每个值的Post请求提取多个值

使用Jolt v.0.1.1向每个json元素添加一个键-值对

使用json_query更新事实

属性错误:';ActivitiesClient';对象没有属性';base_url';

如何在Swift中使用JSON编码器的泛型

将JSON行转换为TSV格式, for each 数组项生成单独的行

Oracle json 对象的最后一个值不在引号中

使用 jq 将消息转换为数组

从字节解码 JSON 数据,将 float 值更改为 int

Flutter:在本地文件 json 中搜索特殊的阿拉伯字符

如何为包含一些固定值并可能具有其他附加值的数组字符串创建数组 json 架构

将哈希表转换为 json 后,Powershell 缺少数组

获取json中某个键的索引

从多维数组数据生成json字符串

Python - 如何将 JSON 文件转换为数据框

将带有数据和文件的 JSON 发布到 Web Api - jQuery / MVC

是否可以将数据写入本地 json 文件,除了Angular 之外什么都没有?

MySQL Select JSON 字段属性具有值的位置

Laravel 5 控制器将 JSON 整数作为字符串发送