예제 1: 버킷 소유자가 자기 사용자에게 버킷 권한 부여하기

예제 1: 버킷 소유자가 자기 사용자에게 버킷 권한 부여하기 (Example 1: Bucket owner granting its users bucket permissions)

Amazon S3에서 계정이 버킷을 소유하고 있고, 그 계정 안에 IAM 사용자 하나가 있다고 가정해 볼게요. 기본적으로 그 사용자에게는 아무 권한도 없어요. 사용자가 어떤 작업을 하려면 부모 계정이 권한을 부여해야만 해요. 이 예제에서는 버킷 소유자와 부모 계정이 같아서, 버킷 정책, 사용자 정책, 또는 둘 다를 사용해 사용자에게 버킷 권한을 줄 수 있어요. 계정 소유자는 일부 권한은 버킷 정책으로, 나머지 권한은 사용자 정책으로 부여할 거예요.

출처: 문서

본문

중요 — 개별 사용자에게 권한을 부여하는 것보다 IAM 역할에 권한을 부여하는 것이 더 좋은 방법이라는 점을 먼저 기억해 두세요. IAM 역할에 권한을 부여하는 방법은 계정 간 권한 이해와 IAM 역할 사용에서 확인할 수 있어요.

이 연습은 다음 단계로 요약할 수 있어요.

  • 계정 관리자가 버킷 정책을 만들어 사용자에게 일련의 권한을 부여해요.
  • 계정 관리자가 사용자에게 사용자 정책을 연결해 추가 권한을 부여해요.
  • 사용자가 버킷 정책과 사용자 정책을 통해 부여받은 권한을 각각 시도해 봐요.

이 예제를 진행하려면 AWS 계정이 하나 필요해요. 계정의 루트 사용자 자격 증명 대신 관리자 사용자를 만들어 사용할 거예요(리소스 생성과 권한 부여를 위한 관리자 사용자에 대해 참고). AWS 계정과 관리자 사용자를 다음 표처럼 부를게요.

계정 ID 계정 표기 계정의 관리자 사용자
1111-1111-1111 Account A AccountAadmin

참고 — 이 예제의 관리자 사용자는 Account A를 가리키는 AccountAadmin이에요. AccountAdmin이 아니라는 점 주의하세요.

사용자 생성과 권한 부여의 모든 작업은 AWS Management Console에서 해요. 권한 확인에는 명령줄 도구인 AWS Command Line Interface(AWS CLI)와 AWS Tools for Windows PowerShell을 사용하니까, 코드를 작성할 필요는 없어요.

연습 준비하기

AWS 계정이 있고, 그 계정에 관리자 권한을 가진 사용자가 있는지 확인하세요.

  1. 필요하면 AWS 계정에 가입해요. 이 계정을 Account A라고 부를게요. https://aws.amazon.com/s3로 이동해서 AWS 계정 만들기(Create an AWS account) 를 선택하고 화면 안내를 따르세요. 계정이 활성화되면 AWS가 이메일로 알려줘요.
  2. Account A에서 관리자 사용자 AccountAadmin을 만들어요. Account A 자격 증명으로 IAM 콘솔에 로그인해서 다음을 수행하세요.
    • 사용자 AccountAadmin을 만들고 사용자 보안 자격 증명을 기록해 두세요. 자세한 방법은 IAM User Guide의 AWS 계정에 IAM 사용자 만들기를 참고하세요.
    • 전체 액세스를 주는 사용자 정책을 연결해서 AccountAadmin에게 관리자 권한을 부여해요. 자세한 방법은 IAM User Guide의 IAM 정책 관리를 참고하세요.
    • AccountAadmin의 IAM 사용자 로그인 URL(Sign-In URL) 을 기록해 두세요. AWS Management Console에 로그인할 때 이 URL이 필요해요. 로그인 URL을 찾는 방법은 IAM User Guide의 IAM 사용자로 AWS Management Console에 로그인을 참고하세요.
  3. AWS CLI 또는 AWS Tools for Windows PowerShell을 설정해요. 관리자 사용자 자격 증명을 다음과 같이 저장하세요.
    • AWS CLI를 사용한다면 config 파일에 AccountAadmin 프로필을 만들어요.
    • AWS Tools for Windows PowerShell을 사용한다면 세션에 AccountAadmin으로 자격 증명을 저장해요.
    • 자세한 방법은 연습을 위한 도구 설정을 참고하세요.

1단계: Account A에 리소스를 만들고 권한 부여하기

Account A의 AccountAadmin 사용자 자격 증명과 특별한 IAM 사용자 로그인 URL을 사용해 AWS Management Console에 로그인해서 다음을 수행하세요.

버킷과 IAM 사용자 리소스 만들기

  1. Amazon S3 콘솔에서 버킷을 만들어요. 버킷을 만든 AWS 리전을 기록해 두세요. 자세한 방법은 일반용 버킷 만들기를 참고하세요.
  2. IAM 콘솔에서 다음을 수행하세요.
    • Dave라는 사용자를 만들어요. 단계별 안내는 IAM User Guide의 IAM 사용자 만들기(콘솔)를 참고하세요.
    • Dave 사용자 자격 증명을 기록해 두세요.
    • 사용자 Dave의 Amazon Resource Name(ARN)을 기록해 두세요. IAM 콘솔에서 사용자를 선택하면 요약(Summary) 탭에 사용자 ARN이 있어요.

