В 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, соблюдая при этом принцип минимальных привилегий.
Не забудьте выбрать подходящий метод с учетом ваших конкретных требований и соображений безопасности.