AWSのサービスへのアクセス制御を定義できるAWS IAMのポリシーとは?実際に使用してみた

Amazon Web Services (以下AWSとする)では、AWSのサービスやリソースへのアクセスを安全に管理できるIdentity and Access Management(以下IAMとする)機能があります。
当コラムでは「IAM」機能のひとつである、ポリシーの概要説明や利用方法を実践しご紹介します。
前回のコラムではAWS IAMの概要、料金、使用目的等をご紹介していますので是非お先にご確認ください。
リンク:AWS IAMによる権限設定のメリットと設定方法

ポリシーとは?

AWS IAMの「グループ」、「ユーザー」、「ロール」、「ポリシー」の4つの要素の一つです。
ポリシーは「グループ」、「ユーザー」、「ロール」に対し、各AWSのサービスのリソースへの操作の制御(許可、拒否)ができます。
ポリシーの基本は「誰が」「何のAWSサービスを」「何のリソースに対して」「何の操作を」「許可する(拒否する)」を「JSONポリシードキュメント」という形式で定義します。

ポリシーの種類

ポリシーには以下のような種類があります。

管理ポリシー

ポリシー単体で存在し、ユーザー、グループ、またはロールに紐づけることができます。管理ポリシーは以下の2つ分類されています。

  • AWS管理ポリシー
    AWSが作成および管理している管理ポリシーです。
    編集、削除することは不可能になっています。
  • カスタマー管理ポリシー
    利用者が独自で作成および管理する管理ポリシーです。
    ポリシーを新規作成、編集、削除することができます。
インラインポリシー

単一のユーザー、グループ、またはロールに直接埋め込むポリシーです。

ポリシーのタイプ

AWSでは、6つのポリシータイプ(アイデンティティベースのポリシー、リソースベースのポリシー、アクセス許可の境界、Organizations SCP、ACL、セッションポリシー)がサポートされています。
タイプの詳細については、「Policies and Permissions」をご参照ください。

ポリシーの作成手段

ポリシーは、以下の様々な方法により作成することができます。

コンソール
  • JSONを直接記述し作成
  • JSONの記述を必要としない画面のガイドで作成
CLI
  • カスタマー管理ポリシーを作成するコマンドの使用
  • インラインポリシーを作成するコマンドの使用
API
  • カスタマー管理ポリシーを作成
  • インラインポリシーを作成

当コラムでは主にJSONを直接記述し、ポリシーの作成を行います。

JSONポリシー概要

JSONポリシードキュメントはエレメントという要素で構成されています。

  • IDやバージョンなどのポリシー全体情報
  • 1つ以上の個別のステートメント
  • ステートメントを構成するアクセス許可に関するエレメント

出典:

ステートメントを構成するエレメントについては、「IAM JSON ポリシーエレメントのリファレンス」をご参照ください。

ポリシーのアタッチ方法

AWS管理ポリシーまたはカスタマー管理ポリシーは「ユーザー」、「グループ」または「ロール」に対してアタッチして使用します。
ここではユーザーへのAWS管理ポリシー「AdministratorAccess」のアタッチを例として、ポリシーのアタッチ方法を説明します。

アクセス管理の「ポリシー」をクリックします。

こちらがポリシーの一覧画面です。

黄色のAWSマークが表示されているポリシーがAWS管理ポリシーです。
編集時刻でAWSがAWS管理ポリシーをアップデートした日時を確認できます。

ポリシーの検索欄で「AdministratorAccess」を検索し、ポリシー名をクリックします。

「アクセス権限」タブではJSONドキュメントとポリシー概要を確認できます。
ポリシーをアタッチするため、「ポリシーの使用状況」タブをクリックします。

「ポリシーの使用状況」タブには既にアタッチされている「ユーザー」「グループ」「ロール」が表示されています。
「アタッチ」をクリックします。

ポリシーをアタッチするユーザーを選択し、ポリシーのアタッチをクリックします。

「アクセス権限」タブでさきほど選択したユーザーが追加され、ポリシーがアタッチされたことが確認できます。

実施例