권한 부여하기

버킷 소유자와 사용자가 속한 부모 계정이 같으므로, AWS 계정은 버킷 정책, 사용자 정책, 또는 둘 다로 사용자 권한을 부여할 수 있어요. 이 예제에서는 둘 다 사용해요. 객체도 같은 계정이 소유한다면 버킷 소유자는 버킷 정책(또는 IAM 정책)에서 객체 권한을 부여할 수 있어요.

  1. Amazon S3 콘솔에서 awsexamplebucket1에 다음 버킷 정책을 연결하세요. 이 정책에는 두 개의 문(statement)이 있어요.
    • 첫 번째 문은 Dave에게 버킷 작업 권한 s3:GetBucketLocation과 s3:ListBucket을 부여해요.
    • 두 번째 문은 s3:GetObject 권한을 부여해요. Account A도 객체를 소유하므로, 계정 관리자가 s3:GetObject 권한을 부여할 수 있어요.
    • Principal 문에서 Dave는 자신의 사용자 ARN으로 식별돼요. 정책 요소에 대한 자세한 내용은 Amazon S3의 정책과 권한을 참고하세요.
{
    "Version":"2012-10-17",
    "Statement": [
        {
            "Sid": "statement1",
            "Effect": "Allow",
            "Principal": {
                "AWS": "arn:aws:iam::111122223333:user/Dave"
            },
            "Action": [
                "s3:GetBucketLocation",
                "s3:ListBucket"
            ],
            "Resource": [
                "arn:aws:s3:::awsexamplebucket1"
            ]
        },
        {
            "Sid": "statement2",
            "Effect": "Allow",
            "Principal": {
                "AWS": "arn:aws:iam::111122223333:user/Dave"
            },
            "Action": [
                "s3:GetObject"
            ],
            "Resource": [
                "arn:aws:s3:::awsexamplebucket1/*"
            ]
        }
    ]
}
  1. 사용자 Dave를 위해 다음 정책으로 인라인 정책을 만들어요. 이 정책은 Dave에게 s3:PutObject 권한을 부여해요. 버킷 이름을 제공하도록 정책을 업데이트해야 해요. 자세한 방법은 IAM User Guide의 IAM 정책 관리를 참고하세요.
{
   "Version":"2012-10-17",
   "Statement": [
      {
         "Sid": "PermissionForObjectOperations",
         "Effect": "Allow",
         "Action": [
            "s3:PutObject"
         ],
         "Resource": [
            "arn:aws:s3:::awsexamplebucket1/*"
         ]
      }
   ]
}

참고 — 콘솔에 로그인할 때는 Account A 자격 증명을 사용해야 해요.

2단계: 권한 테스트하기

Dave의 자격 증명을 사용해 권한이 제대로 동작하는지 확인해 봐요. 다음 두 절차 중 하나를 사용하면 돼요.

AWS CLI로 권한 테스트하기

  1. AWS CLI config 파일에 다음 UserDaveAccountA 프로필을 추가해요. 자세한 내용은 연습을 위한 도구 설정을 참고하세요.
[profile UserDaveAccountA]
aws_access_key_id = access-key
aws_secret_access_key = secret-access-key
region = us-east-1
  1. Dave가 사용자 정책으로 부여받은 작업을 수행할 수 있는지 확인해 봐요. 다음 AWS CLI put-object 명령으로 샘플 객체를 업로드하세요. 명령의 --body 파라미터는 업로드할 소스 파일을 가리켜요. 예를 들어 Windows 머신의 C 드라이브 루트에 파일이 있다면 c:\HappyFace.jpg라고 지정하면 돼요. --key 파라미터는 객체의 키 이름을 제공해요.
aws s3api put-object --bucket awsexamplebucket1 --key HappyFace.jpg --body HappyFace.jpg --profile UserDaveAccountA
  1. 다음 AWS CLI 명령을 실행해 객체를 가져와요.
aws s3api get-object --bucket awsexamplebucket1 --key HappyFace.jpg OutputFile.jpg --profile UserDaveAccountA

AWS Tools for Windows PowerShell로 권한 테스트하기

  1. Dave의 자격 증명을 AccountADave로 저장해요. 그런 다음 이 자격 증명을 사용해 객체를 PUT하고 GET해요.
set-awscredentials -AccessKey AccessKeyID -SecretKey SecretAccessKey -storeas AccountADave
  1. Dave의 저장된 자격 증명을 사용해 Write-S3Object 명령으로 샘플 객체를 업로드해요.
Write-S3Object -bucketname awsexamplebucket1 -key HappyFace.jpg -file HappyFace.jpg -StoredCredentials AccountADave
  1. 방금 업로드한 객체를 다운로드해요.
Read-S3Object -bucketname awsexamplebucket1 -key HappyFace.jpg -file Output.jpg -StoredCredentials AccountADave

더 알아보기 (Learn more)