Kanji
・클라우드 엔지니어 / 프리랜서 ・1993년생 ・에히메현 출신 / 도쿄도 시부야구 거주 ・AWS 경력 5년 프로필 상세
목차
IAM 권한을 설계할 때 주요 과제 중 하나는 최소 권한 원칙을 얼마나 엄격하게 적용할지 결정하는 것입니다.
모범 사례로서 IAM 사용자 및 IAM 역할에 필요한 최소한의 권한만 부여하는 것이 좋습니다.
단, IAM 사용자 및 역할에 대한 권한을 제한하면 시스템 관리자의 운영 부담이 가중될 수 있습니다.
따라서 IAM 권한 부여와 관련된 비즈니스 위험을 사전에 평가하여 허용 가능한 위험 범위 내에서 권한을 부여하는 것이 중요합니다.
IAM 권한 제어 외에도 AWS Organizations의 SCP(서비스 제어 정책)를 사용하면 IAM 권한 설계 부담을 줄이는 데 도움이 될 수 있습니다.
AWS 계정을 적절하게 분할하는 것도 중요합니다.AWS 계정을 분할하면 IAM 권한이 부적절하게 부여되더라도 영향이 제한될 수 있습니다.
IAM 권한을 부여하는 데 사용할 수 있는 세 가지 유형의 정책이 있습니다.
인라인 정책
AWS 관리형 정책
고객 관리형 정책
이 중 “AWS 관리형 정책”은 AWS에서 제공하며, AWS가 권한을 적절하게 평가한 후 제공됩니다.이러한 정책을 사용하면 각 AWS 서비스에 대한 쓰기 및 읽기 권한을 부여할 수 있습니다.
기본적으로 AWS 관리형 정책을 사용하는 것을 권장합니다.그러나 AWS 관리형 정책은 과도한 권한을 부여할 수 있으므로 “고객 관리형 정책” 또는 “인라인 정책”을 사용하여 필요에 따라 권한을 추가로 제한하는 것이 좋습니다.
예를 들어, 다음 패턴에서는 ‘고객 관리형 정책’ 또는 ’인라인 정책’을 사용하여 권한을 제한하는 것을 고려해보세요.
AWS 관리형 정책을 사용하여 KMS 키에 대한 관리 권한을 부여하려면 AWS 관리형 정책 “AWSKeyManagementServicePowerUser”를 사용하면 됩니다.
참조: AWSKeyManagementServicePowerUser - AWS 관리형 정책
그러나 이 정책을 사용하면 키 생성 또는 삭제, IAM 정책 변경 등 KMS 키에 대한 강력한 권한이 부여됩니다.
따라서 특정 KMS 키에 대해서만 권한을 부여하려면 IAM 정책을 사용하는 것이 좋습니다.
예를 들어 다음 IAM 정책은 특정 태그가 있는 KMS 키로 암호화된 데이터를 해독할 수 있는 권한을 부여합니다.
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "kms:Decrypt", "kms:GenerateDataKey" ], "Resource": "*", "Condition": { "StringEquals": { "aws:ResourceTag/System": "SystemA" } } } ] }
Lambda 또는 Step Functions와 같은 AWS 리소스에 대한 실행 권한을 부여하면 해당 리소스가 실행될 때 실행되는 권한을 부여하게 됩니다.
이러한 리소스를 실행하면 비즈니스 위험이 발생할 경우 IAM 정책을 사용하여 실행 권한을 제한하는 것이 좋습니다.
예를 들어 다음 IAM 정책을 사용하면 특정 명명 규칙을 따르는 Lambda 함수를 실행할 수 있는 권한을 부여할 수 있습니다.
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "lambda:InvokeFunction" ], "Resource": [ "arn:aws:lambda:ap-northeast-1:123456789012:function:SystemA-*" ] } ] }
외부 계정에서 IAM 역할을 수임해야 하는 경우 IAM 정책을 사용하여 AssumeRole 권한을 부여할 수 있습니다.
AWS 관리형 정책으로는 권한을 부여할 수 없으므로, 사용자 지정 IAM 정책을 사용해 권한을 부여해야 합니다.
예를 들어 다음 IAM 정책은 특정 IAM 역할을 맡을 수 있는 권한을 부여합니다.
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "sts:AssumeRole" ], "Resource": [ "arn:aws:iam::123456789012:role/SystemA-*" ] } ] }
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "s3:PutObject", "s3:GetObject" ], "Resource": [ "arn:aws:s3:::systema-bucket", "arn:aws:s3:::systema-bucket/*" ] } ] }