IAM 리소스 액세스에 필요한 권한
IAM 리소스 액세스에 필요한 권한
리소스(Resource)는 서비스 안의 객체예요. IAM 리소스에는 그룹, 사용자, 역할, 정책이 포함돼요. AWS 계정 루트 사용자 자격 증명으로 로그인했다면 IAM 자격 증명이나 IAM 리소스를 관리하는 데 제한이 없어요. 하지만 IAM 사용자는 자격 증명이나 IAM 리소스를 관리할 권한을 명시적으로 부여받아야 해요. 사용자에 아이덴티티 기반 정책을 연결해 이렇게 할 수 있어요.
출처: 문서
본문
참고
AWS 문서 전반에서 특정 범주를 언급하지 않고 IAM 정책을 지칭할 때는 아이덴티티 기반의 고객 관리형 정책을 의미해요. 정책 범주에 대한 자세한 내용은 IAM의 정책과 권한을 참고하세요.
IAM 아이덴티티 관리 권한
IAM 그룹, 사용자, 역할, 자격 증명을 관리하는 데 필요한 권한은 대개 해당 작업의 API 작업(action)에 대응돼요. 예를 들어 IAM 사용자를 만들려면 해당 API 명령 CreateUser에 대응하는 iam:CreateUser 권한이 있어야 해요. IAM 사용자가 다른 IAM 사용자를 만들도록 허용하려면 다음과 같은 IAM 정책을 그 사용자에게 연결할 수 있어요.
{
"Version":"2012-10-17",
"Statement": {
"Effect": "Allow",
"Action": "iam:CreateUser",
"Resource": "*"
}
}
정책에서 Resource 요소의 값은 작업과 그 작업이 영향을 줄 수 있는 리소스에 따라 달라져요. 위 예시에서 정책은 사용자가 어떤 사용자든 만들 수 있게 해요(*는 모든 문자열과 일치하는 와일드카드예요). 반대로 사용자가 자신의 액세스 키만 변경하도록 허용하는 정책(API 작업 CreateAccessKey와 UpdateAccessKey)은 일반적으로 Resource 요소가 있어요. 이 경우 ARN은 현재 사용자의 이름으로 해석되는 변수(${aws:username})를 포함해요. 예시는 다음과 같아요.
{
"Version":"2012-10-17",
"Statement": [
{
"Sid": "ListUsersForConsole",
"Effect": "Allow",
"Action": "iam:ListUsers",
"Resource": "arn:aws:iam::*:*"
},
{
"Sid": "ViewAndUpdateAccessKeys",
"Effect": "Allow",
"Action": [
"iam:UpdateAccessKey",
"iam:CreateAccessKey",
"iam:ListAccessKeys"
],
"Resource": "arn:aws:iam::*:user/${aws:username}"
}
]
}
위 예시에서 ${aws:username}은 현재 사용자의 사용자 이름으로 해석되는 변수예요. 정책 변수에 대한 자세한 내용은 IAM 정책 요소: 변수 및 태그를 참고하세요.
작업 이름에 와일드카드 문자(*)를 사용하면 특정 작업과 관련된 모든 작업에 권한을 부여하기 쉬워져요. 예를 들어 사용자가 어떤 IAM 작업이든 수행하도록 허용하려면 작업에 iam:*를 사용할 수 있어요. 액세스 키와 관련된 모든 작업만 수행하도록 허용하려면 정책 구문의 Action 요소에 iam:*AccessKey*를 사용할 수 있어요. 이렇게 하면 CreateAccessKey, DeleteAccessKey, GetAccessKeyLastUsed, ListAccessKeys, UpdateAccessKey 작업을 수행할 권한이 부여돼요. (향후 이름에 "AccessKey"가 포함된 작업이 IAM에 추가되면 Action 요소에 iam:*AccessKey*를 사용해 그 새 작업에도 권한을 줄 수 있어요.) 다음 예시는 사용자가 자신의 액세스 키에 관한 모든 작업을 수행하도록 허용하는 정책이에요(account-id를 AWS 계정 ID로 바꾸세요).
{
"Version":"2012-10-17",
"Statement": {
"Effect": "Allow",
"Action": "iam:*AccessKey*",
"Resource": "arn:aws:iam::111122223333:user/${aws:username}"
}
}
그룹 삭제 같은 일부 작업은 여러 작업을 수반해요: 먼저 그룹에서 사용자를 제거하고, 그룹의 정책을 분리·삭제한 뒤, 실제로 그룹을 삭제해야 해요. 사용자가 그룹을 삭제할 수 있게 하려면 관련 작업 전체에 대한 권한을 꼭 부여해야 해요.
AWS Management Console에서 작업하기 위한 권한
앞선 예시들은 사용자가 AWS CLI나 AWS SDK로 작업을 수행하도록 허용하는 정책이에요. 사용자가 콘솔에서 작업하면서 콘솔은 그룹, 사용자, 역할, 정책을 나열하고 그룹·사용자·역할과 연결된 정책을 가져오도록 IAM에 요청을 보내요. 콘솔은 AWS 계정 정보와 principal에 대한 정보를 가져오는 요청도 보내요. 여기서 principal은 콘솔에서 요청을 하는 사용자예요.
일반적으로 작업을 수행하려면 정책에 해당 작업만 포함되어 있으면 돼요. 사용자를 만들려면 CreateUser 작업을 호출할 권한이 필요해요. 콘솔로 작업을 수행할 때는 콘솔에서 리소스를 표시, 나열, 가져오거나 보기 위한 권한이 필요한 경우가 많아요. 지정한 작업을 하기 위해 콘솔을 탐색할 수 있도록 필요해요. 예를 들어 사용자 Jorge가 콘솔에서 자신의 액세스 키를 바꾸려면 IAM 콘솔로 가서 Users 를 선택해요. 이 작업은 콘솔이 ListUsers 요청을 보내게 해요. Jorge에게 iam:ListUsers 작업 권한이 없으면 콘솔이 사용자를 나열하려 할 때 액세스가 거부돼요. 그 결과 Jorge는 CreateAccessKey와 UpdateAccessKey 작업 권한이 있어도 자신의 이름과 액세스 키에 도달할 수 없어요.
AWS Management Console로 그룹, 사용자, 역할, 정책, 자격 증명을 관리할 권한을 사용자에게 부여하려면 콘솔이 수행하는 작업에 대한 권한을 포함해야 해요. 이러한 권한을 부여하는 데 사용할 정책 예시는 IAM 리소스 관리용 예제 정책을 참고하세요.
AWS 계정 간 권한 부여
자신의 계정에 있는 IAM 사용자에게 리소스에 대한 액세스를 직접 부여할 수 있어요. 다른 계정의 사용자가 내 리소스에 액세스해야 한다면 권한을 포함하지만 특정 사용자와 연결되지 않는 엔티티인 IAM 역할 을 만들 수 있어요. 다른 계정의 사용자는 그 역할을 사용해 역할에 할당된 권한에 따라 리소스에 액세스할 수 있어요. 자세한 내용은 내가 소유한 다른 AWS 계정의 IAM 사용자에 대한 액세스를 참고하세요.
참고
일부 서비스는 아이덴티티 기반 정책과 리소스 기반 정책에서 설명하는 것처럼 리소스 기반 정책을 지원해요(예: Amazon S3, Amazon SNS, Amazon SQS). 그런 서비스에서는 역할을 사용하는 대신 공유하려는 리소스(버킷, 주제, 대기열)에 정책을 연결할 수 있어요. 리소스 기반 정책은 리소스에 액세스할 권한이 있는 AWS 계정을 지정할 수 있어요.
한 서비스가 다른 서비스에 액세스하기 위한 권한
많은 AWS 서비스가 다른 AWS 서비스에 액세스해요. 예를 들어 Amazon EMR, Elastic Load Balancing, Amazon EC2 Auto Scaling을 포함한 여러 AWS 서비스가 Amazon EC2 인스턴스를 관리해요. 다른 AWS 서비스들은 Amazon S3 버킷, Amazon SNS 주제, Amazon SQS 대기열 등을 사용해요. 이런 경우 권한 관리 시나리오는 서비스마다 달라요. 다음은 서로 다른 서비스에서 권한을 처리하는 방식의 예시예요.
- Amazon EC2 Auto Scaling에서는 사용자가 Auto Scaling을 사용할 권한은 있어야 하지만 Amazon EC2 인스턴스를 관리할 권한을 명시적으로 부여받을 필요는 없어요.
- AWS Data Pipeline에서는 IAM 역할이 파이프라인이 무엇을 할 수 있는지 결정해요. 사용자는 역할을 수임(assume)할 권한이 필요해요.
AWS 서비스가 의도한 작업을 수행할 수 있도록 권한을 제대로 구성하는 방법은 호출하는 서비스의 문서를 참고하세요. 서비스용 역할을 만드는 방법은 AWS 서비스에 권한을 위임할 역할 생성을 참고하세요.
IAM 역할로 서비스를 대신 작업하도록 구성
AWS 서비스를 대신 작업하도록 구성할 때는 보통 서비스가 무엇을 할 수 있는지 정의하는 IAM 역할의 ARN을 제공해요. AWS는 서비스에 역할을 전달(pass)할 권한이 있는지 확인해요. 자세한 내용은 사용자에게 역할을 AWS 서비스에 전달할 권한 부여를 참고하세요.
필수 작업 (Required actions)
작업(actions)은 리소스에 대해 할 수 있는 일(보기, 생성, 편집, 삭제 등)이에요. 작업은 각 AWS 서비스가 정의해요. 누군가 작업을 수행하도록 허용하려면 호출하는 아이덴티티나 영향을 받는 리소스에 적용되는 정책에 필요한 작업을 포함해야 해요. 일반적으로 작업 수행에 필요한 권한을 제공하려면 그 작업을 정책에 포함해야 해요. 예를 들어 사용자를 만들려면 정책에 CreateUser 작업을 추가해야 해요.
경우에 따라 추가 관련 작업을 정책에 포함해야 할 수도 있어요. 예를 들어 ds:CreateDirectory 작업으로 AWS Directory Service에서 디렉터리를 만들 권한을 제공하려면 정책에 다음 작업을 포함해야 해요.
ds:CreateDirectory
ec2:DescribeSubnets
ec2:DescribeVpcs
ec2:CreateSecurityGroup
ec2:CreateNetworkInterface
ec2:DescribeNetworkInterfaces
ec2:AuthorizeSecurityGroupIngress
ec2:AuthorizeSecurityGroupEgress
비주얼 편집기로 정책을 만들거나 편집할 때 정책에 필요한 모든 작업을 고르도록 경고와 안내를 받아요. AWS Directory Service에서 디렉터리를 만드는 데 필요한 권한에 대한 자세한 내용은 예제 2: 사용자가 디렉터리를 만들 수 있도록 허용을 참고하세요.