2017-02-18 8 views
0

다른 계정 (targetAccount)에 액세스 할 수있는 AWS IAM 사용자가 내 계정에 있습니다 (originAccount라고 부름). targetAccount에있는 CodeCommit 리포지토리를 복제하려고합니다. 내 Windows 컴퓨터에서 내 originAccount 자격 증명을 사용합니다.AWS CodeCommit 교차 계정 리포지토리 액세스가 작동하지 않음

로그인 할 수 있으며 역할을 targetAccount로 전환하면 처음부터 리포지토리를 생성 한 것입니다. 청구를 제외하고는 targetAccount에 대한 전체 액세스 권한이 있습니다. 내 IAM 사용자에 대해 MFA를 활성화했습니다. 일시적으로 사용 중지하려고 시도했지만 도움이되지 않았습니다. 그러나 MFA를 해제 한 상태에서 aws s3 ls을 targetAccount에 대한 오류없이 성공적으로 수행 할 수 있습니다.

SSH 및 HTTPS 모두 작동하지 않습니다. I 정적 자격 증명을 테스트로 복제 할 수 있지만 이는 장기간 허용되지 않습니다. 나는 originAccount에서

내 사용자는이 정책을 가지고 ...이 물건은 AWS에 얼마나 어려운지에서 놀라 울뿐입니다 :

{ 
    "Version": "2012-10-17", 
    "Statement": [ 
     { 
      "Effect": "Allow", 
      "Action": [ 
       "sts:AssumeRole" 
      ], 
      "Resource": [ 
       "arn:aws:iam::000000000000:role/Administrator" 
      ] 
     } 
    ] 
} 

관리자의 역할은 모든에 액세스 할 수 있습니다. targetAccount의 신뢰 관계는 다음과 같습니다.

{ 
    "Version": "2012-10-17", 
    "Statement": [ 
    { 
     "Effect": "Allow", 
     "Principal": { 
     "AWS": "arn:aws:iam::111111111111:user/MyUser" 
     }, 
     "Action": "sts:AssumeRole", 
     "Condition": { 
     "Bool": { 
      "aws:MultiFactorAuthPresent": "true" 
     } 
     } 
    } 
    ] 
} 

MFA 비트를 제거하려고했습니다. 도움이되지 않았다. 내 사용자 계정에서 MFA를 사용할 수 없게 되어도 도움이되지 않습니다.

.aws\credentials 파일이 라인을 포함 : 내가 사용하는 프로파일을 설정하는 환경 변수를 사용하고

[default] 
aws_access_key_id = [originAccountKey] 
aws_secret_access_key = [originAccountSecret] 

[targetAccount] 
aws_access_key_id = [originAccountKey] 
aws_secret_access_key = [originAccountSecret] 

을 예 :

set AWS_DEFAULT_PROFILE=targetAccount 

.gitconfig가 포함

[credential "https://git-codecommit.us-east-1.amazonaws.com"] 
    helper = !'C:\\path\\to\\git-credential-AWSSV4.exe' --profile='targetAccount' 
    UseHttpPath = true 

원래는 기본 프로필을 사용하고 있었지만 어느 쪽도 일하지 않았다.

질문 :

  1. 이 가능합니까? 내가 도대체 ​​뭘 잘못하고있는 겁니까?
  2. SSH와 HTTPS 모두 교차 계정 액세스가 가능합니까? 문서는 혼란 스럽지만 자격 증명 도우미가있는 HTTPS 만 작동하는 것으로 보이는 것 같습니다 (단언하면).
  3. 다중 요소 인증에서도 작동합니까? 그렇지 않으면 CodeCommit에 대해서만 끌 수 있습니까?

불행하게도 내가 찾은 다른 질문 중 어느 것도 내가 나오지 않았어 (I 제거한 나를 위해 일한 답변 ...

없었으며 단지에 대한 자격 증명 관리자가 설치되지 않은 확인하기 위해 Windows 용 망할 놈을 다시 설치 기억하지 못한다.) 그러나 여전히 작동하지 않는다고 repository '...' not found은 말한다. HTTPS를 통해 originAccount에서 저장소를 복제 할 수 있습니다.

답변

2

Credential-Helper는 AssumeRole에서 가져온 것과 같은 임시 세션 자격 증명을 사용하여 CodeCommit을 인증하는 유일한 방법입니다. SSH 인증은 임시가 아닌 업로드 된 공개 키를 확인하여 수행되므로 SSH가 작동하지 않습니다.

다음 패턴은 AssumeRole을 사용한 인증에 따라 쉽게 따라 할 수 있습니다. 당신의 .aws\credentials 파일에서 :

[profile target_account] 
role_arn = arn:aws:iam::000000000000:role/Administrator 
mfa_serial = arn:aws:iam::000000000000:mfa/MFA_DEVICE 
source_profile = origin_account 

[profile origin_account] 
aws_access_key_id = [originAccountKey] 
aws_secret_access_key = [originAccountSecret] 

는 AWS 클라이언트 도구를 효과적으로 target_account에 대한 관리자의 역할을 가정하고 ORIGIN_ACCOUNT에서 AssumeRole를 사용하여 target_account에서 임시 세션 자격 증명을 얻을 수 있습니다.

귀하의 .gitconfigtarget_account 프로필을 지정해야합니다.

msysgit을 사용하는 경우 Git for Windows 2.x로 업그레이드해야합니다. 자격증 명 도우미는 사용자 이름으로 AWS V4 Signature를 암호로 보냅니다. 세션 키는 일반적으로 꽤 길며 msysgit에 있습니다. curl은 사용자 이름을 전체 세션 키를 포함하지 않는 256 자로 자릅니다.

도움이 되었기를 바랍니다.

+0

나는 Linux에서 작동하여 다음에 Windows를 시도 할 것입니다. – Josh

+0

감사합니다. 명확히하기 위해,'role_arn' 계정 ID는 대상 계정 (관리자가있는 곳)이고'mfa_serial' 계정 ID는 원래 계정입니다. 나는'mfa_serial'이 존재한다는 것을 몰랐다. 마지막으로, 나의'credentials' 파일에는'[]'헤더 안에'profile' 접두어가 없습니다. 즉,'[target_account]'만 있습니다. – Josh