ポリシーを利用してS3バケットへのアクセス制御を行います。

  • 1. 特定のS3バケットへのアクセス許可の実践例
  • 2. 特定のS3バケットのフォルダへのアクセス許可の実践例
1. 特定のS3バケットへのアクセス許可の実践例

特定のS3バケットのみへのアクセスを許可し、オブジェクトの操作を可能とするポリシーを作成します。作成したポリシーのみをアタッチしたユーザーでバケットへアクセスの確認を行います。

アクセス管理の「ポリシー」から「ポリシーの作成」をクリックします。

「JSON」タブをクリックします。

以下のJSONを入力し、「ポリシーの確認」をクリックします。

{
   "Version":"2012-10-17",
   "Statement":[
      {
         "Effect":"Allow",
         "Action":[
            "s3:ListBucket"
         ],
         "Resource":"arn:aws:s3::: {アクセスを許可するバケット名}"
      },
      {
         "Effect":"Allow",
         "Action":[
            "s3:PutObject",
            "s3:GetObject",
            "s3:DeleteObject"
         ],
         "Resource":"arn:aws:s3::: {アクセスを許可するバケット名}/*"
      }
   ]
}

ポリシー名を入力し、「ポリシーの作成」をクリックします。

画面上部に「~が作成されました。」と表示され、表示されている「ポリシー名」をクリックします。

「ポリシーの使用状況」タブをクリックします。

「アタッチ」をクリックします。

ポリシーをアタッチするユーザーを選択し、「ポリシーのアタッチ」をクリックします。

アタッチしたユーザーを確認し、「ユーザー名」をクリックします。

当ポリシーのみアタッチされていることを確認できました。

ポリシーでアクセスを許可したバケットへアクセスします。

※他のバケットは表示されないように「ListAllMyBuckets」のアクションを外しています。そのため、S3のバケット一覧は表示されません。URLで直接アクセスする必要があります。
https://s3.console.aws.amazon.com/s3/buckets/{アクセスを許可するバケット名}/

特定のS3バケットへのアクセスを確認できました。

※ポリシーで許可していない他のバケットへアクセスした場合は下記の通りエラーとなります。

2. 特定のS3バケットのフォルダへのアクセス許可の実践例

1.で作成したポリシーのアクションに条件キーを追加し「特定のフォルダのみアクセスできる」要素を加えたポリシーを作成します。
「ListBucket」では、Conditionを用いてフォルダの絞り込みを行い、「Getobject、Putobject、Deleteobject」では、「ListBucket」と同様なフォルダを絞り込むためにConditionで使用する条件キーが利用できないため、Resourceでの絞り込みをします。
S3で定義されているアクションでは、このように使用可能なARNや条件キーが異なります。詳細は以下のリンクをご確認ください。

リンク:Amazon S3のアクション、リソース、および条件キー別ウィンドウで開きます

以下のJSONを入力し、先ほどと同様な手順でポリシーを作成し、ユーザーへアタッチします。

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": "s3:ListBucket",
            "Resource": "arn:aws:s3:::{アクセスを許可するバケット名}",
            "Condition": {
                "StringLike": {
                    "s3:prefix": "{アクセスを許可するフォルダ名}/*"
                }
            }
        },
        {
            "Effect": "Allow",
            "Action": [
                "s3:PutObject",
                "s3:DeleteObject",
                "s3:GetObject"
            ],
            "Resource": "arn:aws:s3::: {アクセスを許可するバケット名}/{アクセスを許可するフォルダ名}/*"
        }
    ]
}

先ほどと同じようにURLを指定してポリシーで許可したフォルダへアクセスします。
https://s3.console.aws.amazon.com/s3/buckets/{アクセスを許可するバケット名}/{フォルダ名}/

特定のフォルダへのアクセスを確認できました。

※ポリシーで許可していない他のフォルダへアクセスした場合は下記の通りエラーとなります。

おわりに

「AWS IAM」ポリシーを活用することにより、ユーザーのリソースへのアクセスをきめ細かに制御できます。グループやロールとも合わせて利用し効率よく安全にセキュリティを高めましょう。

Amazon Web Services(AWS)、Microsoft Azureの
導入支援サービスのご相談、お問い合わせをお待ちしております。

ページ上部へ戻る