LoginSignup
1
1

More than 1 year has passed since last update.

【AWS】ABAC を雑にやるハンズオン

Posted at

はじめに

クラスメソッドさんの8/17(火)リモート開催の AKIBA.AWS ONLINE で「ABAC」という言葉を初めて知りました。是非試してみたい!と思い、色々調べたりして自分なりに扱うことはできました。ということで、この記事では ABAC をやってみる一例を紹介します。

この記事は AWS 初心者が書いており、AWS を不適切なやり方、間違ったやり方で使用している可能性があります。ご指摘等がございましたら、コメント頂けると幸いです。

ABAC とは

ABAC は「Attribute Based Access Control」の略称です。

属性ベースのアクセスコントロール (ABAC) は、属性に基づいてアクセス許可を定義する認証戦略です。
引用元:AWS の ABAC とは - AWS Identity and Access Management

AKIBA.AWS ONLINE の登壇資料を見るとわかりやすいです。

ゴール

赤チームの鈴木さんは、S3 バケット内の赤チームのオブジェクト(.txt ファイル)をダウンロードでき、青チームのオブジェクトをダウンロードできないようにします。

一方、青チームの田中さんは、青チームのオブジェクトをダウンロードでき、赤チームのオブジェクトをダウンロードできないようにします。
絵_編集.jpg

前提条件

  • AWS アカウントを持っている。
    AWS アカウント作成の流れ

  • 作業用の IAM ユーザーを持っている。
    AWSの全権限を持つルートユーザーの使用は非推奨です。代わりに IAM ユーザーを作成して使用しましょう。

  • この記事は AWS 未経験者・初心者向けです。

手順

  1. ABAC ポリシー( IAM ポリシー)の作成
  2. IAM ユーザーの作成(鈴木さんと田中さん)
  3. .txt ファイルの作成(赤チーム用と青チーム用)
  4. S3 バケットの作成、オブジェクトのアップロード
  5. ABAC できるかテスト

1. ABAC ポリシー( IAM ポリシー)の作成

初めに、AWS マネジメントコンソールにサインインします。
この記事では [東京リージョン] を選択して、進めていきます。
WS204_2.jpg

上部の検索ボックスでIAMと検索して、サービス欄の [IAM] を選択し、IAM コンソールを開きます。
WS205_2.jpg

左側のナビゲーションペインで、[ポリシー] を選択します。
WS209_2.JPG

[ポリシーを作成] を選択します。
WS210_2.JPG

[JSON] タブを選択して、以下の JSON ポリシードキュメントを入力します。
エラー等がないことを確認して、[次のステップ: タグ] を選択します。
WS211_4 - コピー.JPG

前半部分(4~8行目)は
自分( AWS アカウント)が持つバケットの一覧を表示すること(s3:ListAllMyBuckets)をを許可する(Allow)。

真ん中部分(9~13行目)は
全ての S3 バケット(arn:aws:s3:::*)に対して、オブジェクト等のバケットの中身を表示すること(s3:ListBucket)を許可する(Allow)。

後半部分(14~23行目)は
オブジェクトタグのteamキーの値(s3:ExistingObjectTag/team)とリクエストを行うプリンシパルタグのteamキーの値(aws:PrincipalTag/team)が完全一致(StringEquals)する条件で(Condition)、全ての S3 バケット(arn:aws:s3:::*)に対して、オブジェクトを取得すること(s3:GetObject)を許可する(Allow)。

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": "s3:ListAllMyBuckets",
            "Resource": "*"
        },
        {
            "Effect": "Allow",
            "Action": "s3:ListBucket",
            "Resource": "arn:aws:s3:::*"
        },
        {
            "Effect": "Allow",
            "Action": "s3:GetObject",
            "Resource": "arn:aws:s3:::*",
            "Condition": {
                "StringEquals": {
                    "s3:ExistingObjectTag/team": "${aws:PrincipalTag/team}"
                }
            }
        }
    ]
}

タグを追加せず、[次のステップ: 確認] を選択します。
WS212 - コピー.JPG

[名前] にGetObjectSameTeamと入力します。
[概要] を確認して、 [ポリシーの作成] を選択します。
WS213 - コピー.JPG

IAMポリシーGetObjectSameTeamが作成できました。
これで、1. ABAC ポリシー( IAM ポリシー)の作成は終了です。
WS214 - コピー.JPG

2. IAM ユーザーの作成(鈴木さんと田中さん)

