2017-02-18 18 views
0

У меня есть пользователь AWS IAM в моей учетной записи (назовем его originAccount), который имеет доступ к другой учетной записи (targetAccount), и я пытаюсь клонировать репозиторий CodeCommit, который существует в targetAccount используя мои учетные данные originAccount на моей машине Windows.AWS CodeCommit доступ к репозиторию межсетевого обмена не работает

Я могу войти и переключить роли в targetAccount просто отлично, вот как я создал репозиторий в первую очередь. У меня есть полный доступ к targetAccount, за исключением выставления счетов. У меня есть MFA для моего пользователя IAM. Я попытался временно отключить это, но это не помогло. Однако при выключенном MFA я могу сделать aws s3 ls успешно без ошибок для targetAccount.

Ни SSH, ни HTTPS не работают. I может клонировать его со статическими учетными данными, как тест, но это не приемлемо в долгосрочной перспективе. Я поражен тем, насколько труден этот материал на 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. Я могу клонировать репозитории в originAccount через HTTPS.

ответ

2

Credential-helper - единственный способ аутентификации с помощью CodeCommit с использованием временных учетных данных сеанса, таких как те, которые были получены от AssumeRole. 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] 

Это позволит клиентские инструменты АМС получить временные сессионные данные из target_account с помощью AssumeRole из origin_account, эффективно взять на себя роль администратора на target_account.

Ваш .gitconfig должен указать профиль target_account.

Если вы используете msysgit, вам следует попробовать перейти на Git for Windows 2.x. Приветственный помощник отправит: как имя пользователя и подпись AWS V4 в качестве пароля. Клавиши сеанса обычно довольно длинные и в msysgit curl усекает имя пользователя до 256 символов, которое не будет содержать полный ключ сеанса.

Надеюсь, это поможет!

+0

Я получил это, чтобы работать на Linux, собирается попробовать Windows следующий ... – Josh

+0

Это сработало, спасибо! Чтобы уточнить, идентификатор учетной записи 'role_arn' является целевой учетной записью (где существует Администратор), а идентификатор учетной записи' mfa_serial' - это начальная учетная запись. Я даже не знал, что существует «mfa_serial». Наконец, в моих файлах 'credentials' нет префикса' profile' в заголовке '[]', т. Е. Я просто '[target_account]'. – Josh