[ 
https://issues.apache.org/jira/browse/BEAM-10850?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17236328#comment-17236328
 ] 

Tun Chang commented on BEAM-10850:
----------------------------------

[~aromanenko] 

 

This is the example code that I tried out.

Pipeline options setup:
{code:java}
options.setAwsCredentialsProvider(
        new STSAssumeRoleSessionCredentialsProvider
                .Builder(options.getAwsRoleArn().get(), 
options.getAwsRoleSession().get())
                .withExternalId(options.getAwsExternalId().get())
                .withStsClient(AWSSecurityTokenServiceClientBuilder.standard()
                        .withCredentials(
                                new AWSStaticCredentialsProvider(
                                        new BasicAWSCredentials(
                                                options.getAwsAccessKey().get(),
                                                
options.getAwsSecretKey().get())))
                        .withRegion(options.getAwsRegion().get())
                        .build())
                .build());

{code}
AWS SDK call in 
{noformat}
org.apache.beam.sdk.io.aws.options.AwsModule{noformat}
{code:java}
  @Override
  public AWSCredentialsProvider deserializeWithType(
      JsonParser jsonParser, DeserializationContext context, TypeDeserializer 
typeDeserializer)
      throws IOException {
    Map<String, String> asMap =
        jsonParser.readValueAs(new TypeReference<Map<String, String>>() {});

    String typeNameKey = typeDeserializer.getPropertyName();
    String typeName = asMap.get(typeNameKey);
    if (typeName == null) {
      throw new IOException(
          String.format("AWS credentials provider type name key '%s' not 
found", typeNameKey));
    }

    if (typeName.equals(AWSStaticCredentialsProvider.class.getSimpleName())) {
      return new AWSStaticCredentialsProvider(
          new BasicAWSCredentials(asMap.get(AWS_ACCESS_KEY_ID), 
asMap.get(AWS_SECRET_KEY)));
    } else if 
(typeName.equals(PropertiesFileCredentialsProvider.class.getSimpleName())) {
      return new 
PropertiesFileCredentialsProvider(asMap.get(CREDENTIALS_FILE_PATH));
    } else if (typeName.equals(
        ClasspathPropertiesFileCredentialsProvider.class.getSimpleName())) {
      return new 
ClasspathPropertiesFileCredentialsProvider(asMap.get(CREDENTIALS_FILE_PATH));
    } else if 
(typeName.equals(DefaultAWSCredentialsProviderChain.class.getSimpleName())) {
      return new DefaultAWSCredentialsProviderChain();
    } else if 
(typeName.equals(EnvironmentVariableCredentialsProvider.class.getSimpleName())) 
{
      return new EnvironmentVariableCredentialsProvider();
    } else if 
(typeName.equals(SystemPropertiesCredentialsProvider.class.getSimpleName())) {
      return new SystemPropertiesCredentialsProvider();
    } else if 
(typeName.equals(ProfileCredentialsProvider.class.getSimpleName())) {
      return new ProfileCredentialsProvider();
    } else if 
(typeName.equals(EC2ContainerCredentialsProviderWrapper.class.getSimpleName())) 
{
      return new EC2ContainerCredentialsProviderWrapper();
    } else if 
(typeName.equals(STSAssumeRoleSessionCredentialsProvider.class.getSimpleName()))
 {
      return new STSAssumeRoleSessionCredentialsProvider.Builder(
              asMap.get(ROLE_ARN), asMap.get(ROLE_SESSION_NAME))
          .withExternalId(asMap.get(EXTERNAL_ID))
          .withStsClient(
              AWSSecurityTokenServiceClientBuilder.standard()
                  .withCredentials(
                      new AWSStaticCredentialsProvider(
                          new BasicAWSCredentials(
                                  asMap.get(AWS_ACCESS_KEY_ID),
                                  asMap.get(AWS_SECRET_KEY))))
                  .withRegion(asMap.get(AWS_REGION))
                  .build())
          .build();

    } else {
      throw new IOException(
          String.format("AWS credential provider type '%s' is not supported", 
typeName));
    }
  }
}


{code}
 

 

> Ability to set S3 object ACL when uploading
> -------------------------------------------
>
>                 Key: BEAM-10850
>                 URL: https://issues.apache.org/jira/browse/BEAM-10850
>             Project: Beam
>          Issue Type: Improvement
>          Components: io-java-aws
>    Affects Versions: 2.23.0
>            Reporter: Tun Chang
>            Priority: P3
>
> I am using an AWS account to write to S3.  However, the bucket owner doesn't 
> have the access to the objects I uploaded.  I'd like to set the object ACL to 
> bucket-owner-full-control so that the bucket owner would have the full 
> control over the objects I uploaded.



--
This message was sent by Atlassian Jira
(v8.3.4#803005)

Reply via email to