예제 1: 버킷 소유자가 자신의 사용자에게 버킷 권한 부여
중요
IAM 역할에 권한을 부여하는 것이 개별 사용자에게 권한을 부여하는 것보다 더 좋습니다. 이 작업을 수행하는 방법은 배경: 교차 계정 권한과 IAM 역할 사용 단원을 참조하십시오.
이 연습에서는 AWS 계정이 버킷을 소유하며, 해당 계정의 IAM 사용자가 있습니다. 기본적으로 사용자에게 권한이 없습니다. 사용자가 태스크를 수행하려면 상위 계정이 이러한 사용자에게 권한을 부여해야 합니다. 버킷 소유자와 상위 계정은 동일합니다. 따라서 AWS 계정이 버킷 정책, 사용자 정책 또는 둘 다를 사용하여 사용자에게 버킷에 대한 권한을 부여할 수 있습니다. 계정 소유자는 버킷 정책을 사용하여 권한 중 일부를 부여하고 사용자 정책을 사용하여 나머지 권한을 부여합니다.
다음은 안내 단계의 요약입니다.
-
계정 관리자가 사용자에게 권한 세트를 부여하는 버킷 정책을 만듭니다.
-
계정 관리자가 추가 권한을 부여하는 사용자 정책을 사용자에게 연결합니다.
-
그런 다음 사용자가 버킷 정책과 사용자 정책 모두를 통해 부여 받은 권한을 시험해 봅니다.
이 예제에서는 AWS 계정이 필요합니다. 계정의 루트 사용자 자격 증명을 사용하는 대신 관리자 사용자를 만듭니다(관리자 사용자를 사용하여 리소스를 만들고 권한을 부여하는 것에 대한 소개 참조). AWS 계정 및 관리자 사용자는 다음을 지칭합니다.
계정 ID | 계정 이름 | 계정의 관리자 사용자 |
---|---|---|
|
계정 A |
AccountAadmin |
참고
이 예제의 관리자 사용자는 AccountAdmin이 아니라 계정 A라는 AccountAadmin입니다.
사용자를 만들고 권한을 부여하는 모든 작업은 AWS Management Console에서 수행됩니다. 권한을 확인하기 위해 본 시연에서는 명령줄 도구, AWS Command Line Interface(CLI) 및 AWS Tools for Windows PowerShell을 사용합니다. 따라서 사용자가 코드를 작성할 필요가 없습니다.
0단계: 시연 준비
-
AWS 계정이 있으며 이 계정에 관리자 권한이 있는 사용자가 있는지 확인합니다.
-
필요한 경우 계정에 가입합니다. 이 계정을 계정 A라고 합니다.
https://aws.amazon.com/s3
로 이동하여 가입(Sign Up)을 클릭합니다. -
화면에 표시되는 지시 사항을 따릅니다.
계정이 활성화되고 사용 가능한 상태가 되면 AWS에서 사용자에게 이메일로 알립니다.
-
계정 A에서 관리자 사용자인 AccountAadmin을 만듭니다. 계정 A의 자격 증명을 사용하여 IAM 콘솔
에 로그인하고 다음을 수행합니다. -
사용자 AccountAadmin을 만들고 사용자 보안 자격 증명을 적어 둡니다.
지침은 IAM 사용 설명서의 AWS 계정에서 IAM 사용자 생성을 참조하세요.
-
모든 권한을 제공하는 사용자 정책을 연결하여 AccountAadmin 관리자에게 권한을 부여합니다.
지침은 IAM 사용 설명서의 정책 작업 섹션을 참조하세요.
-
AccountAadmin의 IAM User Sign-In URL(IAM 사용자 로그인 URL)을 적어 둡니다. AWS Management Console에 로그인할 때 이 URL을 사용해야 합니다. 이 URL을 찾을 수 있는 위치에 대한 자세한 내용은 IAM 사용 설명서의 사용자의 계정 로그인 방법 단원을 참조하십시오. 각 계정의 URL을 적어 둡니다.
-
-
-
AWS Command Line Interface(CLI) 또는 AWS Tools for Windows PowerShell을 설정합니다. 관리자 사용자 자격 증명은 다음과 같이 저장합니다.
-
AWS CLI를 사용하는 경우 구성 파일에서 AccountAadmin 프로파일을 만듭니다.
AWS Tools for Windows PowerShell을 사용하는 경우 세션의 자격 증명을 AccountAadmin으로 저장해야 합니다.
지침은 예제 안내를 위한 도구 설정을(을) 참조하십시오.
-
1단계: 계정 A에서 리소스(버킷 및 IAM 사용자)를 생성하고 권한 부여
계정 A의 사용자 AccountAadmin에 대한 자격 증명과 특정 IAM 사용자 로그인 URL을 사용하여 AWS Management Console에 로그인하고 다음을 수행합니다.
리소스(버킷 및 IAM 사용자) 만들기
-
Amazon S3 콘솔에서 버킷을 생성합니다. 버킷을 만든 AWS 리전을 적어 둡니다. 지침은 버킷 생성을(을) 참조하십시오.
-
IAM 콘솔
에서 다음을 수행합니다. 사용자 Dave를 만듭니다.
단계별 지침은 IAM 사용 설명서의 IAM 사용자 생성(AWS Management Console)을 참조하세요.
-
UserDave 자격 증명을 적어 둡니다.
-
사용자 Dave의 Amazon 리소스 이름(ARN)을 적어 둡니다. IAM 콘솔
에서 해당 사용자를 선택하면 요약 탭에 사용자 ARN이 제공됩니다.
-
권한 부여
버킷 소유자와 사용자가 속한 상위 계정이 같기 때문에 AWS 계정이 버킷 정책, 사용자 정책 또는 둘 다를 사용하여 사용자에게 권한을 부여할 수 있습니다. 이 예제에서는 둘 다를 사용합니다. 같은 계정이 객체를 소유하는 경우 버킷 소유자가 버킷 정책 또는 IAM 정책에서 객체 권한을 부여할 수 있습니다.
Amazon S3 콘솔에서
awsexamplebucket1
에 다음 버킷 정책을 연결합니다.이 정책에는 두 설명문이 있습니다.
-
첫 번째 설명문은 Dave에게 버킷 작업 권한인
s3:GetBucketLocation
및s3:ListBucket
을 부여합니다. -
두 번째 설명문은
s3:GetObject
권한을 부여합니다. 계정 A가 객체도 소유하기 때문에 계정 관리자가s3:GetObject
권한을 부여할 수 있습니다.
Principal
설명문에서 Dave는 해당 사용자 ARN으로 식별됩니다. 정책 요소에 대한 자세한 내용은 버킷 정책 및 사용자 정책 단원을 참조하십시오.{ "Version": "2012-10-17", "Statement": [ { "Sid": "statement1", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::
AccountA-ID
:user/Dave" }, "Action": [ "s3:GetBucketLocation", "s3:ListBucket" ], "Resource": [ "arn:aws:s3:::awsexamplebucket1
" ] }, { "Sid": "statement2", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::AccountA-ID
:user/Dave" }, "Action": [ "s3:GetObject" ], "Resource": [ "arn:aws:s3:::awsexamplebucket1
/*" ] } ] }-
-
다음 정책을 사용하여 사용자 Dave에 대한 인라인 정책을 만듭니다. 이 정책은 Dave에게
s3:PutObject
권한을 부여합니다. 버킷 이름을 제공하여 정책을 업데이트해야 합니다.{ "Version": "2012-10-17", "Statement": [ { "Sid": "PermissionForObjectOperations", "Effect": "Allow", "Action": [ "s3:PutObject" ], "Resource": [ "arn:aws:s3:::
awsexamplebucket1
/*" ] } ] }지침은 IAM 사용 설명서의 인라인 정책 작업 섹션을 참조하세요. 계정 A의 자격 증명을 사용하여 콘솔에 로그인해야 합니다.
3단계: 권한 테스트
Dave의 자격 증명을 사용하여 권한이 작동하는지 확인하십시오. 다음 두 가지 절차 중 하나를 사용할 수 있습니다.
AWS CLI를 사용하여 테스트
-
다음 UserDaveAccountA 프로파일을 추가하여 AWS CLI 구성 파일을 업데이트합니다. 자세한 내용은 예제 안내를 위한 도구 설정 단원을 참조하십시오.
[profile UserDaveAccountA] aws_access_key_id =
access-key
aws_secret_access_key =secret-access-key
region =us-east-1
-
Dave가 사용자 정책에서 권한을 부여 받은 작업을 수행할 수 있는지 확인합니다. 다음 AWS CLI
put-object
명령을 사용하여 샘플 객체를 업로드합니다.명령의
--body
파라미터를 통해 업로드할 원본 파일이 식별됩니다. 예를 들어, 파일이 Windows 시스템의 C: 드라이브 루트에 있는 경우c:\HappyFace.jpg
를 지정합니다.--key
파라미터는 객체의 키 이름을 제공합니다.aws s3api put-object --bucket
awsexamplebucket1
--keyHappyFace.jpg
--bodyHappyFace.jpg
--profile UserDaveAccountA다음 AWS CLI 명령을 실행하여 객체를 가져옵니다.
aws s3api get-object --bucket awsexamplebucket1 --key
HappyFace.jpg
OutputFile.jpg
--profile UserDaveAccountA
AWS Tools for Windows PowerShell를 사용하여 테스트
Dave의 자격 증명을 AccountADave로 저장합니다. 그런 다음 이러한 자격 증명을 사용하여 객체에 대해 PUT 및 GET을 실행합니다.
set-awscredentials -AccessKey
AccessKeyID
-SecretKeySecretAccessKey
-storeas AccountADave-
사용자 Dave의 저장된 자격 증명을 사용하여 AWS Tools for Windows PowerShell
Write-S3Object
명령을 통해 샘플 객체를 업로드합니다.Write-S3Object -bucketname
awsexamplebucket1
-keyHappyFace.jpg
-fileHappyFace.jpg
-StoredCredentials AccountADave이전에 업로드한 객체를 다운로드합니다.
Read-S3Object -bucketname
awsexamplebucket1
-keyHappyFace.jpg
-fileOutput.jpg
-StoredCredentials AccountADave