Я хотел бы знать, есть ли способ доступа к файлам jar и местоположению ввода и вывода из s3 другой учетной записи. У меня есть кластер EMR, работающий на учетной записи 1. Я хочу получить доступ к файлам и банкам из s3 учетной записи 2. Я использую AWS SDK для запуска AWS Simple workflow. Благодарю.Выполнение заданий с использованием кластера EMR и файлов s3 из другой учетной записи
ответ
Вам нужно создать роль для доступа к кросс-счета: http://docs.aws.amazon.com/IAM/latest/UserGuide/delegation-cross-acct-access.html
Вы можете установить доступ кросс-счета с помощью IAM ролей. Вы определяете роль в учетной записи 2, которую пользователь может использовать (пользователь IAM или федеративный пользователь) в учетной записи 1. Использование ролей для доступа к кросс-аккаунту позволяет вам предоставлять доступ к любому ресурсу на учетной записи 2 (в вашем случае это S3)
EDIT:
Вы должны сначала создать роль с READWRITE доступа к S3 в Счет 2 (назовем его «S3-ReadWrite-роль») и дать разрешение на пользователей со счета 1 использовать роль «S3-ReadWrite-роли»
Проверить эту ссылку, он объяснит вам, как это сделать: http://blogs.aws.amazon.com/security/post/TxC24FI9IDXTY1/Delegating-API-Access-to-AWS-Services-Using-IAM-span-class-matches-Roles-span
После того, как вы закончите первый шаг, вы можете использовать этот код (не тестировалось): Используя ваши учетные данные, вы получите временные учетные данные безопасности для использования «S3-ReadWrite-role», затем вы будете использовать временные учетные данные безопасности для доступа к S3;)
import java.util.HashMap;
import com.amazonaws.services.securitytoken.AWSSecurityTokenServiceClient;
import com.amazonaws.services.securitytoken.model.AssumeRoleRequest;
import com.amazonaws.services.securitytoken.model.AssumeRoleResult;
import com.amazonaws.services.dynamodb.AmazonDynamoDBClient;
import com.amazonaws.services.dynamodb.model.*;
import com.amazonaws.auth.*;
public class AssumeRoleDemo {
private static final String ROLE_ARN =
"arn:aws:iam::111122223333:role/S3-ReadWrite-role";
private static AWSCredentials longTermCredentials_;
private static void init() throws Exception {
// acquire long term credentials from the properties file (you should use this method)
//longTermCredentials_ = new PropertiesCredentials(AssumeRoleDemo.class.getResourceAsStream("AwsCredentials.properties"));
// or you can use this one
longTermCredentials = new BasicAWSCredentials(access_key_id, secret_access_key);
}
public static void main(String[] args) throws Exception {
init();
// Step 1. Use Joe.s long-term credentials to call the
// AWS Security Token Service (STS) AssumeRole API, specifying
// the ARN for the role S3-RW-role in account2.
AWSSecurityTokenServiceClient stsClient = new
AWSSecurityTokenServiceClient(longTermCredentials_);
AssumeRoleRequest assumeRequest = new AssumeRoleRequest()
.withRoleArn(ROLE_ARN)
.withDurationSeconds(3600)
.withRoleSessionName("demo");
AssumeRoleResult assumeResult =
stsClient.assumeRole(assumeRequest);
// Step 2. AssumeRole returns temporary security credentials for
// the IAM role.
BasicSessionCredentials temporaryCredentials =
new BasicSessionCredentials(
assumeResult.getCredentials().getAccessKeyId(),
assumeResult.getCredentials().getSecretAccessKey(),
assumeResult.getCredentials().getSessionToken());
// Step 3. Make S3 service calls to read data from a
// S3, stored in account2, using the
// temporary security credentials from the S3-ReadWrite-role
// that were returned in the previous step.
AmazonS3 s3Client = new AmazonS3Client(temporaryCredentials);
S3Object object = s3Client.getObject(
new GetObjectRequest(bucketName, key));
InputStream objectData = object.getObjectContent();
// Process the objectData stream.
objectData.close();
}
}
Но это существует способ добавления учетных данных другой учетной записи и выполнения заданий по данным в этой учетной записи. Например, я получаю доступ к s3 в своих работах, используя AwsCrediantials cred = new Aws Cred (Awskey, Awssecret id). Simillary, Могу ли я добавить учетную запись другой учетной записи. – 2014-09-18 15:13:51
Это действительно помогло. Спасибо .. – 2014-09-19 22:19:45
Не могли бы вы отметить ответ, как принято? – SelimN
Это, как представляется, простое решение: http://stackoverflow.com/questions/40364525/running-emr-spark-with-multiple-s3-accounts – vikas368