使用AWS MediaConvert时,说明中提供了一个sample IAM policy,其中没有假定角色部分。同样,在AWS IAM控制台中创建默认MediaConvert角色时,所得的IAM角色也没有信任策略。
在Terraform中,如何create an IAM role带有空的assume_role_policy
参数?
我尝试了以下解决方案并导致各种错误:
assume_role_policy = ""
assume_role_policy = "{}"
data aws_iam_policy_document
并为文档的json结果设置hypok_policy。如果不能使用空的承担角色策略,那么如何使用适合MediaConvert的terraform创建IAM角色?
预先感谢您的考虑和答复。
答案 0 :(得分:6)
您似乎对需要在何处定义承担角色策略感到困惑。策略本身并没有使用它,而是角色使用它来确定允许哪些服务或帐户使用该角色。
角色需要assume_role_policy
才能使mediaconvert
服务能够担任该角色。之后,角色可以使用由角色所附加的策略提供的任何许可(作为托管策略或内联)。
您假设的角色策略应如下所示:
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "",
"Effect": "Allow",
"Principal": {
"Service": "mediaconvert.amazonaws.com"
},
"Action": "sts:AssumeRole"
}
]
}
您用来创建角色和策略的Terraform代码如下所示:
data "aws_iam_policy_document" "mediaconvert_assume_role_policy" {
statement {
actions = ["sts:AssumeRole"]
principals {
type = "Service"
identifiers = ["mediaconvert.amazonaws.com"]
}
}
}
resource "aws_iam_role" "mediaconvert" {
name = "example"
path = "/system/"
assume_role_policy = data.aws_iam_policy_document.mediaconvert_assume_role_policy.json
}
resource "aws_iam_role_policy_attachment" "mediaconvert_s3" {
role = aws_iam_role.mediaconvert.name
policy_arn = "arn:aws:iam::aws:policy/AmazonS3FullAccess"
}
resource "aws_iam_role_policy_attachment" "mediaconvert_api_gateway" {
role = aws_iam_role.mediaconvert.name
policy_arn = "arn:aws:iam::aws:policy/AmazonAPIGatewayInvokeFullAccess"
}
这将创建可由MediaConvert服务承担的角色,然后使MediaConvert服务能够使用S3或API网关执行任何操作。您可能要选择为角色赋予更多细粒度的权限,或者您可能对MediaConvert不会做任何您不想做的事情感到高兴。