Безопасное обеспечение связи между EC2 и S3: пример использования роли IAM

В Amazon Web Services (AWS) роли управления идентификацией и доступом (IAM) играют решающую роль в безопасном управлении доступом к различным ресурсам AWS. Одним из распространенных вариантов использования является обеспечение связи между экземплярами Amazon Elastic Compute Cloud (EC2) и корзинами Amazon Simple Storage Service (S3). В этой статье блога мы рассмотрим несколько способов достижения этой цели, а также приведем примеры кода.

Метод 1: роль IAM с политикой доступа S3

Шаг 1. Создайте роль IAM:

aws iam create-role --role-name EC2S3Role --assume-role-policy-document file://trust-policy.json

Шаг 2. Прикрепите политику доступа S3:

aws iam put-role-policy --role-name EC2S3Role --policy-name S3AccessPolicy --policy-document file://s3-access-policy.json

Шаг 3. Запустите экземпляр EC2 с ролью IAM:

aws ec2 run-instances --image-id ami-12345678 --instance-type t2.micro --iam-instance-profile Name=EC2S3Role

Метод 2: профиль экземпляра EC2

Шаг 1. Создайте профиль экземпляра IAM:

aws iam create-instance-profile --instance-profile-name EC2S3InstanceProfile

Шаг 2. Добавьте роль IAM в профиль экземпляра:

aws iam add-role-to-instance-profile --instance-profile-name EC2S3InstanceProfile --role-name EC2S3Role

Шаг 3. Запустите экземпляр EC2 с профилем экземпляра:

aws ec2 run-instances --image-id ami-12345678 --instance-type t2.micro --iam-instance-profile Name=EC2S3InstanceProfile

Метод 3: сценарий пользовательских данных EC2

Шаг 1. Создайте сценарий пользовательских данных EC2:

#!/bin/bash
aws s3 cp s3://your-s3-bucket/file.txt /home/ec2-user/file.txt

Шаг 2. Запустите экземпляр EC2 с помощью сценария пользовательских данных:

aws ec2 run-instances --image-id ami-12345678 --instance-type t2.micro --user-data file://user-data-script.sh

Метод 4: роль IAM с API AssumeRole

Шаг 1. Создайте роль IAM:

aws iam create-role --role-name EC2S3Role --assume-role-policy-document file://trust-policy.json

Шаг 2. Прикрепите политику AssumeRole:

aws iam put-role-policy --role-name EC2S3Role --policy-name AssumeRolePolicy --policy-document file://assume-role-policy.json

Шаг 3. Используйте API AssumeRole в экземпляре EC2:

import boto3
sts_client = boto3.client('sts')
response = sts_client.assume_role(
    RoleArn='arn:aws:iam::123456789012:role/EC2S3Role',
    RoleSessionName='EC2S3Session'
)
s3_client = boto3.client(
    's3',
    aws_access_key_id=response['Credentials']['AccessKeyId'],
    aws_secret_access_key=response['Credentials']['SecretAccessKey'],
    aws_session_token=response['Credentials']['SessionToken']
)

В этой статье мы рассмотрели различные методы обеспечения безопасного взаимодействия между экземплярами EC2 и корзинами S3 с использованием ролей IAM. Эти методы обеспечивают детальный и безопасный подход к управлению доступом к ресурсам S3 из экземпляров EC2. Реализуя эти методы, вы можете гарантировать, что ваши экземпляры EC2 имеют необходимые разрешения для взаимодействия с S3, соблюдая при этом принцип минимальных привилегий.

Не забудьте выбрать подходящий метод с учетом ваших конкретных требований и соображений безопасности.