특정 DynamoDB 테이블에만 CRUD 권한을 부여... 원했던 꿈의 흔적

7105 단어 DynamoDBAWS
주식회사 오즈비전@terra_yucco 입니다.
현재 오즈비전의 서비스 운영은 사원뿐만 아니라 파견 사원, 아르바이트, 외부 콜라보레이터, 기타 다양한 분들에게 지지되어 이루어져 있습니다.
이번에는 그 중에서 개발 중 특정 DynamoDB의 테이블만 CRUD가 필요하게 되는 경우가 있어, 그 때에 여러가지 조사를 했으므로 그 결과를 정리했습니다.

실제로 한 일



우선 IAM 정책 만들기



하고 싶은 조작


  • SQL로 말하는 DDL 레벨의 조작은 불필요. DML이 있으면 좋다
  • 이른바 CRUD - Create/Read/Update/Delete

  • 대상 테이블은 개발 환경의 테이블입니다.
  • 여러 환경의 테이블이 동일한 AWS 계정에 있고 환경 구별이 테이블 이름으로 수행됩니다 (샘플에서 알 수 있도록 접두사 test_)


  • 해당 설정 항목


  • DynamoDB의 정책에서 해당할 만한 것 찾기
  • 엄밀하게는 보다 적절한 페이지가 있다고 생각합니다만, API Reference 를 참조했습니다.
  • dynamodb : PutItem
  • dynamodb : GetItem
  • dynamodb:Query
  • dynamodb:Scan
  • dynamodb:UpdateItem
  • dynamodb : DeleteItem


  • 이 근처 여러가지 찾았습니다만, 이번 콘솔로부터의 이용을 상정하고 있었기 때문에, ListTables라든지 다른 것도 여러가지 필요하게 되어, 최종적으로는 "dynamodb:*"로 열었습니다.

  • 대상 테이블의 arn



    다음 위치에서 복사합니다.
    DynamoDB > Tables > 해당 테이블을 선택하고 오른쪽 창


    …입니다만 이번 결국, 테이블을 1개씩 지정은 하지 않았기 때문에, 이대로는 사용하지 않았습니다. \(^o^)/

    json으로 시도했습니다.



    모든 것을 한 번 Allow하고 필요없는 곳을 Deny


    {
        "Version": "2012-10-17",
        "Statement": [
            {
                "Effect": "Allow",
                "Action": [
                    "dynamodb:*"
                ],
                "Resource": "*"
            },
            {
                "Effect": "Deny",
                "Action": [
                    "dynamodb:*"
                ],
                "Resource": [
                    "arn:aws:dynamodb:ap-northeast-1:xxxxxxxxxxxx:table/production*",
                    "arn:aws:dynamodb:ap-northeast-1:xxxxxxxxxxxx:table/stage*"
                ]
            }
        ]
    }
    

    결국 사용하지 않은 녀석 (validate는 통과한다)


    {
        "Version": "2012-10-17",
        "Statement": {
            "Effect": "Allow",
            "Action": [
                "dynamodb:DescribeTable",
                "dynamodb:PutItem",
                "dynamodb:GetItem",
                "dynamodb:Query",
                "dynamodb:Scan",
                "dynamodb:UpdateItem",
                "dynamodb:DeleteItem"
            ],
            "Resource": [
                "arn:aws:dynamodb:ap-northeast-1:xxxxxxxxxxxx:table/test_table",
                "arn:aws:dynamodb:ap-northeast-1:xxxxxxxxxxxx:table/test_table2"
            ]
        }
    }
    

    실제로 정책 만들기



    (중의 사람 사정으로 이쪽은 12/29 이후에 추기합니다...)

    부탁



    현재이 설정에서 특히 문제는 발생하지 않습니다.
    이 설정이라면 테이블에 인덱스를 만들 수 있을까? 있을지도 모른다는 점을 파트너 씨에게 물어 즉답하지 못하고 있습니다.
    AWS CLI DYNAMODB 페이지를 보면 인덱싱에 해당하는 작업이 없을 것입니다.
    만약 아시는 분이 계시면, 코멘트 받을 수 있으면 다행입니다!
    (콘솔에서 해당 테이블로 전환할 수 있으며 CRUD만 가능!이 되는 것이 이상적입니다)

    결론



    몹시 개발과 프로덕션으로 계정을 나누고 있으면 이런 문제는 일어나지 않습니다만, 한 번 같은 계정으로 만들어 버리면 좀처럼 나눌 수 없기 때문에, 이런 식으로 대처하고 있다는 공유였습니다.

    오즈비전의 어드벤트 캘린더 은 오늘 한번 둘러싸고 있습니다만(이 기사는 12/18분입니다만, 쓴 것은 12/25입니다 orz), 또 기회가 있으면, 엔지니어 일동, 이러한 챌린지를 하고 있다 하고 싶습니다. 꼭 우리의 다음 도전을 기대해 주시면 좋겠습니다.
    그럼 여러분 좋은 해를.
    【오시마. 】

    좋은 웹페이지 즐겨찾기