당신은 크로스 계정 액세스를위한 역할을 만들어야합니다. 계정 1에서 사용자 (IAM 사용자 또는 페더레이션 사용자)가 맡을 수있는 계정 2에서 역할을 정의합니다. 계정 간 액세스에 역할을 사용하면 계정 2의 모든 리소스에 대한 액세스 권한을 부여 할 수 있습니다. S3)
편집 : 당신은 계정 2 S3 읽기 쓰기 액세스 할 수있는 역할을 만들 먼저해야 할
(의 그것을 이름을 보자 "S3-읽기 쓰기-역할") 및 계정 1에서 사용자에게 권한을 부여 역할 "S3-읽기 쓰기-역할"
확인이 링크를 사용하여, 그것을 수행하는 방법에 대해 설명합니다 : 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();
}
}
이 간단한 솔루션으로 나타납니다 http://stackoverflow.com/questions/40364525/running-emr-spark-with-multiple-s3-accounts는하지만,이다 – vikas368