Разрешить межаккаунтный доступ из инстанса Amazon EC2 к корзине Amazon S3 - PullRequest
0 голосов
/ 13 июля 2020

У меня есть корзина S3 "cross-bucket" в учетной записи, скажем B. Теперь я хочу, чтобы EC2, который присутствует в учетной записи A, имел доступ к этой корзине "cross-bucket" в учетной записи B.

Мне нужно достичь это с использованием ролей IAM, поскольку нам не разрешено создавать пользователей.

Я использовал шаблон ниже для создания роли в учетной записи B

 AWSTemplateFormatVersion : '2010-09-09'
 Description: 'Cross account role for S3'

 Parameters:
   AccountId:
   Type: String
   Description: Account ID of admin account (containing user to allow)

 Resources:
 CrossAccountRole:
Type: AWS::IAM::Role
Properties:
  AssumeRolePolicyDocument:
    Statement:
      - Effect: Allow
        Action: sts:AssumeRole
        Principal:
          AWS:
            - !Sub arn:aws:iam::${AccountId}:root
  Path: /
  Policies:
    - PolicyName: my-s3-delegate
      PolicyDocument:
        Statement:
          - Effect: Allow
            Action:
              - s3:ListBucket
              - s3:GetObject
            Resource: "*"
  RootInstanceProfile: 
Type: "AWS::IAM::InstanceProfile"
Properties: 
  Path: "/"
  Roles: 
      - 
        Ref: "CrossAccountRole"
    

После создания этой роли, как мне прикрепить это к экземпляру присутствует в аккаунте A? Или мне что-то здесь не хватает?

Ответы [ 2 ]

2 голосов
/ 13 июля 2020

Ваша ситуация:

  • Экземпляр Amazon EC2 в Аккаунте-A
  • Корзина Amazon S3 в Аккаунте-B
  • Вы хотите разрешить инстанс EC2 для доступа к корзине

Это можно сделать двумя способами:

Вариант 1: Политика корзины

Просто добавьте политику корзины в корзину в Account-B который предоставляет доступ к роли IAM, используемой экземпляром EC2:

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Action": [
                "s3:GetObject",
                "s3:ListBucket"
            ],
            "Effect": "Allow",
            "Resource": [
                "arn:aws:s3:::my-bucket",
                "arn:aws:s3:::my-bucket/*"
            ],
            "Principal": {
                "AWS": [
                    "arn:aws:iam::ACCOUNT-A:role/my-ec2-role"
                ]
            }
        }
    ]
}

Экземпляр EC2 будет использовать свои обычные учетные данные роли IAM для доступа к корзине. Также убедитесь, что роль IAM дала разрешение на использование Amazon S3 для доступа к корзине:

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "s3:GetObject",
                "s3:ListBucket"
            ],
            "Resource": [
                "arn:aws:s3:::bucket-b",
                "arn:aws:s3:::bucket-b/*"
            ]
        }
    ]
}

Вариант 2. Принять роль

  • Создайте роль IAM в учетной записи-B, которая имеет разрешение на доступ к корзине
  • Код в экземпляре EC2 вызывает AssumeRole() в роли IAM
  • Используйте возвращенные учетные данные для доступа к корзине
2 голосов
/ 13 июля 2020

После создания этой роли, как мне прикрепить ее к экземпляру, присутствующему в учетной записи A?

Вы не присоединяете его к экземпляру в A cc A. Вместо этого вы создаете роль экземпляра в A cc A. Роль будет иметь разрешения на принятие роли из A cc B.

Таким образом, роль экземпляра будет иметь политику аналогично следующему:

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "VisualEditor0",
            "Effect": "Allow",
            "Action": "sts:AssumeRole",
            "Resource": "<ARN-of-ROLE-in-ACC-B>"
            }
        }
    ]
}

Тогда любое приложение, работающее на экземпляре, должно будет использовать sts accept-role , чтобы фактически взять на себя роль и выполнять действия в A cc Б.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...