前述のとおり、IAM コンソールを開きます。
左側のナビゲーションペインで、[ユーザー] を選択します。
[ユーザーを追加] を選択します。
WS215 - コピー.JPG

[ユーザー名] にsuzukiと入力します。
[アクセスの種類] は [AWS マネジメントコンソールへのアクセス] を選択します。
[コンソールのパスワード] は [カスタムパスワード] を選択して、任意のパスワードを入力します。
[パスワードのリセットが必要] は選択しません。(チェックボックスをはずします)
WS216 - コピー.JPG

[既存のポリシーを直接アタッチ] を選択します。
真ん中の検索ボックスでGetObjectSameTeamと検索して、先ほど作成した IAM ポリシーGetObjectSameTeamを選択します。
[次のステップ: タグ] を選択します。
WS219 - コピー.JPG

[キー] にteam、[値 (オプション)] にredと入力します。
[次のステップ: 確認] を選択します。
WS220 - コピー.JPG

作成する IAM ユーザーの選択内容を確認して、[ユーザーの作成] を選択します。
WS221 - コピー.JPG

IAMユーザーsuzukiの作成が成功したことを確認して、右下の [閉じる] を選択します。
WS222 - コピー.JPG

同様に IAMユーザーtanakaを作成します。
[タグの追加(オプション)] では、[キー] にteam、[値 (オプション)] にblueと入力します。

IAMユーザーsuzukitanakaが作成できました。
これで、2. IAM ユーザーの作成(鈴木さんと田中さん)は終了です。
WS223 - コピー.JPG

3. .txt ファイルの作成(赤チーム用と青チーム用)

この記事では、Microsoft Windows に付属するテキストエディタ「メモ帳」を使用して、red-team.txtblue-team.txtを作成します。

これで、3. .txt ファイルの作成(赤チーム用と青チーム用)は終了です。
WS225 - コピー.JPG

4. S3 バケットの作成、オブジェクトのアップロード

前述のとおり、上部の検索ボックスでS3と検索して、S3 コンソールを開きます。
[バケットを作成する] を選択します。
WS226 - コピー.JPG

この記事では [バケット名] にteam-bucket-2と入力します。
バケット名は一意である必要があり、世界で同じバケット名を複数作成することはできません。
team-bucket-2以外のバケット名で作成してください。
[AWS リージョン] は [アジアパシフィック (東京) ap-northeast-1] を選択します。
その他の設定はデフォルトのままです。
下にスクロールして、[バケットを作成する] を選択します。
WS230 - コピー.JPG
WS228 - コピー.JPG

S3 バケットteam-bucket-2が作成できました。
作成したバケットの名前team-bucket-2を選択します。
WS231 - コピー.JPG

[アップロード] を選択します。
WS232 - コピー.JPG

[ファイルを追加] を選択します。
先ほど作成したred-team.txtを選択します。
WS233-2 - コピー.JPG

[プロパティ] を選択して、[タグの追加] を選択します。
WS234 - コピー.JPG

[キー] にteam、[値 (オプション)] にredと入力します。
[アップロード] を選択します。
WS235 - コピー.JPG

オブジェクトred-team.txtのアップロードが成功したことを確認して、[閉じる] を選択します。
WS237 - コピー.JPG

同様にオブジェクトblue-team.txtをアップロードします。
[タグ - オプション)] では、[キー] にteam、[値 (オプション)] にblueと入力します。

オブジェクトred-team.txtblue-team.txtがアップロードできました。
これで、4. S3 バケットの作成、オブジェクトのアップロードは終了です。
WS236 - コピー.JPG

5. ABAC できるかテスト

ナビゲーションバーでアカウント名を選択します。
[サインアウト] を選択します。
WS239 - コピー.JPG

IAM ユーザーsuzukiAWS マネジメントコンソールにサインインします。
前述のとおり、S3 コンソールを開きます。
S3バケットteam-bucket-2を選択します。
オブジェクトred-team.txtを選択します。
WS240 - コピー.JPG

[ダウンロード] を選択します。
WS241 - コピー.JPG

オブジェクトred-team.txtがダウンロードできました!
WS243 - コピー.JPG

同様にオブジェクトblue-team.txtをダウンロードしてみます。
「AccessDenied」と表示され、アクセス(ダウンロード)できないです。
WS246 - コピー - コピー.JPG

IAM ユーザーtanakaの場合も、ぜひお試しください。
これで、5. ABAC できるかテストは終了です。

おわりに

この記事では ABAC をやってみましたが、これからも色んな AWS サービスや機能に触れて紹介していきたいと思います。

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1