루트 계정에서 IAM 계정에 권한 주기
User: arn:aws:iam::~~~:user/{계정이름} is not authorized to perform: ecr:GetRegistryPolicy on resource: * because no identity-based policy allows the ecr:GetRegistryPolicy action
이렇게 IAM 계정으로 ECR을 접속했는데 Private registry에 접속하려고 보니까 권한이 없다며 접속이 안됨..
공식문서에 나와있는대로 json형식으로도 넣어보고, 어쩌고 했는데도 다 안됐는데 이 방법으로 되어서 기록함.
먼저 Root 계정으로 로그인하기
IAM console에 들어가서 액세스 관리에 정책
클릭
오른쪽 상단에 정책 생성
버튼 클릭
서비스 선택에서 elastic container registry
를 선택함
그리고 수동 작업에 모든 Elastic Container Registry를 체크함.
(필수 권한이 선택되지 않았다고 뜨는데 ecr:CreatePullThroughCacheRule, 따로 설정안해줘도 권한 들어가긴함. 뭔지 모르겠음)
ARN추가
버튼을 눌러서 설정하는 창을 띄움
리소스 리전은 ap-northeast-2
로 서울로 쓰고
리소스 레포지토리 이름은 모든 레포지토리 이름으로 체크,
리소스 ARN은 위에 내용을 따라 자동으로 입력됨.
그리고 ARN 추가
버튼을 클릭
밖으로 나와서 다음 버튼을 눌러주고 정책 이름을 설정하고 완료하기.
그럼 이제 IAM 정책이 만들어진 것임.
이제 만들어진 권한을 사용자에게 부여해주면 됨.
내가 권한을 주고 싶은 계정으로 들어감
권한 정책 - 권한 추가 토글 선택
권한 옵션 - 직접 정책 연결
권한 정책에서 내가 만든 정책을 검색해서 찾아줌.
선택하고 다음버튼 눌러서 권한 추가해주기
** 원래 AWS 정책 중에 AmazonElasticContainerRegistryPublicFullAccess
이 있음
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"ecr-public:*",
"sts:GetServiceBearerToken"
],
"Resource": "*"
}
]
}
근데 이게 왜 적용이 안되는지 모르겠다..
이건 public full access 권한이라 그런것 같긴한데..
private full access 권한은 이 방법 밖에 없는 건가?