23 December 2014

Amazon AWS アクセス制限を行う

AmazonのAWSにログオンすると、『ルート・アクセスキーを無効化してIAMに移行せよ』と、毎回メッセージが表示される。確かに、普段使うバックアップ用途などではフルアクセスは必要無いため、ルート権限のアクセスキーを削除してIAMに移行した。

Amazonでは、次のような声明を出している

すべての AWS アカウントにルートアカウントの認証情報があります。これらの認証情報は、アカウント内のすべてのリソースへのフルアクセスを許可します。ルートアカウントの認証情報の権限を制御することはできないので、安全な場所に格納し、代わりに AWS の日常の操作には AWS Identity and Access Management (IAM) ユーザーの認証情報を使用する必要があります。

ルート・アクセスキーとX509認証の無効化

削除するのではなく、『無効化』という処理を行う。

AWSのユーザ・ダッシュボードを表示して、Security Credentials設定で無効化(Inactive)処理を行う

20141223-amazon-ackeyroot.jpg
Access Key 無効化

公式マニュアル「AWS アカウントのアクセスキー管理 」による

20141223-amazon-x509.jpg
X.509 Certificates 無効化

IAM グループの作成

Amazon公式マニュアルでは、「グループに権限を割り当て」たうえで、「ユーザをグループに参加させる」ということになっている。ただ、「ユーザに権限を直接割り当てる」こともできるため、めんどくさいなら、グループを作らなくても良い。

20141223-amazon-groupcreate.jpg
IAMグループの作成

20141223-amazon-iampermissions.jpg
権限(ポリシー)の設定は、とりあえずS3フルアクセスのテンプレートを選択する。内容を編集するか聞かれるので、アクセスするバケットの制限を設ける場合は「はい」を押して権限を編集する

権限(ポリシー)設定の構文詳細は公式マニュアル『AWS IAM ポリシーの概要』に詳しく書かれている。

Amazon S3 Full Access のポリシー
{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Action": "s3:*",
      "Resource": "*"
    }
  ]
}

上のようになっている権限を、下のように変更して特定バケットしか読み書きできないよう制限する

Amazon S3 Full Access のポリシー
{
  "Version": "2012-10-17",
  "Statement": [
    {
         "Effect":"Allow",
         "Action":"s3:ListAllMyBuckets",
         "Resource":"arn:aws:s3:::*"
    },
    {
         "Effect":"Allow",
         "Action":"s3:*",
         "Resource":[
             "arn:aws:s3:::MY-BACKET",
             "arn:aws:s3:::MY-BACKET/*"
         ]
    }
  ]
}

ここで、arn:aws:s3:::MY-BACKET …のような表記は、公式マニュアル『Amazon リソースネーム(ARN)と AWS サービスの名前空間』に例が掲載されいてる。

IAM ユーザの作成

20141223-amazon-usercreate.jpg
IAMユーザの作成

20141223-amazon-useraccesskey.jpg
IAMユーザのアクセス・キー表示

画面に従ってユーザ追加すると、アクセス・キーとシークレット・アクセス・キーが表示される。シークレット・アクセス・キーはこれ以降二度と表示されないので、ここで手元に保存しておく。もし、シークレット・アクセス・キーを忘れた場合、現在のアクセス・キーを一旦削除して新しいものを作る必要が出てくる。(アクセス・キーはユーザ当り2個しか作れない)

ユーザ作成後、グループに参加させる

20141223-amazon-useraddgroup.jpg
IAMユーザをグループに参加させる