동일한 AWS 계정의 다른 DynamoDB 환경에 대한 IAM 정책 - Amazon DynamoDB

동일한 AWS 계정의 다른 DynamoDB 환경에 대한 IAM 정책

별도의 환경이 있고 각 환경에서 ProductCatalog라는 테이블의 자체 버전을 유지한다고 가정해 보겠습니다. 동일한 AWS 계정에서 2개의 ProductCatalog 테이블을 생성하는 경우 권한이 설정되는 방식 때문에 한 환경에서의 작업이 다른 환경에 영향을 줄 수 있습니다. 예를 들어 동시 제어 영역 작업(예:CreateTable)의 수에 대한 할당량은 AWS 계정 수준에서 설정됩니다.

따라서 한 환경에서 작업을 수행할 때마다 다른 환경에서 사용 가능한 작업의 수가 감소합니다. 또한 한 환경의 코드가 다른 환경의 테이블에 실수로 액세스할 수 있는 위험도 있습니다.

참고

프로덕션 및 테스트 워크로드를 분리하여 이벤트의 잠재적 ‘영향 범위’를 제어할 수 있으려면 테스트 및 프로덕션 워크로드에 대해 별도의 AWS 계정을 생성하는 것이 좋습니다. 자세한 내용은 AWS 계정 관리 및 분리 단원을 참조하세요.

또한 Amit과 Alice라는 두 개발자가 ProductCatalog 테이블을 테스트 중이라고 가정해 보겠습니다. 개발자가 각각 별도의 AWS 계정을 요구하는 대신 동일한 테스트 AWS 계정을 공유할 수 있습니다. 이 테스트 계정에서 Alice_ProductCatalogAmit_ProductCatalog와 같이 각 개발자가 작업할 수 있는 동일한 테이블의 복제본을 만들 수 있습니다. 이 경우 테스트 환경용으로 생성한 AWS 계정에서 사용자 Alice 및 Amit을 만들 수 있습니다. 그런 다음 이들 사용자에게 각자가 소유하는 테이블에 대해 DynamoDB 작업을 수행할 수 있는 권한을 부여할 수 있습니다.

이러한 IAM 사용자 권한을 부여하려면 다음 중 하나를 수행할 수 있습니다.

  • 사용자마다 개별 정책을 만들고 각 정책을 사용자에게 개별적으로 연결합니다. 예를 들면, 다음 정책을 사용자 Alice에 연결하여 이 사용자가 Alice_ProductCatalog 테이블에서 모든 DynamoDB 작업에 액세스하도록 허용할 수 있습니다.

    { "Version": "2012-10-17", "Statement": [ { "Sid": "AllAPIActionsOnAliceTable", "Effect": "Allow", "Action": [ "dynamodb:DeleteItem", "dynamodb:DescribeContributorInsights", "dynamodb:RestoreTableToPointInTime", "dynamodb:ListTagsOfResource", "dynamodb:CreateTableReplica", "dynamodb:UpdateContributorInsights", "dynamodb:CreateBackup", "dynamodb:DeleteTable", "dynamodb:UpdateTableReplicaAutoScaling", "dynamodb:UpdateContinuousBackups", "dynamodb:TagResource", "dynamodb:DescribeTable", "dynamodb:GetItem", "dynamodb:DescribeContinuousBackups", "dynamodb:BatchGetItem", "dynamodb:UpdateTimeToLive", "dynamodb:BatchWriteItem", "dynamodb:ConditionCheckItem", "dynamodb:UntagResource", "dynamodb:PutItem", "dynamodb:Scan", "dynamodb:Query", "dynamodb:UpdateItem", "dynamodb:DeleteTableReplica", "dynamodb:DescribeTimeToLive", "dynamodb:RestoreTableFromBackup", "dynamodb:UpdateTable", "dynamodb:DescribeTableReplicaAutoScaling", "dynamodb:GetShardIterator", "dynamodb:DescribeStream", "dynamodb:GetRecords", "dynamodb:DescribeLimits", "dynamodb:ListStreams" ], "Resource": "arn:aws:dynamodb:us-west-2:123456789012:table/Alice_ProductCatalog/*" } ] }

    그런 다음 사용자 Amit에 대해 다른 리소스(Amit_ProductCatalog 테이블)를 사용하여 유사한 정책을 만들 수 있습니다.

  • 정책을 개별 사용자에게 연결하는 대신, IAM 정책 변수를 사용하여 단일 정책을 작성하고 이 정책을 그룹에 연결할 수도 있습니다. 이 경우 그룹을 만들어야 하고, 여기서는 Alice와 Amit 두 사용자 모두 해당 그룹에 추가해야 합니다. 다음 예제에서는 ${aws:username}_ProductCatalog 테이블에서 모든 DynamoDB 작업을 수행할 수 있는 권한을 부여합니다. 정책이 평가될 때 정책 변수 ${aws:username}은 요청자의 사용자 이름으로 대체됩니다. 예를 들어 Alice가 항목을 추가하라는 요청을 보내는 경우 이 작업은 Alice가 항목을 Alice_ProductCatalog 테이블에 추가하는 경우에만 허용됩니다.

    { "Version": "2012-10-17", "Statement": [ { "Sid": "ActionsOnUserSpecificTable", "Effect": "Allow", "Action": [ "dynamodb:PutItem", "dynamodb:UpdateItem", "dynamodb:DeleteItem", "dynamodb:BatchWriteItem", "dynamodb:GetItem", "dynamodb:BatchGetItem", "dynamodb:Scan", "dynamodb:Query", "dynamodb:ConditionCheckItem" ], "Resource": "arn:aws:dynamodb:us-west-2:123456789012:table/${aws:username}_ProductCatalog" }, { "Sid": "AdditionalPrivileges", "Effect": "Allow", "Action": [ "dynamodb:ListTables", "dynamodb:DescribeTable", "dynamodb:DescribeContributorInsights" ], "Resource": "arn:aws:dynamodb:us-west-2:123456789012:table/*" } ] }
참고

IAM 정책 변수를 사용할 때는 정책에서 IAM 정책 언어의 2012-10-17 버전을 명시적으로 지정해야 합니다. IAM 정책 언어의 기본 버전(2008-10-17)은 정책 변수를 지원하지 않습니다.

평소대로 특정 테이블을 리소스로 식별하는 대신, 아래 예제와 같이 와일드카드 문자(*)를 사용하여 테이블 이름에 요청자의 사용자 이름이 접두사로 붙은 모든 테이블에 대한 권한을 부여할 수 있습니다.

"Resource":"arn:aws:dynamodb:us-west-2:123456789012:table/${aws:username}_*"