Вам понадобится роль в UserAccount, которая будет использоваться для доступа к указанным сегментам, скажем RoleA. Роль должна иметь разрешения для требуемых операций S3.
Тогда вы сможете настроить политику сегментов для каждого сегмента:
Для DataAccount :
{
"Version": "2012-10-17",
"Id": "Policy1",
"Statement": [
{
"Sid": "test1",
"Effect": "Allow",
"Principal": {
"AWS": "arn:aws:iam::DataAccount:role/RoleA"
},
"Action": "s3:*",
"Resource": [
"arn:aws:s3:::dataaccountlogs",
"arn:aws:s3:::dataaccountlogs/*"
]
}
]
}
Для UserAccount :
{
"Version": "2012-10-17",
"Id": "Policy1",
"Statement": [
{
"Sid": "test1",
"Effect": "Allow",
"Principal": {
"AWS": "arn:aws:iam::DataAccount:role/RoleA"
},
"Action": "s3:*",
"Resource": [
"arn:aws:s3:::userlogs",
"arn:aws:s3:::userlogs/*"
]
}
]
}
Для доступа к ним из командной строки:
Сначала вам необходимо настроить инструмент CLI AWS:
https://docs.aws.amazon.com/polly/latest/dg/setup-aws-cli.html
Тогда вам нужно будет настроить профиль для использования вашей роли.
Для начала вам необходимо создать профиль для входа в систему:
aws configure --profile YourProfileAlias
И следуйте инструкциям по настройке учетных данных.
Затем вам нужно будет отредактировать конфиг и добавить профиль для роли:
~ / .Aws / конфигурации
Добавить в конец блок:
[profile YourRoleProfileName]
role_arn = arn:aws:iam::DataAccount:role/RoleA
source_profile = YourProfileAlias
После этого вы сможете использовать aws s3api ... --profile YourRoleProfileName для доступа к обоим сегментам от имени созданной роли.
Для доступа от искры:
- Если вы запускаете кластер в EMR, вам следует использовать SecurityConfiguration и заполнить раздел для настройки роли S3. Можно указать разные роли для каждого конкретного сегмента. Вы должны использовать ограничение «Префикс» и перечислить все префиксы назначения после. Например, "s3: // dataaccountlogs /, s3: // userlogs".
Примечание: для этого следует строго использовать протокол s3, а не s3a. Также есть ряд ограничений, вы можете найти здесь:
https://docs.aws.amazon.com/emr/latest/ReleaseGuide/emr-spark-s3-optimized-committer.html
- Другой способ с помощью spark - настроить Hadoop для выполнения вашей роли. Ввод
spark.hadoop.fs.s3a.aws.credentials.provider =
"org.apache.hadoop.fs.s3a.AssumedRoleCredentialProvider, org.apache.hadoop.fs.s3a.auth.AssumedRoleCredentialProvider"
И настройка вашей роли для использования
spark.hadoop.fs.s3a.assumed.role.arn = arn: aws: iam :: DataAccount: роль / RoleA
Этот способ является более общим, поскольку коммитер EMR имеет различные ограничения. Вы можете найти больше информации для настройки этого в документации Hadoop:
https://hadoop.apache.org/docs/r3.1.1/hadoop-aws/tools/hadoop-aws/assumed_roles.html