오류 로드 상태 해결 방법: 액세스 거부: 액세스 거부 상태 코드: 테라폼 백엔드에 s3를 사용하려고 할 때 403?
간단한 테라폼 파일은 다음과 같습니다:
provider "aws" {
region = "region"
access_key = "key"
secret_key = "secret_key"
}
terraform {
backend "s3" {
# Replace this with your bucket name!
bucket = "great-name-terraform-state-2"
key = "global/s3/terraform.tfstate"
region = "eu-central-1"
# Replace this with your DynamoDB table name!
dynamodb_table = "great-name-locks-2"
encrypt = true
}
}
resource "aws_s3_bucket" "terraform_state" {
bucket = "great-name-terraform-state-2"
# Enable versioning so we can see the full revision history of our
# state files
versioning {
enabled = true
}
server_side_encryption_configuration {
rule {
apply_server_side_encryption_by_default {
sse_algorithm = "AES256"
}
}
}
}
resource "aws_dynamodb_table" "terraform_locks" {
name = "great-name-locks-2"
billing_mode = "PAY_PER_REQUEST"
hash_key = "LockID"
attribute {
name = "LockID"
type = "S"
}
}
내가 하려는 모든 것은 S3에 저장하기 위해 내 백엔드를 로컬에서 교체하는 것이다. 다음 작업을 수행합니다:
(terra from {} 블록이 코멘트일 때)
- 나는 내 AWS에서 버킷이 생성되었다는 것과 Dynmpo 테이블도 볼 수 있다.
지금 나는 블록에서 테라에 대한 코멘트를 풀고 있고 나는 다음과 같은 오류를 얻는다:
Error loading state:
AccessDenied: Access Denied
status code: 403, request id: xxx, host id: xxxx
내 IAM은 내가 관찰할 수 있는 대로 사용하고 있다. 나는 파일에 내 AWS 키와 비밀을 직접 쓰고 있다
내가 뭘 잘못하고 있는 거야?
어떤 도움이라도 감사합니다!
동일한 테라폼 프로젝트 내에서 원격 상태 저장소로 사용할 계획인 S3 버킷을 생성할 수 없습니다. 상태 버킷(+잠금 테이블)을 프로비저닝하거나 버킷을 수동으로 만드는 또 다른 테라폼 프로젝트를 만들어야 합니다.
보다 자세한 답변을 원하시면 읽어보시기 바랍니다
나는 여기저기 검색했지만 아무 도움도 되지 않았다. 이것이 당신의 문제를 해결하기를 바랍니다. 내 경우: 나는 로컬에서 AWS S3 버킷으로 상태를 마이그레이션하고 있었다.
- 지형 범위에 대한 코멘트 아웃
provider "aws" {
region = "region"
access_key = "key"
secret_key = "secret_key"
}
#terraform {
# backend "s3" {
# # Replace this with your bucket name!
# bucket = "great-name-terraform-state-2"
# key = "global/s3/terraform.tfstate"
# region = "eu-central-1"
# # Replace this with your DynamoDB table name!
# dynamodb_table = "great-name-locks-2"
# encrypt = true
# }
#}
resource "aws_s3_bucket" "terraform_state" {
bucket = "great-name-terraform-state-2"
# Enable versioning so we can see the full revision history of our
# state files
versioning {
enabled = true
}
server_side_encryption_configuration {
rule {
apply_server_side_encryption_by_default {
sse_algorithm = "AES256"
}
}
}
}
resource "aws_dynamodb_table" "terraform_locks" {
name = "great-name-locks-2"
billing_mode = "PAY_PER_REQUEST"
hash_key = "LockID"
attribute {
name = "LockID"
type = "S"
}
}
- 달려.
terraform init
terraform plan -out test.tfplan
terraform apply "test.tfplan"
리소스 생성(S3 버킷 및 DynamoDb)
- 그런 다음 지형 범위에 대한 설명을 해제하고 실행하십시오
AWS_PROFILE=REPLACE_IT_WITH_YOUR TF_LOG=DEBUG terraform init
오류가 발생하면 검색하십시오
-----------------------------------------------------
2020/08/14 15:54:38 [DEBUG] [aws-sdk-go] DEBUG: Response s3/ListObjects Details:
---[ RESPONSE ]--------------------------------------
HTTP/1.1 403 Forbidden
Connection: close
Transfer-Encoding: chunked
Content-Type: application/xml
Date: Fri, 14 Aug 2020 08:54:37 GMT
Server: AmazonS3
X-Amz-Bucket-Region: eu-central-1
X-Amz-Id-2: REMOVED
X-Amz-Request-Id: REMOVED
값을 복사합니다. 제 경우는 입니다.
- 테라폼 백엔드 구성을 해당 값으로 변경합니다.
terraform {
backend "s3" {
# Replace this with your bucket name!
bucket = "great-name-terraform-state-2"
key = "global/s3/terraform.tfstate"
region = "eu-central-1"
# Replace this with your DynamoDB table name!
dynamodb_table = "great-name-locks-2"
encrypt = true
}
}
나도 같은 문제에 직면했다. 그런 다음 로컬 시스템에서 상태 파일을 수동으로 제거합니다. terraform.tfstate 파일은 .terraform/directory에서 찾을 수 있으며 다시 실행할 수 있습니다. aws cli에 여러 프로파일이 구성된 경우. AWS 제공자 구성에서 프로필을 언급하지 않으면 테라폼이 기본 프로필을 사용하게 될 것이다.
나는 이것을 전에 접했다. 다음은 이러한 오류를 극복하는 데 도움이 되는 단계입니다
- .terraform 디렉토리 삭제
- access_key 및 secret_key를 백엔드 블록 아래에 배치합니다. 주어진 코드 아래와 같이
- 테라폼 실행
backend "s3" {
bucket = "great-name-terraform-state-2"
key = "global/s3/terraform.tfstate"
region = "eu-central-1"
access_key = "<access-key>"
secret_key = "<secret-key>"
}
}
그 오류는 사라져야 한다.
보다 나은 보안을 위해 사용 등을 할 수 있습니다;
provider "aws" {
region = "region"
shared_credentials_file = "$HOME/.aws/credentials # default
profile = "default" # you may change to desired profile
}
terraform {
backend "s3" {
profile = "default" # change to desired profile
# Replace this with your bucket name!
bucket = "great-name-terraform-state-2"
key = "global/s3/terraform.tfstate"
region = "eu-central-1"
# Replace this with your DynamoDB table name!
dynamodb_table = "great-name-locks-2"
encrypt = true
}
}
- 대해서
- 대해서
나는 달리기를 한 후에 같은 문제가 발생했다. 잘 작동했다. 여기 있는 제안 중 아무 것도 효과가 없었지만 내 셸을 zsh에서 bash로 바꾸는 것이 그것을 해결했다.
이것은 나에게 일어났고 문제는 내가 이미 존재하는 이름으로 버킷을 만들려고 했다는 것이다!
나는 테라폼 백엔드에 대해 동일한 S3 버킷을 공유하는 다른 프로젝트에서 실행함으로써 내 자격 증명이 괜찮다는 것을 알았다.
나에게 효과가 있었던 것:
rm -rf .terraform/
편집
필요한 패키지를 설치하려면 로컬 디렉토리를 삭제한 후 다시 실행해야 합니다.
내게 효과적인 것은 @Exequiel Barriero(사례 2)의 "오류 새로 고침 상태: S3의 상태 데이터에 예상된 내용이 없습니다"라는 주제에 대한 답이었다.
링크:
그러나 이 오류가 발생하고 백엔드와 관련이 없는 또 다른 이유는 레이어로 람다 함수를 생성하려고 했을 때 잘못된 ARN을 통과한 경우입니다. 내 경우에는 ARN의 추가 문자가 이 두통을 일으켰기 때문에 ARN을 주의 깊게 검토하십시오.
앞서 말했듯이, 우리는 백엔드 구성에 자격 증명을 포함해야 합니다. 이를 수행하는 또 다른 방법은 다음과 같습니다:
backend "s3" {
bucket = "great-name-terraform-state-2"
key = "global/s3/terraform.tfstate"
region = "eu-central-1"
profile = "AWS_PROFILE"
}
}
또한 AWS 프로파일을 시스템에서 구성해야 합니다:
aws configure
또는
nano .aws/credentials
여기서 주의할 점은 EC2 인스턴스 내부에서 테라폼을 적용해야 할 경우 인스턴스에 IAM 역할이 할당되어 권한 충돌이 발생할 수 있습니다.
나는 내 IAM 역할이 사용을 확인하기 위해 버킷에 대한 목록을 수행할 수 있는 올바른 전제 조건이 없다는 동일한 문제가 있었다:
aws s3 ls
접근할 수 있는지 확인해봐. 적절한 IAM 역할을 추가하지 않을 경우
대부분 우리는 s3 및 dynamodb 테이블 구성에 댓글을 달거나 버킷 및 dynamodb 테이블 값을 확인하는 것을 좋아합니다. 때로는 해당 값이 일치하지 않을 때도 있습니다.
또는 파일에 잘못된 내용이 있을 수 있습니다.
내가 파일에서 두 줄을 지웠을 때 그것은 효과가 있었다!
'개발하자' 카테고리의 다른 글
설정된 글로벌 변수가 변경될 때 플러터에서 아이콘의 색상을 동적으로 업데이트할 수 있는 방법이 있습니까? (0) | 2023.09.06 |
---|---|
펄럭임: Android Studio에서 패키지용 Android 모듈을 엽니다 (0) | 2023.09.06 |
파이썬에서 셀레늄으로 헤드리스 마이크로소프트 엣지를 실행하는 방법? (0) | 2023.09.04 |
파이썬에서 셀레늄으로 헤드리스 파이어폭스를 실행하는 방법? (0) | 2023.09.04 |
플러터에서 아이콘의 무게/대담함(FontWeight) 증가/구성 방법 (0) | 2023.09.03 |