アクセス用ロール作成 - Shinichi0713/recipie_suggest GitHub Wiki
APP用のロール作成
EC2上で動作するWebアプリが、S3とDynamoDBへのread/write権限を持つようにIAMロールを作成し、EC2インスタンスにアタッチする手順を以下にまとめます。
1. IAMロールの作成
1-1. AWSマネジメントコンソールでIAMロール作成画面へ
- AWSコンソールにログイン
- 「IAM」→「ロール」→「ロールの作成」
1-2. 信頼されたエンティティタイプの選択
- 「AWSサービス」を選択
- 「ユースケースの選択」で「EC2」を選択
- 「次へ」をクリック
1-3. アクセス権限ポリシーのアタッチ
a. S3とDynamoDB用のポリシーを検索・選択
- 「AmazonS3FullAccess」もしくは「AmazonS3ReadOnlyAccess」+「AmazonS3FullAccess」を選択(必要に応じて)
- 「AmazonDynamoDBFullAccess」もしくは「AmazonDynamoDBReadOnlyAccess」+「AmazonDynamoDBFullAccess」を選択(必要に応じて)
※最小権限の原則に従い、必要な操作のみ許可するカスタムポリシーを作成するのが理想です。
b. カスタムポリシー例(Read/Write権限)
「ポリシーの作成」→「JSON」で以下を貼り付けて作成し、ロールにアタッチも可。
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"s3:GetObject",
"s3:PutObject",
"s3:ListBucket",
"s3:DeleteObject"
],
"Resource": [
"arn:aws:s3:::YOUR_BUCKET_NAME",
"arn:aws:s3:::YOUR_BUCKET_NAME/*"
]
},
{
"Effect": "Allow",
"Action": [
"dynamodb:PutItem",
"dynamodb:GetItem",
"dynamodb:UpdateItem",
"dynamodb:DeleteItem",
"dynamodb:Scan",
"dynamodb:Query"
],
"Resource": "arn:aws:dynamodb:YOUR_REGION:YOUR_ACCOUNT_ID:table/YOUR_TABLE_NAME"
}
]
}
YOUR_BUCKET_NAME
,YOUR_REGION
,YOUR_ACCOUNT_ID
,YOUR_TABLE_NAME
はご自身の環境に合わせて修正してください。
1-4. ロール名を入力して作成
- 例:
WebAppS3DynamoDBRole
2. EC2インスタンスにロールをアタッチ
2-1. EC2インスタンス管理画面へ
- 「インスタンス」→ 対象のインスタンスを選択 → 「アクション」→「セキュリティ」→「IAMロールの変更」
2-2. 作成したロールを選択して「保存」
3. Webアプリ側の設定
- AWS SDK(boto3など)からは、インスタンスメタデータ経由で自動的にロールの認証情報が使われます。
- 明示的な
aws_access_key_id
やaws_secret_access_key
の設定は不要です。
4. 動作確認
aws s3 ls
やaws dynamodb list-tables
などでアクセスできるか確認- アプリからもS3/DynamoDBアクセスが正常にできるかテスト
参考: boto3での利用例
import boto3
# インスタンスロール経由で自動的に認証される
s3 = boto3.client('s3')
ddb = boto3.resource('dynamodb')
# S3操作例
s3.put_object(Bucket='YOUR_BUCKET_NAME', Key='test.txt', Body=b'hello')
# DynamoDB操作例
table = ddb.Table('YOUR_TABLE_NAME')
table.put_item(Item={'id': '001', 'value': 'test'})
まとめ
- IAMロールを作成し、S3/DynamoDBへのread/write権限を付与
- EC2インスタンスにそのロールをアタッチ
- Webアプリからは認証情報設定なしでアクセス可能
不明点や追加要件があればご質問ください。
以上です。