Terraform - 具有编程访问权限的 AWS IAM 用户

Posted

技术标签:

【中文标题】Terraform - 具有编程访问权限的 AWS IAM 用户【英文标题】:Terraform - AWS IAM user with Programmatic access 【发布时间】:2020-03-10 04:42:25 【问题描述】:

我正在通过terraform 与aws 合作。 我正在尝试创建一个访问类型为“Programmatic access”的 IAM 用户。

使用 AWS 管理控制台,这非常简单:

在尝试使用 Terraform (reference to docs) 时,似乎只支持以下参数:

name
path
permissions_boundary
force_destroy
tags

也许这应该通过策略进行配置? 任何帮助将不胜感激。


(*) Related question 不同的场景。

【问题讨论】:

【参考方案1】:

您可以使用aws_iam_access_key (https://www.terraform.io/docs/providers/aws/r/iam_access_key.html) terraform 资源为用户创建访问密钥,这意味着该用户拥有Programmatic Access

希望这会有所帮助。

【讨论】:

是的,大概就是这样。我希望 AWS_IAM_USER 资源中支持“程序访问”(布尔值)的参数,它将提供“访问密钥”作为属性。【参考方案2】:

aws_iam_user 资源还需要为它创建一个 aws_iam_access_key 资源。

iam-user 模块有 a comprehensive example 使用它。

您也可以直接从注册表中使用该模块,让它为您完成所有工作。

【讨论】:

【参考方案3】:

如果您不想加密并且只是在访问密钥秘密密钥中寻找纯文本,您可以使用此

ma​​in.tf

resource "aws_iam_access_key" "sagemaker" 
  user    = aws_iam_user.user.name


resource "aws_iam_user" "user" 
  name = "user-name"
  path = "/"


data "aws_iam_policy" "sagemaker_policy" 
  arn = "arn:aws:iam::aws:policy/AmazonSageMakerFullAccess"


resource "aws_iam_policy_attachment" "attach-policy" 
  name       = "sagemaker-policy-attachment"
  users      = [aws_iam_user.user.name]
  policy_arn = data.aws_iam_policy.sagemaker_policy.arn

output.tf

output "secret_key" 
  value = aws_iam_access_key.user.secret



output "access_key" 
  value = aws_iam_access_key.user.id

你会得到Access keysecret key变成纯文本就可以直接使用了。

【讨论】:

以上是关于Terraform - 具有编程访问权限的 AWS IAM 用户的主要内容,如果未能解决你的问题,请参考以下文章

将 aws 资源导入具有 for_each 的 terraform 模块

如何将 AWS cloudwatch 事件添加到基于具有 terraform 的容器映像的 aws_lambda_function?

将对象保存在具有公共访问权限的 AWS S3 存储桶中

terraform/aws lambda 函数访问在 s3 上被拒绝

具有公共/私有访问权限的 Appsync 身份验证,无需 AWS Cognito

编写 IAM 策略,其中任何具有 EC2 完全访问权限的用户都不能删除 AWS 账户中任何其他用户的实例