S3バケットにアクセス権限があるか確認

awscliで表題を行う。

■ 環境

  • awscli 1.10.18

■ head−bucket

`s3api`コマンドに`head-bucket`というサブコマンドが存在する。試してみる。

$ aws s3api head-bucket withsin
$
$ aws s3api head-bucket withsin2

A client error (404) occurred when calling the HeadBucket operation: Not Found
$
$ aws s3api head-bucket XXXX

A client error (403) occurred when calling the HeadBucket operation: Forbidden
$

`head-bucket`は対象のS3バケットが存在し、かつ権限がある場合には何も出力されない。

対象のS3バケットが存在しなければ”404“、アクセス権限が無ければ”403“が出力された。

以上。

■ 関連

S3オブジェクトの権限を変更

awscliで表題の件を行う。

■ 環境

  • awscli 1.10.17

■ get-object-acl

先日のエントリの通り、S3オブジェクトの既存の権限を取得することはできた。

$ aws s3api get-object-acl --bucket withsin --id test.tar.gz

これを変更する方法を確認する。というのも下記のように`–acl public-read`を付け忘れて実行してしまうことが多々ある為である。

$ aws s3 cp ./test.tar.gz s3://withsin/

■ put-object-acl

`s3api`には`put-object-acl`というサブコマンドもあるようだ。これで設定できそうである。

$ aws s3api put-object-acl --acl public-read --bucket withsin --key test.tar.gz
$
$ aws s3api get-object-acl --bucket withsin --key test.tar.gz
{
    "Owner": {
        "DisplayName": "withsin",
        "ID": "XXXXXXXXXXXXXXXXXXXX"
    },
    "Grants": [
        {
            "Grantee": {
                "Type": "CanonicalUser",
                "DisplayName": "withsin",
                "ID": "XXXXXXXXXXXXXXXXXXXX"
            },
            "Permission": "FULL_CONTROL"
        },
        {
            "Grantee": {
                "Type": "Group",
                "URI": "http://acs.amazonaws.com/groups/global/AllUsers"
            },
            "Permission": "READ"
        }
    ]
}
$

上記で良さそうである。以前はその場で気がつけば下記のようにアップロードしなおしていたりしたが、これでブラウザから”ManagementConsole“を開いて…というような事をしなくて済みそうだ。

以上。

■ 関連

S3のバケット名称一覧

表題の通り。awscliを使って取得する。

■ 環境

  • awscli 1.10.7

■ s3

`s3`コマンドで取得すると下記のようになる。

$ aws s3 ls
2013-07-08 22:48:08 withsin
2016-03-31 19:16:18 withsin.tech
$

この結果から何か行うにはちょっと面倒である。先日のエントリで`s3api`を知ったのでこちらも見てみると似たようなコマンドが存在する。

■ s3api

$ aws s3api list-buckets
{
    "Owner": {
        "DisplayName": "withsin",
        "ID": "XXXXXXXXXXXXXXXXXXXX"
    },
    "Buckets": [
        {
            "CreationDate": "2013-07-08T13:48:08.000Z",
            "Name": "withsin"
        },
        {
            "CreationDate": "2016-03-31T10:16:18.000Z",
            "Name": "withsin.tech"
        }
    ]
}
$

JSON形式で取得しているので`jq`を使うと”Name“の一覧が取得できそうである。

$ aws s3api list-buckets | jq ".Buckets[].Name"
"withsin"
"withsin.tech"
$

これで扱いやすそうだ。

以上。

■ 関連

awscliでS3オブジェクトの権限を確認

表題の通り。以前、どうやったら取れるのだろう?と疑問だった点が解消されたのでメモ。

■ 環境

  • awscli 1.10.17

■ s3api

`aws`コマンドには`s3api`コマンドがあり、ここから各種情報を取得できる。その中に自信が以前欲しいと思っていた情報を取得するコマンドがあったので試してみる。

$ aws s3api get-object-acl

あるファイルのpermissionを確認したい。下記は”withsin“バケットにある”test.tar.gz“の権限を確認している。

$ aws s3api get-object-acl --bucket withsin --key test.tar.gz
{
    "Owner": {
        "DisplayName": "aws_core",
        "ID": "XXXXXXXXXXXXXXXXXXXX"
    },
    "Grants": [
        {
            "Grantee": {
                "Type": "CanonicalUser",
                "DisplayName": "aws_core",
                "ID": "XXXXXXXXXXXXXXXXXXXX"
            },
            "Permission": "READ"
        },
        {
            "Grantee": {
                "Type": "CanonicalUser",
                "DisplayName": "aws_core",
                "ID": "XXXXXXXXXXXXXXXXXXXX"
            },
            "Permission": "WRITE"
        },
        {
            "Grantee": {
                "Type": "CanonicalUser",
                "DisplayName": "aws_core",
                "ID": "XXXXXXXXXXXXXXXXXXXX"
            },
            "Permission": "READ_ACP"
        },
        {
            "Grantee": {
                "Type": "CanonicalUser",
                "DisplayName": "aws_core",
                "ID": "XXXXXXXXXXXXXXXXXXXX"
            },
            "Permission": "WRITE_ACP"
        },
        {
            "Grantee": {
                "Type": "Group",
                "URI": "http://acs.amazonaws.com/groups/global/AllUsers"
            },
            "Permission": "READ"
        }
    ]
}

ちなみに該当のファイルは下記のようにしてアップロードしたときのものである。

$ aws s3 cp ./test.tar.gz s3://withsin/test.tar.gz --acl public-read

以上。

■ 関連

S3にアップロード時のpermission

awscliを使用時において表題の通り。たまに忘れるのでメモ。

■ 環境

  • awscli 1.8.6

■ S3にファイルをアップロード

awscliでファイルをS3にアップロードするとき、下記のようにしている。

$ aws s3 cp ./testfile.txt s3://withsin/testfile.txt

この状態でアップロードされたファイルのアクセス許可(permission)は下記の通り。

s3-permission-001

■ –acl

`aws s3 cp`コマンドには`–acl`オプションがあり、下記を指定することができる。

  • private
  • public-read
  • public-read-write
  • authenticated-read
  • bucket-owner-read
  • bucket-owner-full-control
  • log-delivery-write

ちなみに、その他の文字列を渡すと下記のようにエラーとなる。

$ aws s3 cp ./testfile.txt s3://withsin/testfile.txt --acl log-derivery-write
usage: aws [options]   [parameters]
aws: error: argument --acl: Invalid choice, valid choices are:

private                       | public-read
public-read-write             | authenticated-read
bucket-owner-read             | bucket-owner-full-control
log-delivery-write

Invalid choice: 'log-derivery-write', maybe you meant:

  * log-delivery-write
$

試しに全てを実行してみたが、自身がやりたいことは下記である。

  • URLを知っている人は誰でもダウンロード可能

これはManagementConsoleでは下記のようになるはず。

s3-permission-002

`–acl`オプションを使って実現するには下記。

$ aws s3 cp ./testfile.txt s3://withsin/testfile.txt --acl public-read

ACLに関しての詳細は下記を参照。

アクセスコントロールリスト(ACL)の概要
https://docs.aws.amazon.com/ja_jp/AmazonS3/latest/dev/acl-overview.html

以上。

■ 関連