Как я должен использовать роль IAM для доступа к S3 в C # - PullRequest
0 голосов
/ 07 ноября 2019

Я столкнулся с проблемой при попытке использовать роль IAM для доступа к S3 в C #. Ниже приведены шаги, которые я сделал.

  1. Создание политики AssumeRole службы STS: {"Version": "2012-10-17", "Statement": [{"Sid": "VisualEditor0", "Effect": "Allow"," Action ":" sts: AssumeRole "," Resource ":" arn: aws: iam :: 761612772509: role / S3TestRole "," Condition ": {" StringEquals ": {" aws: RequestedRegion ":" ap-northeast-1 "}}}]}

  2. Создайте роль IAM (другая учетная запись AWS) и присоедините политику AssumeRole к этой роли: Роль ARN: arn: aws: iam :: 761612772509: role / S3TestRole And Trust Relationship, как показано на рисунке: введите описание изображения здесь введите описание изображения здесь

  3. Активная область STS: введите описание изображения здесь

  4. S3 Bucket Policy: {"Id": "Policy1573183227944", "Version": "2012-10-17", "Statement": [{"Sid": "Stmt1573183224129", "Action": "s3: ", "Effect": "Allow", "Resource": ["arn: aws: s3 ::: 20190830s3bucket", "arn: aws: s3 ::: 20190830s3bucket /"]," Principal ": {" AWS ": [" arn: aws: iam :: 761612772509: role / S3TestRole "]}}]}


   try
            {
                AssumeRoleRequest assumeRequest = new AssumeRoleRequest
                {
                    RoleArn = "arn:aws:iam::761612772509:role/S3TestRole",
                    DurationSeconds = 3600,
                    Policy = "{\"Version\": \"2012-10-17\",\"Statement\": [{\"Sid\": \"VisualEditor0\",\"Effect\": \"Allow\",\"Action\": \"sts:AssumeRole\",\"Resource\": \"arn:aws:iam::761612772509:role/S3TestRole\",\"Condition\": {\"StringEquals\": {\"aws:RequestedRegion\": \"ap-northeast-1\"}}}]}",
                };


                AssumeRoleResult assumeRoleResult = new AmazonSecurityTokenServiceClient(RegionEndpoint.APNortheast1).AssumeRole(assumeRequest);


                AWSCredentials tempCredentials = new SessionAWSCredentials(
                   assumeRoleResult.Credentials.AccessKeyId,
                   assumeRoleResult.Credentials.SecretAccessKey,
                   assumeRoleResult.Credentials.SessionToken);
                s3Client = new AmazonS3Client(tempCredentials);
            }
            catch (Exception ex)
            {
                throw ex;
            }


Мой регион находится в ap-northeast-1, и когда я выполняю метод acceptRoleResult, я всегда получаю" Маркер безопасностивключенный в запрос недействителен. "и InnerException - «Удаленный сервер возвратил ошибку: (403) запрещено». ошибки. Могу ли я узнать, что не так с моей конфигурацией или кодом? Заранее признателен за помощь!

...