Итак, подведем итоги: вы хотите получить доступ к своему списку продуктов из учетной записи разработчика.
Есть два способа сделать это, метод 1 - ваш подход, однако я бы предложил метод 2:
Метод 1 : использование ролей.Это то, что вы описали выше, это здорово, однако вы не можете синхронизировать корзину с корзиной, если они находятся на разных учетных записях, поскольку каждый раз необходимо будет экспортировать разные ключи доступа.Скорее всего, вам придется синхронизировать файлы из корзины prod с локальной файловой системой, а затем с локальной файловой системы в корзину для разработчиков.
Как это сделать:
Используя роли, создайте роль в производственной учетной записи, которая имеет доступ к корзине.Отношения доверия этой роли должны доверять роли учетной записи dev, назначенной экземпляру ec2.Прикрепите политику, предоставляющую доступ к корзине продуктов, к этой роли.После того, как все настроено, роль экземпляра ec2 в dev должна быть обновлена, чтобы разрешить sts:AssumeRole
той роли, которую вы определили в рабочей среде.На экземпляре ec2 в dev вам нужно будет запустить aws sts assume-role --role-arn <the role on prod> --role-session-name <a name to identify the session>
.Это вернет вам 3 переменные, AWS_SECRET_ACCESS_KEY
, AWS_ACCESS_KEY_ID
и AWS_SESSION_TOKEN
.На вашем экземпляре ec2 запустите set -a; AWS_SECRET_ACCESS_KEY=${secret_access_key};
AWS_ACCESS_KEY_ID=${access_key_id}; AWS_SESSION_TOKEN=${session_token}
.После того, как эти переменные были экспортированы, вы можете запустить aws sts get-caller-identity
, и это должно вернуться, показывая, что вы находитесь на роли, которую вы подготовили в производственном процессе.Теперь вы сможете синхронизировать файлы с локальной системой, и как только это будет сделано, удалите ключи aws, которые мы установили как переменные env, а затем скопируйте файлы из экземпляра ec2 в корзину в dev.Обратите внимание, что здесь есть два шага, чтобы скопировать их?это может раздражать - посмотрите метод 2, как этого избежать:
Метод 2: Обновите политику корзины prod, чтобы доверять учетной записи dev - это будет означать, что вы можете получить доступ к корзине prod из devи сделайте синхронизацию от сегмента к циклу / cp.
Я настоятельно рекомендую вам использовать этот подход, поскольку это будет означать, что вы можете копировать напрямую между сегментами без необходимости синхронизации с локальной файловой системой.
Для этого вам понадобитсяобновить политику сегмента в рабочем блоке, чтобы иметь блок принципалов, который доверяет идентификатору учетной записи AWS для dev.Примером этого может быть то, что вы обновляете свою политику bud prod, чтобы она выглядела примерно так:
ПРИМЕЧАНИЕ: предоставление s3: * неверно, и предоставление полного доступа к учетной записи не рекомендуется, так как любой пользователь с правамиПрава доступа s3 теперь могут получить доступ к этому сегменту, но для простоты я оставлю это здесь:
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "Example permissions",
"Effect": "Allow",
"Principal": {
"AWS": "arn:aws:iam::DEV_ACC_ID:root"
},
"Action": [
"s3:*"
],
"Resource": [
"arn:aws:s3:::PROD_BUCKET_NAME",
"arn:aws:s3:::PROD_BUCKET_NAME/*"
]
}
]
}
После того, как вы это сделаете, в учетной записи dev прикрепите политикув вашем основном посте к роли экземпляра dev ec2 (той, которая предоставляет доступ s3).Теперь, когда вы подключаетесь к экземпляру dev, вам не нужно экспортировать какие-либо переменные окружения, вы можете просто запустить aws s3 ls s3://prodbucket
, и он должен отобразить список файлов.Вы можете синхронизировать файлы между двумя сегментами, используя aws s3 sync s3://prodbucket s3://devbucket --acl bucket-owner-full-control
, и это должно скопировать все файлы из prod в dev, а также обновить ACL каждого файла так, чтобы dev владел ими (то есть у вас есть полный доступ кфайлы в dev).