나는 여기서 내가 잃어버린 것을 알아 내려고 시도하는 AWS에서 정말로 불타고 있습니다. IAM 사용자가 파일을 완전히 공개하지 않고도 S3 버킷에서 파일을 다운로드 할 수 있도록 만들고 싶지만 액세스가 거부되었습니다. 누군가가 벗어난 것을 발견 할 수 있다면 나는 스토킹됩니다.
내가 지금까지 한 일 :
- 예를 들어 my-user라는 사용자를 작성했습니다.
- 사용자를 위해 생성 된 액세스 키를 EC2 인스턴스의 ~ / .aws에 넣습니다.
- 내 사용자에게 액세스 권한을 부여 할 버킷 정책을 만들었습니다.
- 명령을 실행
aws s3 cp --profile my-user s3://my-bucket/thing.zip .
버킷 정책 :
{
"Id": "Policy1384791162970",
"Statement": [
{
"Sid": "Stmt1384791151633",
"Action": [
"s3:GetObject"
],
"Effect": "Allow",
"Resource": "arn:aws:s3:::my-bucket/*",
"Principal": {
"AWS": "arn:aws:iam::111122223333:user/my-user"
}
}
]
}
결과는 A client error (AccessDenied) occurred: Access Denied
동일한 명령과 기본 (루트 계정?) 액세스 키를 사용하여 다운로드 할 수 있습니다.
사용자 정책을 추가하려고했습니다. 왜 필요한지 모르겠지만 아프지 않을 것이라고 생각했기 때문에 이것을 내 사용자에게 첨부했습니다.
{
"Statement": [
{
"Sid": "Stmt1384889624746",
"Action": "s3:*",
"Effect": "Allow",
"Resource": "arn:aws:s3:::my-bucket/*"
}
]
}
같은 결과입니다.
답변
나는 이것으로도 어려움을 겪고 있었지만 https://stackoverflow.com/a/17162973/1750869 에서이 문제를 해결하는 데 도움이 되는 답변을 찾았 습니다. 아래 답변을 다시 게시하십시오.
모든 사람에게 권한을 열 필요는 없습니다. IAM 사용자를 사용하여 한 계정의 버킷에서 다른 계정으로 버킷을 복사하려면 소스 및 대상에서 아래 버킷 정책을 사용하십시오.
복사 할 버킷 – SourceBucket
복사 할 버킷 – DestinationBucket
소스 AWS 계정 ID-XXXX–XXXX-XXXX
소스 IAM 사용자-src–iam-user
아래 정책은 – IAM 사용자-XXXX–XXXX-XXXX : src–iam-user는 SourceBucket / * 및 s3 : ListBucket 및 s3 : PutObject 권한에 DestinationBucket / *에 대한 s3 : ListBucket 및 s3 : GetObject 권한이 있음을 의미합니다.
SourceBucket에서 정책은 다음과 같아야합니다.
{
"Id": "Policy1357935677554",
"Statement": [
{
"Sid": "Stmt1357935647218",
"Action": [
"s3:ListBucket"
],
"Effect": "Allow",
"Resource": "arn:aws:s3:::SourceBucket",
"Principal": {"AWS": "arn:aws:iam::XXXXXXXXXXXX:user/src–iam-user"}
},
{
"Sid": "Stmt1357935676138",
"Action": ["s3:GetObject"],
"Effect": "Allow",
"Resource": "arn:aws:s3::: SourceBucket/*",
"Principal": {"AWS": "arn:aws:iam::XXXXXXXXXXXX:user/src–iam-user"}
}
]
}
DestinationBucket에서 정책은 다음과 같아야합니다.
{
"Id": "Policy1357935677554",
"Statement": [
{
"Sid": "Stmt1357935647218",
"Action": [
"s3:ListBucket"
],
"Effect": "Allow",
"Resource": "arn:aws:s3::: DestinationBucket",
"Principal": {"AWS": "arn:aws:iam::XXXXXXXXXXXX:user/src–iam-user"}
},
{
"Sid": "Stmt1357935676138",
"Action": ["s3:PutObject"],
"Effect": "Allow",
"Resource": "arn:aws:s3::: DestinationBucket/*",
"Principal": {"AWS": "arn:aws:iam::XXXXXXXXXXXX:user/src–iam-user"}
}
]
}
실행할 명령은 s3cmd cp s3://SourceBucket/File1 s3://DestinationBucket/File1
답변
같은 문제에 직면했을 때 AWS가 서버 측 암호화를 활성화해야한다는 것이 밝혀졌습니다. 따라서 다음 명령이 성공적으로 작동했습니다.
aws s3 cp test.txt s3://my-s3-bucket --sse AES256
답변
James가 언급 한 ‘인증 된 모든 AWS 사용자’옵션은 권장하지 않습니다.
이렇게하면 IAM 사용자뿐만 아니라 모든 AWS 계정이 해당 버킷에 대한 ACLS를 나열 / 삭제 / 수정할 수있는 버킷 수준 ACL이 추가됩니다.
즉, aws 계정을 가진 사람을위한 공개 읽기 / 쓰기입니다.
답변
S3 콘솔 (web ui)에서 버킷을 선택하고 권한 탭에서 “Any Authenticated AWS User”를 선택하고 모든 상자를 발권했습니다.
업데이트 : 의견에서 지적했듯이 “인증 된 모든 AWS 사용자”는 계정의 사용자뿐만 아니라 모든 AWS 인증 사용자이므로 신중하게 사용하십시오.
답변
IAM 정책이 올바르게 설정되어 있어도 An error occurred (AccessDenied) when calling the <OPERATION-NAME> operation: Access Denied
자격 증명의 MFA (Multi-Factor Authentication) 요구 사항으로 인한 오류가 계속 발생할 수 있습니다 . AWS 콘솔에 이미 로그인 한 경우 자격 증명이 제대로 작동하고 aws cli의 권한 거부 오류 메시지가 특히 도움이되지 않기 때문에 이러한 기능을 사용할 수 있습니다.
aws cli로 MFA를 설정하는 방법에 대한 지침이 이미 있습니다.
기본적으로 MFA 장치의 주소를 가져와 장치에서 코드와 함께 보내 임시 토큰을 가져와야합니다.
답변
방금 webUI로 이동하여 버킷을 클릭 한 다음 권한으로 이동 한 다음 정책으로 이동했습니다. 열었을 때 삭제를 클릭했습니다. 나는 그것이 구성이라고 생각하기 때문에 이것을했다.
메인 s3 페이지로 돌아가서 버킷을 클릭하고 삭제하려고 시도했지만 작동했습니다.
내가 aws-cli로 그것을했을 때조차도
$ aws s3 rb s3://bucket-name --force
어쨌든, 그것은 나를 위해 일한 것입니다. 권한 정책으로 인해 버킷을 삭제하지 못했습니다.
답변
일단 실행하려고하면이 오류가 발생합니다.
aws s3 cp s3://[bucketName]/[fileName] .
권한이없는 폴더에 어리석은 일이지만 이동하기 전에 폴더의 소유자인지 확인하십시오!