При записи в S3 я могу сделать:
sess, _ := session.NewSession(&aws.Config{Region: aws.String(region)})
config := &aws.Config{Credentials: stscreds.NewCredentials(sess, arn)}
svc := s3.New(sess, config)
, чтобы создать соединение S3, которое получает свои учетные данные из ARN предполагаемой роли и региона, как описано здесь . Это позволяет мне ограничить доступ к S3 на основе разрешений, которые я установил sh для этой роли наряду с обычными разрешениями S3. Однако я не уверен, как сделать то же самое, только безопасно, с s3crypto
. Глядя на документацию, здесь , кажется, что мне нужно сделать что-то вроде этого:
// Create the inner S3 client
// region: a string that represents an AWS region
// arn: a role ARN that represents the assumer role of the service
sess, _ := session.NewSession(&aws.Config{Region: aws.String(region)})
config := &aws.Config{Credentials: stscreds.NewCredentials(sess, arn)}
svc := s3.New(sess, config)
// Create the content cipher
// keyarn: the ARN of the KMS key
keywrap := s3crypto.NewKMSKeyGenerator(kms.New(sess, config), keyarn)
builder := s3crypto.AESGCMContentCipherBuilder(keywrap)
// Build the encryptor
encryptor := s3crypto.NewEncryptionClient(sess, builder)
encryptor.S3Client = svc
// Build the decryptor
decryptor := s3crypto.NewDecryptionClient(sess)
decryptor.S3Client = svc
Проблема в том, что это а) довольно хакерский и б) может не работает для дешифрования, потому что клиент дешифрования использует стратегию загрузки, которая является частной для их API, и копирует клиент S3, который создается в процессе разработки и который нельзя установить, потому что он тоже является частным.
Это подводит меня на мой вопрос: как мне создать AWS EncryptionClient
и DecryptionClient
с предоставленным объектом *aws.Config
, чтобы я мог предоставить свою роль-получателя?