s3 버킷에서 표시할 이미지를 가져오려는 플라스크 앱이 있습니다.
자격 증명 부분을 어떻게 구현합니까? 내가 말하고 싶은 건:
버킷에서 이미지를 가져오려면 aws 자격 증명과 함께 boto3을 사용해야 합니까?
aws 자격 증명 없이 boto3을 사용하고 ECS에 역할을 연결할 수 있습니까? 그러면 자격 증명 없이 이미지를 가져올 수 있나요?
현재 제가 달성하고 싶은 것은 ECS의 CodePipeline에 앱을 배치하고 이미지를 s3 버킷으로 업데이트하여 ECS의 플라스크 앱이 s3 버킷에 새 이미지를 표시하도록 하는 것입니다.
자격 증명 등에 대한 모범 사례가 무엇인지 혼란 스럽습니다.
답변1
항상 IAM 역할 사용프로덕션 환경에서는 명시적인 액세스/비밀 키를 사용하지 마세요. 자세히 알아보기EC2 인스턴스 역할여기, 동일하게 적용됩니다ECS IAM 역할.
ECS의 경우 다음을 수행해야 합니다.
- IAM 역할 생성
s3:GetObject
S3 버킷에 대한 권한이 있습니다 . - 붙이다ECS 작업에 대한 IAM 역할
TaskRole
. - EC2 기반 ECS 대신 ECS Fargate를 사용하는 경우에도 필요합니다.
ExecutionRole
이는 기본적으로 Fargate에 작업을 시작할 수 있는 권한을 부여합니다.
~ 안에CloudFormation 템플릿그것은 다음과 같을 것이다:
Parameters:
S3BucketName:
Type: String
Resources:
TaskDefinition:
Type: AWS::ECS::TaskDefinition
Properties:
NetworkMode: awsvpc
TaskRoleArn: !Ref TaskRole
ExecutionRoleArn: !Ref ExecutionRole
RequiresCompatibilities:
- FARGATE
Cpu: ...
Memory: ...
ContainerDefinitions:
- ...
TaskRole:
Type: AWS::IAM::Role
Properties:
AssumeRolePolicyDocument:
Statement:
- Effect: Allow
Principal:
Service: [ ecs-tasks.amazonaws.com ]
Action:
- sts:AssumeRole
Path: /
Policies:
- PolicyName: TaskAccess
PolicyDocument:
Version: '2012-10-17'
Statement:
- Action:
- s3:GetObject
Effect: Allow
Resource:
- !Sub "arn:aws:s3:::${S3BucketName}/*"
ExecutionRole:
Type: AWS::IAM::Role
Properties:
AssumeRolePolicyDocument:
Statement:
- Effect: Allow
Principal:
Service: [ ecs-tasks.amazonaws.com ]
Action:
- sts:AssumeRole
Path: /
ManagedPolicyArns:
- arn:aws:iam::aws:policy/service-role/AmazonECSTaskExecutionRolePolicy
그러나 종종 아무런 의미가 없습니다다운로드 중 공개 이미지S3에서 Flask 웹 앱으로. 대신 이미지를 만들어 보세요.공공의S3에서 <img src="https://your-bucket-name.s3.amazonaws.com/whatever/image.jpg"/>
.
이미지가 다음과 같은 경우공개되지 않음여전히 Flask에 다운로드해서는 안 되며 대신 생성해야 합니다.미리 서명된 URLS3의 파일에 대한 시간 제한 액세스를 제공합니다. 먼저 S3에서 Flask로 파일을 다운로드하지 않고 다시 S3 위치에 직접 연결합니다.
도움이 되었기를 바랍니다 :)