2017-02-18 74 views
0

我在我的賬戶中有一個AWS IAM用戶(我們稱之爲originAccount),它有權訪問另一個賬戶(targetAccount),並且我試圖克隆targetAccount中存在的CodeCommit存儲庫在我的Windows機器上使用我的originAccount憑據。AWS CodeCommit跨賬戶存儲庫訪問不起作用

我可以登錄並將角色切換到targetAccount就好,這就是我首先創建存儲庫的方式。除計費外,我可以完全訪問targetAccount。我的IAM用戶上啓用了MFA。我試過暫時關閉它,但它沒有幫助。但是,在MFA關閉的情況下,我可以成功執行aws s3 ls,但不會爲targetAccount發生錯誤。

SSH和HTTPS都不起作用。我可以作爲測試克隆它與靜態憑據,但這是不可接受的長期。我在這個東西是多麼困難的AWS驚訝...

我在originAccount用戶有這樣的政策:

{ 
    "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只能關閉嗎?

遺憾的是沒有其他問題,我發現有這樣的工作對我的答案...

我卸載並重新安裝的Git的Windows只是可以肯定的是沒有安裝的憑據管理器(我不能不記得),但它仍然不起作用,說repository '...' not found。儘管我可以通過HTTPS在originAccount中克隆存儲庫。

回答

2

憑證助手是使用臨時會話憑證(如從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客戶端工具使用AssumeRole從ORIGIN_ACCOUNT,有效地假設管理員對target_account作用,得到target_account臨時會話憑證。

您的.gitconfig應指定target_account配置文件。

如果您使用的是msysgit,則應嘗試升級到適用於Windows 2.x的Git。憑證助手將發送:作爲用戶名和AWS V4簽名作爲密碼。會話密鑰通常很長,在msysgit中,curl會將用戶名截斷爲256個字符,這將不包括完整的會話密鑰。

我希望這有助於!

+0

我得到這個在Linux上工作,然後嘗試Windows ... – Josh

+0

它的工作,謝謝!只是爲了澄清,'role_arn'帳戶ID是目標帳戶(管理員存在)和'mfa_serial'帳戶ID是原始帳戶。我甚至不知道存在'mfa_serial'。最後,在我的'credentials'文件中,'[]'頭文件中沒有'profile'前綴,即我只有'[target_account]'。 – Josh