CloudFormationで作成したEC2から「S3の特定バケットに対してアクセス可能にする」方法の紹介です。
テンプレートファイルに「S3の特定バケットに対してアクセスを許可する」IAMロールを作成しEC2に付与しました。
4 Step
テンプレートファイルに以下の4項目を追記します。
- IAMロールの記述
- IAMポリシーの記述
- IAMインスタンスロールの記述
- EC2インスタンスにIAMインスタンスロールを付与
1. IAMロールの記述
IAMユーザーと似ていますが異なる点があります。
- IAMユーザーは人にアクセス権限を付与
- IAMロールはAWSリソースにアクセス権限を付与
今回アクセス権限を付与したいのはEC2ですので、IAMロールを使用します。
S3AccessRole:
Type: "AWS::IAM::Role"
Properties:
AssumeRolePolicyDocument:
Version: "2012-10-17"
Statement:
-
Effect: "Allow"
Principal:
Service:
- "ec2.amazonaws.com"
Action:
- "sts:AssumeRole"
Path: "/"
2. IAMポリシーの記述
アクセス権限の具体的な内容は、IAMポリシーに記述します。
Roleに先程記述したIAMロールを指定します。
<bucketname>
は実際のバケット名に置き換えます。
S3AccessPolicies:
Type: AWS::IAM::Policy
Properties:
PolicyName: s3access
PolicyDocument:
Version: '2012-10-17'
Statement:
- Effect: Allow
Action:
- "s3:ListAllMyBuckets"
- "s3:GetBucketLocation"
Resource: "arn:aws:s3:::*"
- Effect: Allow
Action: "*"
Resource:
- "arn:aws:s3:::<bucketname>"
- "arn:aws:s3:::<bucketname>/*"
Roles:
- !Ref S3AccessRole
3. IAMインスタンスプロファイルの記述
EC2インスタンスとロールを紐づけるのに、IAMインスタンスプロファイルを記述します。
S3AccessInstanceProfile:
Type: AWS::IAM::InstanceProfile
Properties:
Path: "/"
Roles:
- !Ref S3AccessRole
4. EC2インスタンスにIAMインスタンスロールを付与
EC2インスタンスにIAMインスタンスプロファイルを付与します。
Instance:
Type: 'AWS::EC2::Instance'
Properties:
IamInstanceProfile:
!Ref S3AccessInstanceProfile