有人能帮我解决这个错误吗?
代码:
provider "aws" {
access_key = "xxxxxxxxxxxxxxxxxxxxxxxx"
secret_key = "xxxxxxxxxxxxxxxxxxxxxxxxxx"
region = "us-east-1"
}
resource "aws_security_group" "instance" {
name = "terraform-example-instance"
ingress {
from_port = 8080
to_port = 8080
protocol = "tcp"
cidr_blocks = ["0.0.0.0/0"]
}
}
resource "aws_instance" "example" {
ami = "ami-40d28157"
instance_type = "t2.micro"
vpc_security_group_ids = ["${aws_security_group.instance.id}"]
user_data = <<-EOF
#!/bin/bash
echo "Hello, World" > index.html
nohup busybox httpd -f -p 8080 &
EOF
tags = {
Name = "terraform-example"
}
}
这就是错误:
aws_instance.example:正在创建。。。
错误:启动源实例时出错:未授权操作:您无权执行此操作。编码的授权失败消息:状态代码:403,请求id:3319f97b-c1e7-4259-8ed2-4ca7b5c7ce07
在主.tf第19行,在资源"aws_instance"example"中:19:资源"aws_instance"example"{
我能够运行这段代码:
...
+ name = "terraform-example-instance"
+ owner_id = (known after apply)
+ revoke_rules_on_delete = false
+ vpc_id = (known after apply)
}
Plan: 2 to add, 0 to change, 0 to destroy.
Do you want to perform these actions?
Terraform will perform the actions described above.
Only 'yes' will be accepted to approve.
Enter a value: yes
aws_security_group.instance: Creating...
aws_security_group.instance: Creation complete after 5s [id=sg-0aa4ba2483dca70ed]
aws_instance.example: Creating...
aws_instance.example: Still creating... [10s elapsed]
aws_instance.example: Still creating... [20s elapsed]
aws_instance.example: Still creating... [30s elapsed]
aws_instance.example: Still creating... [40s elapsed]
aws_instance.example: Creation complete after 42s [id=i-07604b706323de813]
Apply complete! Resources: 2 added, 0 changed, 0 destroyed.
我有几个想法为什么你会看到这个错误:
- 这是一个新的AWS帐户,激活过程尚未完成
- 您的AWS密钥没有足够的权限来启动EC2实例
不幸的是,这个问题的根本原因是编码的,可能是由于各种原因产生的,例如,组织标记策略防止创建缺少标记或缺少IAM权限的实例。
如果您有足够的权限,您可以使用aws kms decode-authorization-message --encoded-message EncodedMessageText
对授权进行解码,这通常会揭示问题的确切原因。
您可以考虑的另一种有助于减少问题表面错误的策略(Terraform资源定义与IAM权限等(是使用AWS CLI创建相同的资源(使用相同的访问密钥/密钥(,例如
aws ec2 run-instances --image-id ami-40d28157 --instance -type t2.micro --security-group-ids security-grp-id --user-data file://user-data.txt
我发现AWS CLI偶尔会产生比Terraform输出更清晰的错误消息。如果它通过AWS CLI而不是Terraform工作,则建议对资源定义或提供凭据的方式进行一些轻微调整。如果它们都失败了,这通常意味着缺少权限。
我在创建EC2时遇到了同样的问题,但在创建VPC的情况下,它运行良好。转到您从iammadmin为地形创建的用户,然后检查策略。我发现AWSCompromisedKeyQuarantineV2";直接附加了策略。该政策的描述是:
政策ARNarn:aws:iam::aws:policy/AWSCompromisedKeyQuarantineV2描述在IAM用户的凭据被泄露或公开的情况下,拒绝访问AWS团队应用的某些操作。请勿删除此策略。相反,请按照为您创建的有关此事件的支持案例中指定的说明进行操作
如果您刚开始使用Terraform,请尝试在IAM策略中使用EC2FullAccess运行。https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_examples_ec2_region.html